JASONハーシュホーン:ようこそ A5に、誰もが。 我々は我々の前にエキサイティングな一週間を持っている、 非常に多くの新機能がある主な理由 この部屋に直面している。 それは素晴らしいです。 あなた方の多くは、偶然ここにいる、 そのさらに良いです。 だから、うまくいけば、私たちに参加しておこう。 今週は費やすつもりだ セクションの大部分 クイズの準備。 だから私たちの議題ごとに、我々は話をするつもりだ クラスのリソースについて少し、 だけでなく、クイズの後、再度、 クラス話すの大半を過ごす 質問について。 私たちはあなたのに答え終わったら 質問場合、またはご質問 当然私は、いくつかのコーディングに私たちを導く 中間試験のサンプル問題を抱えている 我々はここでのライブコーディングします過去 一緒にまた、いくつかの他のを持ち出すこと カバーするために良いのトピック。 我々が経てきたようなので、最初の あなたを思い出させるために数週間 みんな、資源のトンがあります このコースで利用可能。 彼らの多くは非常に参考になります あなたにあなたがし続けている クイズ0のための研究、なぜなら それは火曜日の午後です。 だから、すべてがされている 少し勉強。 講義ノートとソースがあります。 コー​​ド、そのことを行う必要があります 間違いなくチェックしてください。 ショーツを見る。 study.cs50.netをチェックしてください。 そして、数、以下に示す 他のリソースである。 ここでも、クイズ0は明日です 1時に。 まだ行っていない場合は、確認してください で約クイズ0文書外 把握するコースのホームページ どこでクイズを取っている。 クイズ1:10から始まり、 70分後に終了します。 あなた1:10後に現れるのであれば、あなたがしている 多くの少数の分を取得するつもり 70は、クイズを取ることよりも。 ですから、時間通りにそこにいることを確認してください。 あなたが拡張の学生なら、またはお持ちの場合 他のいくつかのテストの考慮、それ 1時に明日ではないかもしれません。 しかし、再び、についてクイズを確認してください0 あなたはときに知っ作るために文書化 あなたがクイズを取っている。 私はここまで75分を書きました。 私は70、右ではないと思います。 それは0週からすべての材料をカバーしてい 水曜日の先週の講義を。 そして再び、このクイズでは、そのあたりの ドキュメントには、1つの両面を取得し、8 あなたが得るの紙11枚ずつ1月2日 クイズ中にメモとして使用する。 多くの人々は、ほとんどの人が持っている場合ではない らは、単一の最も便利な方法 クイズの勉強をすることである 調査シートを作成、A 自分自身の1サイダー、。 もしそうであれば、過去のものを見て あなたは過去のものを見てきました。 何を参照するには、友達に手を差し伸べる 彼らは彼らのものに入れている。 しかし、ハンズダウン、あなたができる最善の方法 研究では、すべてのものを通過することですし、 何をすべきか、すべきに削るそれを下 の用紙に属してい 紙、それは本当にただだから あなたが確認するための便利な方法 あなたはすべてを通過するとしている それにある程度の知識を持っている。 ほとんどの人は、私たちは、見つけるにもかかわらず、彼ら 紙のシートが右に座っている クイズにそれらの隣に、オンにしないでください それには、もう一度、まさにその、理由 情報を通過する過程 彼らはそれを学ぶ助けている。 誰もが疑問を持っていますか クイズ0はどうでしょうか? 誰もを持っています - 私は挙手をするつもりはありません。 気にしないで。 私は誰に依頼するつもりだった 勉強し始めました。 しかし、私はあなたをしたくない すべての手を上げない。 だから私は言ったように - はい、AVIは、先に行く。 AVIファイル:何が便利なものになるだろう 1 - ポケットベルを置くために? 学生:それはあなた次第です。 JASONハーシュホーン:あなたが得る あなたの判断を使用します。 1 - ポケットベルを置くために有用なもの、 あなたはビッグオーについて混乱している場合は、 検索の異なるタイプのランタイム やソート、でそこにそれを置く 便利なダンディチャート。 そのように、あなたは上のことを尋ねられた場合 クイズ、あなたは試してみて、図にする必要はありません そのうちまたはランタイム経由理由。 あなたはそれを下にコピーすることができます。 あなたがクイズの過去、たくさんのを見ると 時間は、時間の問題が実行している。 だから、それは良いの一例になります あなたのワンポケットベルを置くために事。 君がいるなら、装着するために他の良いもの 宣言する方法について混乱 関数やどのような様々な部分の 関数宣言は、ある書き込み そのそこに、一般的なバージョン そして、多分例。 あなたは、ポインタについて混乱している場合は、 ポインターの仕事がいかにの図 おそらく本当に便利。 あなたは再帰について混乱している場合は、A そこに再帰関数をサンプリング また、本当に便利になるかもしれない。 それはあなたにいくつかのアイデアを与えるのでしょうか? AVIファイル:あなたが理解する必要があります のような全体のコンパイル処理、 どのようにすべての作品という? JASONハーシュホーン:すべて それはカバーされている可能性 クイズに表示。 質問 - しかしここでも、いくつかのものがあることでしょう 他のものよりも重く重み付け。 いくつかのものが再び出ている そして再びクラスで、中 講演、およびセクション。 他のものはそうではありません 多くの場合、その出てくる。 私たちは、#includeおよびについて多くのことを話した -L何か、どのようなものの平均 コンパイルプロセス。 我々は、しがみつく、GDBについて多くのことを話した 我々が使用するこれらの異なるフラグとき 我々は何かをコンパイルし、どのような make15、例えば、実際に を意味し、実際に行います。 私たちは約限り話をしていない 内のすべての単一のステップ コンパイルプロセス。 我々はまだそれについて話をしました。 だから、まだあなた何か 精通している必要があります。 しかし、再び、我々はあることを行っていない - クラスでより頻繁に出てくるもの もっと出てくる可能性が高くなります 多くの場合、より重くなる クイズの加重。 涼しい。 クイズ0に関するその他のご質問? [OK]を、私はリストを入れる ボード上のトピック。 私はシラバスを通り抜けた。 私は、口コミセクションを経て 最後の夜と考え出すもののスライド トピックの非網羅的なリストで 我々はCS50でこれまでにカバーされていること との事、その可能性がある クイズに表示されます。 だから私は通過するつもりはない これらのひとつひとつの1。 それははるかにかかるだろう 我々は今持っているよりも時間。 しかし、私はうまくいけばジョグためにここにこれを置く それかもしれないものに、あなたの記憶 またはあなたと同じように慣れていない場合があります。 そして私はの大半を過ごすのが大好きです に関するご質問に答えるセクション これらのトピック、トピック、その ここでは説明しません。 私たちは、擬似コードを書くことができます。 私たちは、実際のコードを書くことができます あなたのことを確保するため - 私は、あなたの質問に答えると、助けることができる 誰もが基本的に理解する これらのトピックの多くに感じますので、 準備と入る快適な クイズは明日。 だから、リスト上でお読みください。 あなたは、うまくいけばセクションになってきた いくつかの質問でも同様。 準備ができたら、手を挙げて 私たちは始めるでしょう。 覚えておいて、質問はあなたが持っている、 全く愚かな質問はありません。 私たちは、たくさんのことを聞いたことがあります。 そして、あなたが持っている質問は、私は喜んで 賭けて、他の多くの人々の両方 ここに座って見ている オンラインだけでなく、持っている。 だから、唯一の人々を助けることができる 質問をすることによって。 マーカス。 MARCUS:スタックとの間で ヒープは、事前に割り当てがあります として定義されているメモリの割合(%) これにより、スタックまたはヒープにある? またはどのように正確に、その動作しますか? JASONハーシュホーン:良い質問。 私は少しをトレースバックするつもりです。 誰もしていますか - ここに正直にしてください。 私はあなたを高めるためにあなたを求めている知っている あなたの仲間の前で手。 しかし感じる人がいる スタックとヒープと不快 その上に行くしたいと思います それらは何を意味する? 場合は、手を挙げ - [OK]をクリックします。 ありがとう。 だから我々は、スタック上に行くつもりだと ヒープ本当にすぐにしてから あなたの質問に答えるに移動。 だから我々は表現するボックスを引き出す場合は、 お使いのコンピュータ上のメモリ、いくつかは何ですか このボックスに行くもの? メイン。 主な機能。 どこの主は行くのですか? 学生:[聞こえない]。 JASONハーシュホーン:だから我々はよ ダウンここでの主な置く。 他に何がこのボックスに行く? 学生:あなたが呼び出す関数。 JASONハーシュホーン:機能 我々は呼び出すことを。 そして彼らはどこに行くのですか? 学生:スタック内。 JASONハーシュホーン:彼ら スタックに移動します。 だから我々はこれをコールするつもりだ ダウンここに事のスタック。 そして一番上まで、私たちは、ヒープを持っています。 だから、メモリはちょうどこのようなボックスではありません。 しかし、それは実際にはかなり似ています。 それは上の箱がたくさんになるだろう 度も、どのように大きなあなたに依存 コンピュータがあるか、メモリがどのくらいである。 俗に言う「下」で スタックがある。 と複数のものがあります つまり、スタックに移動します。 そして、それらは機能によって異なります あなたはあなたのコードを持っている。 あなたはいつも、あなたの中で一つの機能を持っている コー​​ドは、メインと呼ばれるので、常にある ダウンここでのセクション 主に専念スタック。 スタック内のこれらのセクション スタックフレームと呼ばれます。 あなたが別の関数を呼び出すと、メインと言う バイナリ検索機能を呼び出し、 私たちは、スタック上に別のフレームを置く。 具体的には、我々はしようとしている 私たちの上のメモリチャンクを寄付 バイナリ·サーチのローカルに格納するためのコンピュータ 変数とバイナリを実行するには 検索コード。 だから我々は二分探索を呼び出します。 このメモリの塊では、つもりだ そのローカル変数を格納する。 私たちは、そのprintfの呼び出しを格納するつもりだ。 何が起きても、その関数がある すぐそこに格納される予定。 バイナリサーチは、実行しようとしている。 これは、実行を完了しようとしている。 C言語での単語は何であることを示します 機能は必要があること その実行を完了? 学生:リターン。 JASONハーシュホーン:リターン。 ですから、return文を見るたびに、 関数が終了 それはその当たったとき。 だから、二分探索は、そのリターンをヒットします。 メモリのこの部分は、基本的になります 解放され。 そして主は戻って、実行に行きます。 、呼び出しがあった場所に、主が一時停止します バイナリサーチは、いくつかの戻り値を取得、 して実行を継続。 このスタックフレームは消えます。 我々は再帰関数を呼び出す場合、その 上の自分自身を呼び出す関数である そしてにわたって、我々は得るかもしれない - 私たちは言う 再帰的に二分探索を行いました。 私たちは、二分探索バージョン1を得るかもしれない バイナリサーチ2、バイナリサーチ 3、バイナリサーチ4、 二分探索5。 そして、この最終的なバイナリサーチ5 ベースケース、およびスタックにヒットする フレームが戻って閉鎖を維持します 我々は戻って主に到達するまで。 私たちは少しで、再帰の上に行くことができます。 あなたがしている場合しかし、このすべては、言うことです 一度に複数の機能を呼び出して、 複数のスタックがあります スタックにあったフレーム。 ヒープ、​​他方では、アップ ここでは、機能のためではありません、 ていないローカル変数のための。 これは、動的に割り当てられたためだ 変数。 したがって、これらは可能な変数である メインまたはどちらかで初期化 その主な通話機能。 どこでもあなたのコードでは、彼らは 初期化することができます。 を動的に初期化する 割り当てられた変数。 我々は、C言語でどのような機能を使っていますか? 学生:mallocに。 JASONハーシュホーン:mallocに。 あなたは、malloc関数を呼び出します。 あなたは、メモリの容量を取得する。 そしてメモリのスペース ヒープ上にある。 そしてメモリのスペースが留まる そこにあなたが自由呼び出すまで。 で非常に動的に割り当てられた変数 ヒープは限り、あなたのようなのために存在します 彼らが存在するか、そして、彼らはないでしょう 明示的になるまで離れて行く 離れて行くように言う。 あなたは、一つの関数でそれらを作成することができます。 その関数のスタック フレームが消えてしまいます。 しかし、その変数がまだ存在します ヒープ内にそれが解放されるまで、 潜在的に呼び出された関数 二分探索または何でも。 ので、これらのヒープ変数がそこに滞在 限り、あなたは好きな用 彼らはそこに滞在する。 そして、彼らはここに置か取得します。 し、[次へ1がそこに置かれます。 彼らは記入くるだけだ、と彼ら あなたが無料呼ぶまでそこにとどまる。 そして、基本的に、ヒープとスタック、 マーカスの質問になって、 互いに向かって成長する。 彼らはお互いに実行する場合、あなたはしました あなたの内のすべてのメモリを使用 コンピュータ、そしてあなたのプログラムが終了します あなたはこれ以上のメモリを持っていないため、 使用することを残しました。 それらの間では、あります 潜在的に他のもの。 しかし、このコースの範囲については、 そのことについて心配する必要はありません。 だから、答えだった ご質問に。 ご心配なく。 しかし、それは長い答えだった。 あなたが知る必要があるのはある ヒープとスタックします - 1は、下部に開始されます。 スタックしていますか。 ヒープはそこまでだ。 彼らはお互いに近く成長します。 彼らが触れた場合に、それが問題だ。 あなたは、メモリ不足になりました。 しかし、また、どこで知ることに加え それらは、何の両方に格納されている スタックとヒープ。 カーティス。 CURTIS:彼らは衝突すると、 そのスタックオーバーフローがある? JASONハーシュホーン:彼らは衝突し、 つまり、スタックオーバーフローではありません。 スタックオーバーフローは、別の領域である あなたがしたい場合は、我々は以上行くことができる。 [OK]を、我々は少しでバックアップすることに来る。 学生:単語は何と呼ばれています 彼らは、互いを打ったとき スタックとヒープ? JASONハーシュホーン:今のところ、 心配しないでください。 ただ知っている - 私はその質問にお答えします 授業の後。 彼らはお互いに実行する場合は、走った メモリのため、これ以上はありませんので、 そこにスペース。 学生:申し訳ありませんが、SEGの障害は何ですか? JASONハーシュホーン:セグメント 障害がために呼び出すことができます - ワンセグのせいですと呼ばれる理由は異なります。 時々、あなたのスタックオーバーフローは、よ SEGエラーとして障害を言う。 学生:何デリファレンスについて NULL変数? そのワンセグ障害がある? JASONハーシュホーン:間接参照 NULLポインタ - [OK]を、あなたは、ポインタを持っているので、もし ヌルポインタ、リコールに等しくなるように設定 ストア·メモリ·アドレス その値として。 そしてnullポインタは、本質的に 0を記憶し、第0 その変数のアドレス。 そうに0x、0,0,0,0等といった。 ではありませんメモリ内の0番目のアドレス 私たちの絵で、それはそこまでだ どこかで、そのは予約だ コンピュータの。 我々は、それに触れることを許されていない。 だからあなたのプログラムの実行だとき、もし 何かがメモリに行くしようとしています アドレス0、それが知っている つまり、空の値である。 それは何もないはずです知っている。 だから、そこに何かをしようと使用している場合 そこのようなものを扱うか、 その場所に移動しよう、あなたがしている ワンセグ障害やエラーを取得するつもり。 それがあなたの質問に答えるのでしょうか? そして今、我々は戻って行くよ スタックオーバーフロー。 あなたたちは持っているように、スタック内のもの、 それでは近い描いてみ - で、前に見た スタックフレームのアップ。 誰もがそれを見ることはできますか? だから我々は我々のスタックフレームを持っている。 私たちは地元のように配列を保存している この関数内の変数。 だから私たちの配列が5つのスポットを持っていると言う。 それらはすべて、5が保存されます そのスタック·フレームに。 我々は超えて書き込みを開始した場合 この配列の境界 - 私たちはへの書き込みを開始した場合、 のはそれが0だとしましょう​​。 それらは5インデックスです 私たちの配列の。 我々は、インデックス5への書き込みを開始した場合、その 我々が持っているときに我々は持っていない サイズ5の配列、我々はへの書き込みを開始 インデックス6、7、8、9、我々は、スタックを得ることができ オーバーフローエラー。 一般的にはそうではありません - おそらくトラブルに巻き込まれます あなたは1に引き継が進みます。 しかし、一般的に、あなたが入るでしょう あなたはたくさんによって引き継が行けばほとんどのトラブル あなたは、これまで以上のあなたが書くことを行く それのリターンアドレスの上 に位置している機能、 スタックフレームの一番下。 右から? あなた - 中 - 申し訳ありません。 しない「右から」 スタック·フレームには、次のものが あなたのローカル変数。 スタックの最下部に フレームは、リターンアドレスです。 どこで機能することです それが終わった時になります。 そして、あなたはそのリターンを上書きした場合 アドレスは、このスタックフレーム、 あなたはスタックを経由しているとき フレームと各ラインを実行すると、あなたがしている 新しいリターンアドレスに行くつもり それは、代わりにそこに書かれている 実際1。 そして、それは我々が見てきた方法です いくつかのセキュリティ侵害 コンピュータと発生する可能性があります。 とき、スタックオーバーフローが、要するに、ある あなたは、スタック内の一部が上書きされ あなたは、ローカルを使用することになっている あなたが使うことになっている変数、および 特にあなたが、上書きの起動時に のような重要な事柄 アドレスを返す。 あなたはエラーになりますどこからだ。 または多分あなたが始めることができた でもへの書き込み - 二分探索であったと言う 右のメイン上。 あなたは多くのことを上書きする場合は、 主に書くことができます。 しかし、一般的には、前にエラーが表示されます そして、コンピュータは知っているので、 あなたはあなたが何かをやっている やってはいけません。 うん。 学生:違いは何ですか スタックオーバーフローの間 およびバッファオーバーフロー? JASONハーシュホーン:バッファオーバーフロー より一般的なタイプである 私は、今説明したもの。 学生:そうスタックオーバーフローがある バッファオーバーフローの例。 JASONハーシュホーン:その通りです。 これは、我々のように考えることができます配列です バッファ、入った旅のためのスペース これは、スタックバッファオーバーフローである。 私たちは、ヒープバッファオーバーフローを持つことができます。 そこに多くの場合、バッファがあった場合 配列はヒープであり、我々 それらの境界を上書きし、その後、我々はだろう ヒープバッファオーバーフローがあります。 そしてこのコースの範囲を超えて、 それらは少し異なる検出されています。 コンパイラは、特別な持って それぞれを検出する方法。 しかし、バッファオーバーフローは、より汎用的である 私が説明したものの種類、 そのスタックバッファオーバーフローた。 その回答はお役に立ちましたか? 甘い。 他の質問の関連があった スタックやヒープに? うん。 学生:私は、文字列を解放する必要があります知っている 彼らは、ヒープにいるので、 あなたはメモリリークが発生しないように。 しかし、あなたはグローバル変数を解放しなければならないの そのようなもの? またはそれらは自動的に解放される? JASONハーシュホーン:良い質問。 そうCS50.Hに、私たちはこの事を作成する 文字列と呼ばれるため。 文字列は、本当に何ですか? 学生:チャースター。 JASONハーシュホーン:char型のスター、ポインタ 文字へのポインタ 文字の配列。 つまり、文字列があるものだ。 だから我々は、それを解放する必要があるため、 我々は多くのことを使用のgetString、 - 文字列名は、getStringをに等しい - それが私たちのためにいくつかのメモリをmallocは ヒープ、​​その後へのポインタを返す それの最初の文字 文字列、char型のスター。 だから表向きは、あなたがされていない場合は あなたの文字列のいずれかに自由に書き込み あなたは、これまでと呼んでいることを、あなたが持っている いくつかのメモリリークが発生して。 もちろん、我々は話をしていない それなので、誰もに得ていないだ それを行うためのトラブル。 しかし、はい、今後。 あなたがにgetStringを呼び出すときに、だ ヒープ上にいくつかのスペースをmallocing。 そして、あなたはその上で、後で自由に呼び出していない場合 文字列には、メモリリークがあります。 それはあなたの質問に答える? うん 学生:だからそのためには、私たちが使っています 復帰の前に無料の権利? のような、の範囲内で、私は推測する場合 我々は内、メインint型のような、と言う それらの内のコードの範囲 中括弧、右の前に - あなたが知っているどこにしたい 通常、リターンを置く。 あなたはその前に無料で置くのですか? JASONハーシュホーン:だから、自由に置くことができます あなたが自由に置きたいところ。 これらは動的に割り当てられるため 変数、彼らがすることができますので、 特定の範囲を超えて生きる あなたはAのmalloc関数を呼び出すと、関数、 別の関数、例えば、 GetStringメソッドは、主に無料で呼び出すことができます。 あなたはそれを呼び出す必要はありません 特定の機能の malloc関数が呼び出される場合。 しかし、あなたはそれを呼び出す必要があります 主が戻る前に。 そしてそれは実際に依存します。 それはあなたがいることにmalloc理由に依存 最初の場所での空間。 一部の人々は呼びます かなり迅速に解放する。 一部の人々が自由になるまで呼び出すことはありません そのプログラムの終わり。 そして、彼らは通過するだろう 無料のすべてのもの。 それはあなたがmalloc関数と呼ばれる理由によります。 学生:そして、あなたは何を言うだろう あなたが使用にgetStringを呼び出した場合? あなたはどのような無料のでしょうね? JASONハーシュホーン:だからの構文は無料 単純に近く、無料、フリー、オープン括弧、ある 括弧、ポインタの名前。 あなたは、文字列の名前を書くのであれば等しく GetStringメソッドは、ここに名前を入れた。 つまり、ポインタの名前です。 そして、それはそのメモリを解放するために知っている。 学生:だから、そのメモリを解放し、 ポインタはまだその場所を指す メモリ内の? またはポインタはまた、空になった それが指すアドレス。 JASONハーシュホーン:私たちはそれを試してみてください。 我々はそれをコーディングする必要があります。 我々が取得するときに戻ってきてみましょう コー​​ディング、およびのはそれをコーディングしてみましょう。 そして、あなたはその答えを把握したい場合に そのためには、また、それをコーディングすることができます その間に。 しかし、それは素晴らしい質問ですね。 学生:それはすることはできますか あまりにも早く無料で何か? だから、あなたはまだ、あなたのプログラムのためにそれを必要とする あなたは、そのメモリ領域を解放? JASONハーシュホーン:はい。 それは、可能な場合、あなたは無料のもの あなたは再びそれを使用してから、あなたは意志 エラーに遭遇する。 あなたは解放されたので、しかし、それは、あなたにだ 何かして、後でそれを呼んだ。 だから、プログラマの間違いだった。 しかし、はい。 あなたはそれを書くことができます。 上の任意のより多くの質問 - はい。 学生:だからをすることになっている場合は、単に 前に、一般的にそれを解放 プログラムが終了した場合、それはどういう意味ですか プログラムが終了し、あなたはそれを解放してはなりません、 そのメモリはまだ割り当てられている? JASONハーシュホーン:あなたのプログラムが終了した場合 そしてその後、何かを解放することを忘れ そのメモリは、全体に配分された あなたのプログラムの有効期間。 あなたのプログラムを完全に閉じると、 そのメモリは行っていない いつまでもそこに滞在する。 コンピュータが知っているのに十分スマートです そのプログラムが終了すると、 メモリのすべてを取り除く必要があります そのプログラムに関連していた。 ただし、あなたが実行できるツールがあります もし、検出するためのプログラム上の プログラムは、あなたが忘れてしまった、仕上げ いくつかのメモリを解放する。 そして、あなたの次の問題のためにどこで設定 あなたはmallocを使用して使用することがあります ポインタは、これを実行され かどうかを確認するために、プログラム上のプログラム、 と、メインに戻り、いくつかを持っていた 未解放残されたもの。 そこで、彼らはmallocで割り当て滞在するつもりはない 永遠にあなたのコンピュータにある。 つまり、無駄になるので 非常に迅速に、コンピュータ メモリ不足になります。 しかし、彼らはあなたの最後まで実行した場合 プログラムは、それらが解放され、あなたのしていない プログラムが終了、それはまだ問題だ つまり、このツールを使用すると、対処するのに役立ちます。 学生:Valgrindのことをされていますか? JASONハーシュホーン:それは Valgrindは呼びかけた。 そして、あなたはなるだろう - 学生:しかし、我々は知っている必要はありません クイズのこと、しかし? 私が意味する、それが語られました 講演で少し。 JASONハーシュホーン:だからValgrindの そのツールの名前です。 それが何をするか知っていることはある クイズには十分。 しかし、あなたはあなたの上で、まだそれを使用していない 我々は持っていなかったため、問題が設定され 明示的に述べた問題セット mallocでか、mallocを使用。 だから、まだValgrindのを使用していない。 しかし、あなたはすぐにそれを使用します むしろより後。 学生:あなたは繰り返すことができます Valgrindのは何ですか? JASONハーシュホーン:申し訳ありませんが? 学生:あなたは何を繰り返すことができます Valgringの目的は何ですか? JASONハーシュホーン:Valgrindの 名前は - GDBは、ユーザ·プログラムをデバッグするのに役立ちますように Valgrindのは、あなたがどうかを把握に役立ちます 物事は解放されていない あなたのプログラムが終了したとき。 つまり、あなたのプログラムにそれを実行することになるでしょう。 そして、あなたのプログラムが終了し、それは言うよ あなたのプログラムは、malloc関数は、この多くと呼ばれる このバイトのための時間、あなたは これだけ多くの時間が自由と呼ばれる。 だからあなたはこれらの多くのバイトを残した 解放されない。 それとも、あなたがすべてを解放したとします。 よくできました。 学生:わかりました。 そして、それはValgringと呼ばれています? JASONハーシュホーン:V-A-L-G-R-I-N-D。 学生:ポインタについての質問。 ですから、n個の星を持っていると言う xが何かに等しい。 それはあなたが入れているものは何でも、等しい そこには、どのような内部置かれてあるということです どのようなxが指している、 またはXのポインタ? JASONハーシュホーン:次のことができます 質問を繰り返す? あなたがそれを言うながら、我々はそれを描くことができますか? 学生:クイズでは、実際には、 あなたは私たちを送っ1は、それは、CHARのようだった スターの真実は右、CS50岩に等しい? だから、そのことCS50岩を意味するのか 真実がポイントしている何ですか? JASONハーシュホーン:だから、話をしている 文字列内の文字の星について、どのように それは動作します? うん。 [OK]をクリックします。 それではこっちこれを描画してみましょう。 [サイド会話] JASONハーシュホーン:だから、この変数 char型の星のことを行っている。 変数は、大きさとは char型の星の? 何バイト? 学生:四。 JASONハーシュホーン:これは、4バイトです。 変数には、どのように多くの権利である int型の星の? 学生:四。 JASONハーシュホーン:4バイト。 それは、ポインタの場合、それは常に 4バイト、なぜならポインタ、その 値はメモリアドレスです。 CS50上とメモリアドレス アプライアンスは、4バイト長である。 だから我々はのgetStringや、ときに我々を呼び出すとき と言う、がに等しいし、次に中 二重引用符は、文字列を入れて、 我々は入れている - まあ、それは少し違う。 ここでは、例としてのgetStringやります。 またはCHARスターの何か 文字列に相当します。 申し訳ありませんが、私に例を与える あなたが読むことを? 学生:CHARスターの真実に等しい 二重引用符で「CS50岩」。 JASONハーシュホーン:だからこの星、この 我々は我々のために、この変数Xと呼ぶことにします 一般的な目的。 我々はXという変数を作成しました。 これは、char型のスターだ。 これは、シリーズへのポインタである 文字の。 だからここにダウン - だから、これはこれだろうかです メモリ上のワーク。 これは、メモリアドレスを記憶するであろう。 これは、メモリアドレスを記憶するのであろう 配列の最初の文字。 そして、あなたが続く場合 ポインタは、だろう 最初の文字を取得します。 そして、あなたがどの​​ようにこの事を読んでいる場合は、 文字列は、お使いのコンピュータがスマートです 知っているのに十分な、この全体のことを読んで それはバックラッシュ0になるまで。 しかし、あなたはそれをある文字を読んでいる場合は、 あなたが繰り返し処理しているため、時間、 この文字列は、あなただけ読み取られます 当時の文字あなたが表示されるまで バックスラッシュ0。 それはあなたに答えない可能性があります 質問、しかし。 学生:ええ、しかし、あなたはそうではありません その領域をmallocさ まだそのポインタのため。 JASONハーシュホーン:だから私はかなりわからないんだけど まさにあなたが見ている、 私はそのクイズをしなかったからです。 それが役立つことになっていた 別のタスクフォースからのリソース。 あなたは上の文字列を作成する場合 積み重ねたり、ローカル変数として、それはよ ただ料金の配列ではなく、 を指し、一般的にchar型のスター 別の文字列。 しかし、私は知らない。 それはまた別のへのポインタ可能性 スタック上の文字列だけでなく。 うん。 学生:私はあなたがする必要があることを知っている ポインタの場合メモリを割り当てる 内部宣言したばかり 別の関数の。 それはだ場合には、同じことをする必要がありますか メイン内で宣言されている、 あなたは、メインの内側に使用している? JASONハーシュホーン:そうです。 任意のポインタを宣言することができます メモリ内のメモリアドレス。 これは、ローカルのメモリアドレスを指定できます 変数、しばしば、しかし、 人々は、メモリアドレスを宣言していない 彼らが行くので、ローカル変数へ 離れているその関数が戻ると、一度 我々は、一般的に物事をのmalloc理由です。 しかし、はい、あなたは、ポインタを宣言することができ 別のローカル変数へ。 それは、単に一般的に行われていないだ。 しかし、私はそれを見てみることができます クラス後の比のこと。 うん。 学生:私はこれは一種だと思う 求められているのかの。 それが初期化されるように奇妙に思えます ないように、ポインタ アドレスが、何として 値のように思える。 CS50は、中身をあるように思える ものが指されていると 実際のアドレスは、右? JASONハーシュホーン:だからそれはです いない場合、しかし。 つまり、何が起こっているかではありません。 あなたはchar型の星を宣言すると、 それはメモリアドレスです。 ポインタは、すべてのメモリアドレスである 何か他のものを指す。 他に、何かが上に置くことができます スタックが、ほとんどの場合である 我々はそれが使用され表示されます方法でヒープ。 しかしが二重引用符に等しい 我々は、我々を見ることができる」、getStringを " それに目を通すと、それをコーディングすることができます。 GetStringメソッド文字列は、内に保存されていない その変数、または何列 名前はその中に保存されていないされている 変数、それがどのようにではないので ポインターの仕事。 それは理にかなっていますか? 学生:うん。 JASONハーシュホーン:わかりました。 うまくいけば、それはありませんでした 誰にも分かりにくい。 それがあったなら、我々は再びそれを見ることができます ビットでは、実際に行っているので、 うまくいけば何かをコーディングする 文字列を操作すると、あなたが感じる手助け 彼らとより快適に。 これらに関連した他の質問 トピックや他のトピック 私は、バックアップを置くことにしましょう​​? そして - 今。 はい、オールデン。 ALDEN:これは完全に無関係である、 しかし、我々はわずかに行くことができます 本当にすぐに我々が知っておくべきこと 32との違いについて 64ビットマシン? JASONハーシュホーン:はい。 だから、32ビットは何バイトですか? ALDEN:それは4バイトです。 JASONハーシュホーン:これは、4バイトです。 そして64ビットは何バイトですか? 学生:エイト。 JASONハーシュホーン:8バイト。 だからもう一度、8ビットが1バイトである。 あなたCS50アプライアンスです 32ビットマシン。 そのように、メモリアドレスは、 4バイト長。 2は32にあります。 メモリアドレス。 0〜32のマイナス1から2へ。 そして、私は肯定的ではないけど、それはです おそらくあなたがする必要があるものの範囲を そのメモリ、32ビットマシンのために知って アドレスは、再度、4バイト長である それが最大量だ メモリアドレスの。 また、データの種類 - これは、何かあるかもしれない よくそれは注目に値します。 データ型のサイズが依存 あなたが作業しているマシン。 そうCHAR、単一の文字は、どのように 私たちのCS50アプライアンス上の何バイト? 1バイト。 そしてそれは実際には1バイトとしてだ 64ビットマシン上で十分。 そして、ほとんどのデータ型は、同じ数である 両方のマシンでバイト。 しかし、いくつかのデータ·タイプは異なるであろう 両方のマシンで。 だから、潜在的になります あなたが知る必要がある唯一のもの。 それでも、それは、私が思うに、 境界を超えている - あなたが戻って見れば、私は、ほとんど肯定的だ 古いクイズで、それによると、用を前提と あなたが使用しているコーディングの問題 32ビットマシン。 しかし、その中で一緒に行くために、ある あなたが興味を持っているケースがある 同じであるデータ·タイプ すべてのマシン上のサイズ。 あなたのような何かを見てきた場合 のuint32_t、あなたは月か5月 それを見てきていない。 つまり、データ·タイプです。 つまり、どんなに32ビットとすることが、言っている これは何のマシン上にある。 だから、人々は、ポータブルを書いているとき コー​​ド、彼らはおそらくint型を使用することはありません。 彼らは代わりにこれらの他のデータを使用します 彼らが知っているタイプは同じになります すべての単一のマシン上のサイズ。 マデュ。 マデュ:私は疑問を持っていた コンパイルプロセス。 だから、使用するプログラムを書いている場合は、 CS50か何かのようなライブラリ そのように、私が知っているそのライブラリ ある時点で、でなければならない コンパイルされ、リンクされたインチ しかし、どのくらいそれの最中に発生 あなたのプログラムのコンパイル? そのライブラリ·プロセスのどの部分 あなたがしている場合に発生します 独自のプログラムをコンパイルする? JASONハーシュホーン:それでは見ていきましょう このプロセスの一般的手順。 あなたの。Cファイルを記述します。 あなたのcファイルでは、#が含まれ、あなたの ヘッダ·ライブラリーは、例えば、cs50.h. シャープが含まれていることを何をする 行は、プログラムに何? Akchar。 AKCHAR:それはのプロトタイプを追加します ヘッダからの機能 ライブラリ内のファイル。 JASONハーシュホーン:その通りです。 それは、これらの関数プロトタイプを追加します あなたのコードに。 だからあなたのコードは、コンパイルされているとき 初期段階は、コンパイラは知っている これらの機能は実際に存在していること、および どこかでそれらが定義されていること。 hファイルには含まれていません これらの関数の定義や方法 彼らは実際に動作します。 Cs50.hはちょうど言う何かを含んでいる のgetStringは本物です 発生する可能性があります。 そしてstandardio.hは、printfがあると言います 発生する可能性が本物。 だから、これを使ってC言語のヘッダ ファイルがいくつかになって取得 最終的には機械読み取り可能なコードは、 バイナリになって取得 コー​​ド、0と1。 そして、それは最終的にコードを示します 実行されます。 -L CS50ライン - 例えば、 あなたはクラングを書いているとき - そしてその後には、-LをCS50を、 あなたはそれをインチタイプ そして、あなたはそれを参照してください。 あなたが作る記述するときは、よ ここまで、その行を参照してください。 そして、我々はときに、第2に、その表示されます 私たちは、コードまたはそれ以降のときに我々のコードに。 しかし、それの-l CS50ラインは何かを より少し異なる 第cs50.h.を含む その-L CS50ラインは何をするのでしょうか? AVI? AVIファイル:私はそれがリンクしていることを言いたい 関数のライブラリ 。oファイルと同じように、呼び出します。 JASONハーシュホーン:だから、非常に 近くに、スポットオンされていない場合。 -LのCS50は、バイナリファイルを取得し、 あなたのバイナリファイルとそれをマージします。 そうcs50.h、旋回しても意味がありません あらゆるをバイナリにC言語からcs50.h それが使われている単一の時間。 それだから、愚かなことだろう 多くの時間を浪費することになる。 だから、すでにコンパイルされている および実行可能になった。 そして今、それがマージされようとしている 最後に、あなたのファイルを使用して。 ので、これらの1のと0をしようとしている お使いのものと合併する そして最後に0の。 だから今は、実際には、実際のがあるでしょう 1と0の方法は、getStringを定義する、 例えば、機能する、またはどのようにprintf関数 例えば、動作します。 および詳細については、あります ネイトがいることを示します短いコンパイラ あなたはそれが行くチェックアウトする必要があります こうした工程を経て。 しかし - はい。 学生:彼らはで常にOファイル。 彼らは、ライブラリ形式にいるとき、 のように - リンク、マージする準備ができて 彼らは、バイナリコードにしている? JASONハーシュホーン:わかりました。 何が - 学生:それはいつもの場合である あなたがそれらをリンクライブラリ? JASONハーシュホーン:はい。 そう。Sはされるファイルは、あります また、になりますマシンコード、 あなたに不可解。 あなたがそれらを心配する必要はありません。 しかし、一般的には、そう、彼らはよ Oは行く準備ができてファイルをインチであること。 学生:あなたはに出荷 ライブラリには、あなただけ出荷します 。時間と。O? あなたは。cまたは。Sを出荷しないでください。 JASONハーシュホーン:だから - これがあれば、同様に、この短いです この情報は来ているようです 少し迅速。 しかし、コンパイラで短い だけでなく、このことについて話しています。 あなたが出荷している場合は、ライブラリを出荷するとき 。H、ヘッダファイル、それらの 関数のプロトタイプ、および1のと 0年代、それはあなたが与える必要がすべてです。 あなたはどのように与える必要はありません。 この関数は、。Cファイルを動作します。 抽象化のポイント、または理由 APIを指し、このSPLでのポイント、 スタンフォードポータブルなライブラリ、それはだ あなたが心配しないようにするにはどのように新しい GRectに動作するか、どのように作品を移動し、 またはどのように作品を追加します。 あなたが知る必要があるのは、その追加するだけです あなたができる機能です 使用しており、それがこれを行います。 だから、実際にどのように知っている必要はありません それはちょうどする必要がであなたの中に書かれている ここでは、知っている関数であり、彼らは何 行って、ここに1と0である あなたが実際にそれらを使用したい場合。 涼しい。 コンパイラで、それ以上の質問 またはボード上の他のトピック? 学生:私は疑問を持っている 再帰関数を実装する。 再帰についての質問。 私は出てくるだろう気持ちを持っていた。 それでは、すぐに通す 特定した再帰 たとえば、階乗関数。 これは一例ですので、 頻繁にアップするか、使用されている 再帰を説明するために。 だから、「4! " 4の階乗として読み込まれます。 そして4階乗とは何を意味するのでしょうか? それは何をしますか? どのようにして4の階乗を計算するのですか? 4回3回2回1。 4の階乗を書くためのそう別の方法 これを書くことです。 4回3階乗。 3階乗であるため、 3回2回1。 だから、4回3階乗は4です 回3回2回1。 階乗が大きいのはこのためです 再帰の候補、それはだから その何かがあることが明らか に何度も繰り返し起こる 物事の数が少ない時まで あなたが最後に到達する。 あなたが1に達すると、1階乗は1である。 あなたは、はるかに先に進むことはできません。 0階乗も1として定義されています。 あなたは1か0に到達したときだから、あなたがしている 最後には、あなたのことができます バック上がって起動してください。 だから我々は、再帰的に書きたい場合は、 階乗を計算する関数、 我々はいくつかの書き込みを行っている 今そのための擬似コード。 我々はその擬似コードを書く前に - 私はあなたたちに数分を差し上げます 擬似コードを書くか、単に考えること それについて - あらゆる2つあります 再帰関数を必要とします。 これら二点は何ですか? ジャック:それは自分自身を呼び出す必要があります。 JASONハーシュホーン:ノア? ああ、ジャック。 どうぞ召しあがれ。 ジャック:それは自分自身を呼び出す必要があります。 JASONハーシュホーン:だから再帰 この関数は、再帰呼び出しを必要とします 自身に呼び出します。 それは一つだ。 そして他の事は何ですか? ジャック:ベースケース。 JASONハーシュホーン:ベースケース。 ベースケースは、我々が停止したときにここにいる。 だからあなたの関数が呼び出されます。 ベースケースは最初に来る。 あなたが最後にいるかどうかを知りたい。 そして、あなたが最後にいないのであれば、あなた あなたの再帰呼び出しを行います。 そして、あなたは、もう一度この関数を通じて、 もう一度基本ケースを確認してください。 あなたは終わりではないなら、あなたは作る 別の再帰呼び出し、 エトセトラ、エトセトラ。 だからこそ、再帰関数は常にです これらの基本ケースを必要とし、これらの 再帰呼び出し。 あなたは再帰呼び出しを持っていない場合は、 再帰関数ではないでしょう。 あなたはベースケースを持っていなかった場合は、 あなたは永遠に行くだろうし、 何結末はないだろう。 そしてベースケースは、常に最初に来る、 あなたは常にチェックすることになるでしょうので あなたが最初に最後にしている場合。 だから我々は、いくつかの擬似コードを実行する前に、なぜ あなたが考えるように分を取ることはありません どのように再帰的な階乗関数 書かれたのでしょうか? また、あなたがやっていると同じ数の書き込み そのうちの紙のシート上にある 何をする必要があるとしている 明日のクイズで行う。 にするので、おそらく良いプラクティス あなたが書いているコードを確認してください 用紙上にダウン - またはあなたがそれを行うことができます。 セミコロンがどこにあなたが知っている。 次の構文を覚えています。 あなたが持つことができるようにしていないため、 コンパイラはエラーをした言う。 また、それらの線に沿って、明日、とき あなた場合は、問題をコード化している 時間急いで、またはあなたは非常になられている あなたがことになっているかのように混乱 それは、C内の特定の事を書く 擬似コードを書くことができます当然であるだろう または同様にコメントを書き込む。 のための部分的な信用がありますので、 クイズに多くの質問。 だから、あなたが急いで、または可能性があります ちょうど混同される可能性があります。 コメントや擬似コードで書く 多くの場合の方法としていること 部分的な信用を得ることができます。 だから、何かを残していない クイズの空白。 には罰則はありません インチのものを入れて 実際には、擬似コードでパッティングまたは コメントは、年生を助けるために起こっている あなたが実際に何を知っていれば把握 あなたは多分賞について話しています もし、そのためのいくつかの部分的な信用。 また、それらの線に沿って、明確に記述します。 私たちは本当にあなたが書いていることができないものであれば、 私たちはあなたを呼び出すするつもりはない 図のように、深夜、明日の あなたが書いたのかを。 我々だけでポイントを取るつもりです。 私たちが聞くことができる、というより、明らかに書き込み、 我々はあなたが書いたものを読むことができます。 そして、それは2文を言えば、 段落を書いてはいけません。 指示に従ってください。 はっきりと書きます。 そして、それらのコメントに書いたり、 その可能性の質問のための擬似コード 賞部分信用。 さあ、階乗に行きましょう。 だから我々は、関数階乗を持っている。 私は実際にC言語でこれを書くとしたら、 どのような私は名前の前に配置する必要があります 関数の? この中で、戻り値の型、 場合、我々はそれにINTを与えるでしょう。 した後、中括弧内で、 何のために中括弧の内部に入る 機能? 学生:引数の型。 JASONハーシュホーン:その引数。 そう階乗うおそらく 引数を取る。 それはおそらく唯一の引数を取るよ。 そして、我々はそれが取るよ言うよ 整数Xと呼ばれる。 そして再び、のプロトタイプを書くとき 関数や関数を書く それを定義する前に、あなたのコードでは、 データ型との名前を書く のみ、その関数のその変数。 だから、この中に、いくつかの番号を渡すことができます 関数は、xと呼ぶこともできます 内部的。 私たちは、階乗関数を持っている。 私たちは、基本ケースの2つが必要 と再帰呼び出し。 階乗のための基本ケースとは何ですか? それを書いていないがあります誰か まだ話され、ベースは何ですか 階乗のためのケース? 学生:nが小さい場合 2よりも、1を返す。 JASONハーシュホーン:nがある場合 2未満、1を返します。 そのため、私は、それが好きです 0と1の面倒を見る。 だから我々は、X <2を行う1を返します。 我々が得る場合、我々は、0が渡されたら 1を通過し、この関数は、意志 すぐに1を返す。 我々はいくつかの数字以降を渡されたら 以上または2に等しく、我々はするつもりだ 私たちの再帰呼び出しを持っている。 だからどのようにそれが仕事に行くのですか? することができますこのに取り組んだ他の誰か 誰がまだ語られていないことは私与える この関数の再帰呼び出し 擬似コード? 我々は、数xで渡されたら それが2よりも大きいですが、どのような 私たちは何をしたいのですか? 我々はまた、に書かれた例があります あなたにヒントを与えるかもしれない側。 学生:x回コール Xマイナス1の階乗? JASONハーシュホーン:まったく正しい。 我々はX回を返すつもりだ Xマイナス1の階乗。 そして、私が書いたとしても、その 基本的に、何を英語で言った、 この階乗関数 再び呼び出されます。 それは、xから1を引いた上で実行します。 これは、いくつかの整数で戻りますし、 次いで、これら2つを乗算よ 一緒に、その値は次のようになります これを呼び出したところに戻った 階乗関数、そのマイト 別のインスタンスであること この階乗関数。 だから、再帰の一例です 機能、非常に 簡単な再帰関数。 それらのほとんどは、このようになる。 あなたは良い再帰を希望 コー​​ディングしようとすると、クイズに挑戦 再帰的に二分探索。 あなたがバイナリ検索をした場合、以下の原因 問題は3に設定し、おそらくそれをやった 反復してwhileループ内。 しかし、それはまた書くことができます 再帰的に。 あなた自身を書くことが必要になるだろう いくつかを取る別の関数 異なるコマンドライン引数 - または ていないコマンドライン引数、いくつかの 別の普通の引数。 しかし、あなたはバイナリ検索を書くことができます 再帰的にも。 学生:だからあなたも書いたかもしれない、 代わりに、Xマイナス1、あなたの また、Xのマイナスを書かれている可能性が マイナス、あるいは、あなたは可能性があります 書かれたマイナスマイナスX。 あなただけの本当にすぐに理由を説明することができます それらは異なるものとなり、 違いが間にあるもののように XマイナスマイナスマイナスマイナスX? JASONハーシュホーン:いいえ、私ではない それに行くつもり。 しかし、私は後にそれについてあなたにお話します クラス。 XマイナスマイナスマイナスマイナスX 1で、Xをデクリメント。 しかし、彼らは少し違ったそれを行う。 しかし、私はそれに行きたくない。 再帰についてのその他の質問 またはこの機能? それは本当にさえ擬似コードではありません。 つまり、基本的にはコードです Cは、あなたがこれを記述します。 [OK]を、他の質問 ここでのトピックまではどうでしょうか? うん。 学生:私は簡単に説明してい 浮動小数点および精度。 JASONハーシュホーン:フローティング ポイントと精度。 誰か本当にすぐにできます 私の要約を与える 浮動小数点および精度? あなたのすべては、あなたのためにこれをしなければならなかった 問題が設定されているので、すべてのね それに慣れ。 またはそうでないかもしれないすべてのあなたの。 誰ですか? 私に開始したスポットを与える。 浮動小数点および精度。 何が問題なの? はい。 ビクトリア? ヴァネッサ:ヴァネッサ。 JASONハーシュホーン:ヴァネッサ。 申し訳ありません。 ヴァネッサ:有限個しかがあります 表すことのできる数の あなたは私たちの中で、にしているので、 場合、32ビットシステム。 だから、ちょっとする必要が いくつかの数字を構成しています。 JASONハーシュホーン:だからそれはです まったく正しい。 の唯一の一定量があります 表すことのできる数。 あなたは2の非常に大きな数を掛けると、 それは量がオーバーフローする可能性があります スペースであなたが表現するために持っている 整数。 時には我々が使用する理由です 長い長いintの代わりに。 つまり、より多くのスペースを持っています。 つまり、より多くを保持することができます。 浮動小数点精度が関係しています それだけでなく、関係しています 小数であるという事実 常に表現されていない。 申し訳ありません。 私は、このバックアップを置いてみましょう。 小数1.0は常にではありません あなたが期待するような表現、 1.000000000。 それは時々のように表される 1.000000001または0.999999999。 それも、89がスローされる可能性があり どこかにある。 ので、これらの小数ではありません 正確に行うのと同じよう表さ 彼らが表現することを期待しています。 だから、問題に設定 - それは2だったか - 問題は、私たちが扱っ2を設定 我々が望んでいた、浮動小数点数、 彼らは我々が望んで正確に表現するために それらを表現するために、数 ペニーの、またはセントの数が、 我々は、100でそれらを掛けます。 我々はそれらを丸め。 そして、我々はすべてを断つ 小数点以下の背後にある。 すなわち、それらはだろうことを保証することであった 実際に我々が望んで正確に等しく それらが等しくなるように。 あなたが何かを取るときですので、 floatと、int型へとあなたをそれを回す 右のすべてを断つ 小数点の。 いくつかの浮動小数点がありますので、 不正確、100.000は次のようになります。 99.999999999として表現。 とするだけにすべてを遮断した場合 すぐ右には、あなたがしようとしている 間違った番号を取得します。 うん。 学生:私は疑問を持っていた キャスティングについて。 どのような順序でそれが起こるのでしょうか? あなたは、float、ブラケット、1分割を行いたい場合 10で、それは10で1を割ったのですか、 0.1を入手して、それから回し フロートにそれ? JASONハーシュホーン:あなたが行うと 10で割ったフロート1 - 学生:うん、次に等しい - まあ、それは通常どおり 、それは等しく持っている - うん。 あなたはそれフロートにしたいですよね? JASONハーシュホーン:[OK]を、私たちはするつもりだ 考え出すにセグエすることを使用 これらの質問に対する答え コー​​ディングを通して。 おそらくたくさんあるだろうから これらの微小な質問、および良い方法 それらを解決するために、コードを介して行われます。 だから我々は今、この権利をコーディングするつもりだ、 そして、我々は戻って行くつもりだ あなたが持っていた質問をコーディングします。 だから、最初の行 - 私はそれを書かれているべきではありません - 何です 私たちはときに我々やりたい最初のこと geditの中で新しいファイルを開く? 学生:含めます。 JASONハーシュホーン:何が含まれ? 学生:CS50ライブラリ。 JASONハーシュホーン:わかりました。 私たちは、他に何を含めるべきか? 私達はちょうど何が起こるかを確認するつもりだ あなたはフロートに何かをキャストする。 しかし、私たちは、私たちがしているかどう含める必要があります Cプログラムを書くつもり? 学生:標準I / O JASONハーシュホーン:stdio.hの。 私たちは、実際に、このために、必要はありません このプログラムは、cs50.h、それは言っても それを含めるようにして、常にいます。 しかし、我々は常に、stdio.hのが必要なのでしょう。 学生:C言語でコーディング? JASONハーシュホーン:Cでのコーディング だから私はこのcファイルとして保存します。 私はいくつかの素晴らしい構文の強調表示を取得します。 私は、メインの内側に空洞を書きました。 ボイドが何を意味するのか? 学生:任意のをとりません コマンドライン引数。 JASONハーシュホーン:このボイド手段、 場合、メインはいずれも取りません コマンドライン引数。 他の場合には、機​​能手段 コマンドライン引数をとりません。 または関数が、私がいた場合は、無効を書き込む メインのだと思います、メイン(無効)、 何も返さない。 だから、ボイドがちょうど何の意味もない。 私はとしたら、私は何を書くだろう コマンドライン引数を取る? 学生:int型のアークC文字列アークV. JASONハーシュホーン:INT ARGC文字列ARGV。 その権利はありますか? 学生:それは、charスターARGVブラケットです。 JASONハーシュホーン:だから、書くことができます 文字列ARGVブラケットまたはcharスターARGV 括弧はできますが、括弧を必要としています。 argvは配列であるため、 文字列で、覚えています。 それはちょうど1文字列ではありません。 だから、文字列argvはここ、だである ARGVと呼ばれる1文字列。 文字列ARGVブラケット、ここにある 文字列の配列。 だから、int型ARGC列ARGVブラケット 私ものになるだろう おそらく書くでしょう。 だから、整数で保存したいですか? 学生:ええ、整数。 またはフロート中。 JASONハーシュホーン:フロート? 同様に、フロートxは10で割った1に相当します。 JASONハーシュホーン:わかりました。 どのように私は、printfでフロートを印刷しますか? 何が? 学生:%F。 JASONハーシュホーン:%F。 整数は何ですか? DまたはI。 文字列は何ですか? 学生:S。 JASONハーシュホーン:S。 どのように新しい行を取得するのですか? 学生:バックスラッシュN。 JASONハーシュホーン:私が何を返すか メインラン正しくたら? 学生:0。 私も、その行を記述する必要がありますか? 学生:いいえ。 [OK]を、我々はそれから、それを書くことはありません。 誰もがそれを読むことはできますか? それは少し小さく見える。 誰もが参照するか、または必要がありますすることができ 私はそれを大きくする? 私はカメラのために、我々が作ると思う しかし、それは少し大きめ。 JASONハーシュホーン:私はこれをオンにする場合 。何を、実行可能ファイルにcファイル 私が書くのですか? 学生:テストを行う。 JASONハーシュホーン:申し訳ありませんが? 学生:テストを行う。 JASONハーシュホーン:テストを行う。 私たちは話していた 今年のライン。 打ち鳴らす。 打ち鳴らすとは何ですか? コンパイラの名前。 この行は何ですか? 学生:GDBの使用のためにそれを設定します。 JASONハーシュホーン:セット それまでGDBの使用について。 この行は、その何ですか? 学生:ソースコード。 JASONハーシュホーン:それです。 ソースファイル、。cファイル。 この2行は何をしますか? またはこれらの2行ではない。 学生:それ名は、テスト。 JASONハーシュホーン:だからダッシュOによると、 違った何かという名前を付けます。 そしてここでは、テスト、それを呼び出している。 私はそれを中に持っていなかった場合は、 何がこの名前を付けるのでしょうか? 学生:a.outの。 JASONハーシュホーン:a.outの。 これは何をしますか? 学生は:数学ライブラリをリンクします。 JASONハーシュホーン:これは、リンク 数学ライブラリにある。 私たちは、数学ライブラリが含まれていませんでしたが、 それは非常に一般的なので、彼らはき 常に含めるように書かれメイク 数学ライブラリ。 同様に、これは、 CS50ライブラリ。 我々はリストもOK、そう、我々は今持っている テストと呼ばれる実行。 それを実行するために、私はテストを書く。 私は自分が浮動小数点ことがわかり、 期待どおり、0に等しい。 それをする - そう - 学生:次に、あなたが今フロートを置く場合、 あなたはfloatとしてキャストのように - JASONハーシュホーン:鋳鉄 フロートに1? 学生:いいえ、完全なものをキャスト - うん。 あなただけのことをした場合、だろう つまり、0.1にする? JASONハーシュホーン:[OK]を、そう本当にすぐ、 10、であるそれらで割った1 整数は、分割されている。 あなたは、整数を分割するときだから、彼らがしている 0、あなたは保存していること0 スラッシュがあるため、フロート ちょうど整数の除算。 だから今、私たちは、何かを回しています フロートへ。 何が起こるか見てみましょう。 我々はテストを作ってあげる。 だから今我々はスラッシュがなかったことを参照してください。 整数の割り算は、浮いていた 小数点除算。 、その引数の1 floatにキャストされていた。 だから、今ではこれを扱う、言っていた 我々が扱っているような分裂 整数と浮動小数点ではない。 だから我々は我々が期待する答えを得る。 何が起こるか見てみましょう - おっと。 私は以上の10進を印刷したい場合 スポット、私はそれをどのように行うか? 学生:ポイントドットF、またはできるだけ多く あなたが望むように小数点以下の桁。 JASONハーシュホーン:だから私は印刷 10進数のスポット。 そして、我々は今我々が取得している参照してください。 いくつかの奇妙なもの。 そして、それは戻ってあなたの質問に戻ります 約小数点不正確浮動。 ここに格納されている奇妙なものがあります。 [OK]を、それがあなたの質問に答えるのでしょうか? あなたは他に何を望んでなかった すぐにコーディングしますか? 学生:私はちょうどかどうか見てみたかった ていない、あなたには、いくつかのポインタを解放した場合、 そのポインタは、まだ中に格納していたかどうか それそれがされていたもののアドレス 以前を指す。 JASONハーシュホーン:OK、 それでは、それをしてみましょう。 CHARスターptrが、これは変数を作成 char型の星のptrを呼んだ。 どのように私はmalloc関数を書きますか? オールデン? ALDEN:ちょうどmalloc関数。 しかし、それはのサイズである必要があり、 この場合、私はあなたがしたいと思います CHARを指している。 だから、CHARなるだろう。 JASONハーシュホーン:[OK]を、ので、より多くの 一般的に、インサイド - の編集ができます。 malloc関数の内部では、番号が欲しい ヒープ上のバイト数。 一般的に、私たちは私たちがしていることを見てきました そう、我々はmalloc関数としているです 例えば、文字列、または 整数の配列。 だから我々は10の整数、または10が必要な場合 文字、10は私たちに10を与える。 して、文字のサイズが与えるだろう 弊社で文字のサイズ、 この場合は1バイトです。 私たちは、10バイトを取得。 我々はintのサイズを記述した場合、 それは私たちに40バイトを与えるだろう。 ので、より多くの一般的に、malloc関数の内部 希望するバイト数です。 このケースでは、1バイトを取得している。 奇妙な使用のように思われる malloc関数のが、私たちのために 目的は、理にかなっています。 だからがあります。 我々は自由を呼び出すつもりです。 我々はそれを取り除くと、我々は再びPTRを使用しています。 そして、あなたがチェックし、何をしたいのですか? 学生:私はちょうどかどうかを確認したかった か何かがあったではない その中の。 JASONハーシュホーン:どうだから それは何も指さ? 学生:ええ、正確に、どうか それでもメモリアドレスを有していた。 JASONハーシュホーン:だからしたい PTRの値を確認するには? 学生:ええ、その通りです。 JASONハーシュホーン:私はここで何を書くか 私は、の値を確認したい場合 ポイント - 何であるか、ヨルダン 値は、言った? または何がPTRの内部に格納されている? 学生:メモリアドレス。 JASONハーシュホーン:メモリアドレス。 私はこれを書くのであれば、それはよ 私にPTRの値を与える。 そして、どのように私はプリントアウトしない メモリアドレス? フォーマット文字列は何ですか メモリ·アドレスのための? 学生:%pは。 JASONハーシュホーンます。%P。 %sは文字列です。 ポインタの%P。 その権利はありますか? その通りです。 だから、ptrは等しい - それはまだそれに何かを持っています。 これはおそらく、もっとある 興味深い質問。 その行は何をしますか? 学生:ワンセグ障害。 JASONハーシュホーン:何? 学生:私はそれが障害をセグメンテーション·と思います。 JASONハーシュホーン:フム? 学生:私はそれはseg faultをだしと思います。 JASONハーシュホーン:だから、この行 コー​​ド、スターPTRの、どのような 星が意味するのでしょうか? 学生:内容。 JASONハーシュホーン:うん。 のコンテンツを取得するために行く。 だから、これはメモリに行くために起こっている そこに対処し、私にそれを与える。 私はここ%cを使用しているのでそこに そこに格納された文字である。 だから我々は、そのアドレスを、我々に行くつもりです ちょうど見た - またはそれはおそらくだろう 一味違うこの 我々はプログラムを実行する時間。 しかし、我々はそのアドレスに行くよ その我々はまだ存在することがわかっている そこにあるものを参照してください。 だから、seg faultをだしていませんでした。 それはちょうど私たちに何も与えていませんでした。 これは、実際に私たちに与えられたかもしれない 何かが、我々はそれを見ることはできません。 そして、それは戻って、このアイデアに行く - そして我々は中にあまりにも多くを取得するつもりはない これ、それは超えていないため このコースの範囲。 我しかし、もし我々は、ちょうどここの話 によって配列の範囲を超えていた 1、我々はトラブルに巻き込まれない可能性があります。 時には、あなただけの1でオフに行くとき、 あなたはあなたが何か間違ったことをしている トラブルに巻き込まれる可能性があります。 しかし、あなたはいつもトラブルに得ることはありません。 それがどれだけ悪いことをあなたは依存 行うと、トラブルに取得するつもりだ。 ずさんなこと、言っているではありません あなたのコードで。 しかし、それはプログラムがないので、言うことです いつもあなたがどこかに行っ​​ても、終了 あなたが行くことになっていない。 その良い例が、たくさんのである 彼らの問題の人々は、3を設定した 15は、チェックしませんでした ボードの境界です。 だから、に見えたが、左に見えた 右を見て、一番上に見えた 下へ。 しかし、あなたはトップかどうかをチェックしませんでした 実際にボード上になる予定だった。 そして、それをした多くの人々と 、で自分のプログラムが動作したことになって 完璧に、どこにそのボードがあったため、 あなたが1を行った場合、メモリに格納されている その上またはそのメモリをチェックする 住所、何でもありませんでした そのことについては特に恐ろしい、 ので、あなたのプログラムではありませんでした あなたに叫ぶつもり。 しかし、もし我々はまだポイントを脱ぐだろう あなたので、あなたは、それをチェックしませんでした あなたがいなかった何かをしていた 行うことになって、あなたは可能性があります 困って頂いております。 オッズは、おそらくいない、しかし、である。 これは、はい、それを示すようになっています 我々はまだそれに行くことができます。 そして、我々は中に取得していない この場合のトラブル。 我々は読んで実行しようとしました場合には 次の100文字は、と思います おそらくトラブルに巻き込まれる。 そして、あなたは、次の100を読んでコーディングすることができます 文字は、いくつかの操作を実行して欲しい場合は、 forループのようなもの。 うん。 学生:私たちは、その割り当てられていたので スペース実際の値は、ないでしょう 実際には何も見ることができ。 我々はそれを設定している状態で試してみてください Cか何かを好きに等しい? JASONハーシュホーン:良い質問。 どうすればその値を設定するのです - コー​​ドのどの行私はライン上に書くのですか 7は、あなたが言ったことを行うには? 学生:スターptrはシングル等しい 引用Cは、単一引用符を終了します。 JASONハーシュホーン:だから入れている 文字あり、c、その位置で、 再び、その星のため そこに行くことを意味します。 との左側に使用された場合 代入演算子は、それに等しい サインインして我々は取得するつもりはないこと 値にその値を設定したほど。 それでは、何が起こるか見てみましょう。 我々はそこに何かを置く それがあった。 私たちは、自由と呼ばれる。 いくつかのものは、おそらく何が起こっ ヒープ上。 だから、もうそこにはない。 しかし、再び、我々は取得していない そこに行くためのトラブルで。 私が説明するために、コード内でこれをやっている これらの多くは、その あなたが持っている疑問は、彼らがしている 本当に面白い 多くの時間を応答します。 そして、彼らは本当に良い質問だ。 そして、あなたはそれらを把握することができます 自分の場合、例えば、 我々はここにいない。 うん。 学生:あなたが送信していないので どこポインタあなたがする必要がありますか malloc関数を使うのか? JASONハーシュホーン:だから、これは戻り あなたの最初の質問へ。 [? ?] それだけで、ローカル変数ですか? ここでのmallocはその説得力はありません。 ここmalloc関数を使用することはありません それはだから、その魅力的な ただローカル変数。 学生:だから、CHAR行うことができます スターptrはハロー等しい? JASONハーシュホーン:ああ。 だから我々はすぐに戻って取得するつもりだ あなたの最初の質問へ。 私はあなたが満足していなかったと思います 私の答えを持つ。 OK? そのような? 学生:うん。 待つ。 JASONハーシュホーン:そしてここで あなたが印刷したいのですか? だから我々はそのような文字列を出力します? 学生:興味深い。 JASONハーシュホーン:だから、これはこのことを言う 引数には、文字の種類があります。 だから、これは文字に​​する必要があります。 学生:ちょうど最初の1をとります。 JASONハーシュホーン:だからこの 私が前に言ったことである。 私はそれが保存されないのは、言ったように 変数のポインタの中の文字列。 これは、収納だ - 学生:最初の値 文字列の。 JASONハーシュホーン:のアドレス 文字列の最初の値。 我々はこれをプリントアウトした場合、我々はしている ポインタの内部で値を取得する。 そして、我々は、それは確かに、ある表示されます メモリアドレス。 それは理にかなっていますか? 申し訳ありません。 それがあなたに答えない、待つ 質問は、しかし? 学生:うん。 JASONハーシュホーン:このコード行である 文字列を作成し、別の 指している変数のポインタ その文字列に、その配列。 うん。 我々は一つのメモリに行きましたそうであれば学生 さらに対処する、我々は時間になるだろう? それは文字列として格納されていませんか? JASONハーシュホーン:同様に、私たちはやった - ので、これを行うのは価値がある。 これは小数点演算、君たちです 前に見てきたし、あるべき 比較的快適に。 これは書き込みに似ている - 我々はこのコード行を記述した場合、 我々は以前に配列表記を見てきました。 これは私たちに第二を与える必要があります この配列、Hの値。 我々はこれを行った場合、これも与えるべきである 私たち、その配列の2番目の値。 それがメモリにいないだろうので、 まず最初のアドレスが、 事1以上のメモリアドレス。 して、スターのオペレータデリファレンス そのポインタ。 そして再び、見てみましょう。 我々は再びHを得る。 学生:何が正確に行います デリファレンスの意味は? JASONハーシュホーン:逆参照 に行くための豪華な単語である。 それに移動して、そこに何を得る ポインタを間接参照しています。 それは、そのためだけの派手な言葉だ。 学生:私たちは、印刷したい場合 文字列全体は、私たちでし アンパサンドポインタをする? JASONハーシュホーン:[OK]を、私たちは ここで一時停止する予定。 我々はここで終了する予定です。 アンパサンドは、あなたのアドレスを提供します 場所、その時には、アンパサンドを行う 変数は、それはあなたの住所を提供します その変数が格納されている場所。 アンパサンドポインタが得られます ptrがメモリ内にあるPTRのアドレス。 我々は上に行くつもりはない この例で。 あなたはこれらを把握することができます 自分で物事。 しかし、繰り返しますが、これはあってもフェルゲンツ可能性があります あなたが知っておくべきことを超えてビット この中期の範囲 - またはこのクイズではなく。 申し訳ありません。 私はなぜなら私たちは、上に移動しようとしている 1のコーディングの問題をやりたい 時間の前にアップしている。 そして、我々は、私が何を考えてコーディングしようとしている これらの中で最も説得力がある 例、atoi関数。 だから、これは上の問題だった 2年前にクイズ。 そして、私はここに、ボードの上に持っている。 人々は、クイズに求めていた - それらはもう少しtesxtを与えられた 質問が、私は排除さ テキストには、不必要であったため 現在、私たちの目的のために。 それだけでいくつかの背景だった 何をしたかはatoiに。 しかし、あなたはすべて知っているとされ、非常に atoi関数に精通。 私はあなたがこれをコーディング示唆 用紙上に。 私はまた、戦略を使用することをお勧め 我々は終わってしまったので 私たちのセクションにたくさん。 まず、あなたが理解し 何をしているatoi関数の。 絵を描くか、いくつかを思い付く あなたの頭の中でその精神的なイメージ。 次に、このための擬似コードを書き出す。 クイズでは、あなたが得るすべての場合に 擬似コード、少なくともあなた 何かを置く。 そして、その後に、その擬似コードをマッピング C.あなたにチェックがある場合 擬似コードのような確認もし何か 1、それは場合にマップされている などの条件や。 そして最後に、C言語でプログラムをコーディングする だから、戻っatoi関数に戻り、5分かかる のシートでこれをコーディングする 約おそらく紙、 あなたが上にかかる時間の量 atoi関数をコーディングするクイズ。 5〜15分間、5つ、5つ、12個 10分量の程度である あなたはこれに費やすだろう時間 クイズに質問。 だから、今5分かかりください。 ご質問がある場合には、調達 あなたの手と私の周り来る。 [SIDE会話] JASONハーシュホーン:[OK]を、そう それは5分であった。 つまり、量の約おそらくだった 時間はあなたが、クイズに、その上で過ごすと思います その時間の多分ローエンド。 私たちは少しでおさらいします。 私たちは、このコーディングを始めましょう。 そして、我々はすべての方法を介して取得しない場合は、 これとこれへの回答 クイズの質問が再び、利用可能です、 2011年秋には、この質問するときです クイズに登場した。 そして、それは8ポイントの価値があった クイズにして。 8点の上限である ポイント何かの量は価値がある。 ほとんどの質問では、範囲内にある 一から六までの点の。 だから、これはより困難である 確かに質問。 私は誰を始めることができますか? 一般的に、我々は何をしようとしている これで何をしたいために 論理的に、関数はatoi、? 我々は何をすべきかをしたいですか? だから我々は書くつもりだ いくつかの擬似コード。 学生:文字を変換 整数に変換する。 JASONハーシュホーン:文字を変換 整数に変換する。 [OK]をクリックします。 だから我々はどのように多くの文字 通過する必要があるとして? 学生:それらのすべて。 学生:すべての文字 文字列中。 JASONハーシュホーン:すべて 文字列内の文字。 だから我々は、すべての通過したい場合 文字列内の文字、ものは何ですか C言語で、我々は許可されていることを見てきました 私たちは、すべてを通過する 文字列内の文字? 学生:forループA。 JASONハーシュホーン:forループ。 だから我々は、をループするつもりだ s内のすべての文字。 その後、私たちは何をしたいとしている 我々は特定の文字を取得するとき? 我々は90を通過したばかりだと言う。 私たちは、9を​​得る。 それはキャラクターだ。 私たちは、で何をしたいか その文字9? 学生:文字0からそれを引く? 学生:0を追加しますか? JASONハーシュホーン:減算 文字0から? 学生:うん。 JASONハーシュホーン:なぜ あなたはそれをやってみたい? 学生:[聞こえない] 値。 そのint値。 JASONハーシュホーン:[OK]を、私たちは取る 文字9、からそれを引く 文字0取得する 実際の整数9。 甘い。 そして、どのようにその文字を知っていますか 9 0マイナス文字が9である? あなたはどのような時に、チャートを見たのですか? 学生:9は、論理的にあります。 9と0の間の場所。 または、ASCIIテーブルを見て可能性があります。 JASONハーシュホーン:ASCIIテーブル。 しかし、はい、あなたにも正しいよ。 だから我々は0を減算します。 だから今、私たちは、整数9を持っている。 そして我々はそれで何をしたいのですか? 我々は90を持っているなら、それは最初の整数です 我々は我々が何をしたいのか、持っている? 学生:私は一時的な整数に置くところ 配列は、それに数学を行う 後で最後にそれを作るために。 JASONハーシュホーン:わかりました。 学生:あなたは、終了時に起動することができます その配列とはとても前進 そのあなたが前方に移動するたびに、 あなたは10を掛け。 JASONハーシュホーン:わかりました。 これはかなりのように聞こえる 説得力のある考え方。 私たちは、配列の末尾に始めることができ、 そして我々はstrlengを使用することができます。 我々はここでstrlengを使用することができます。 私たちは、文字列の長さを取得します。 私たちは、最後に開始します。 そして+最初のものを、私たちは取ること 整数、そして多分私達は次のように作成します 新しい整数型の変数までトップ場所 我々はすべてを保存している。 からのS内のすべての文字を通してだからループ 後ろから前に、我々は0を減算し、 その後、我々はそれを取る、とに応じて、 それがどこにあるか、我々はそれを掛け 10の力で。 ので、最初の1、私たちがやる 右端の文字を掛ける? 学生:10から0。 JASONハーシュホーン:10から0。 我々は、第二​​は何を掛けない 右端の文字による? 学生:[聞こえない]。 JASONハーシュホーン:何? 学生:10から1。 JASONハーシュホーン:10から1。 サード右端の文字? 学生:10から2。 JASONハーシュホーン:10から2。 学生:申し訳ありませんが、私は理解していない 我々はここで何をやっている。 JASONハーシュホーン:OK、 それでは次に、戻りましょう。 だから我々は取得するつもりだ 文字列で渡され。 私たちは、atoi関数を書いているからです。 だから我々は、文字列で渡されます。 我々は渡さ取得していると言う 文字列90。 私たちがやろうとしている最初のものが設定されている 我々はしている新たな整数変数 ちょうど作成しよう 私たちの新しい整数として。 それは我々が行っているものです 最後に戻ります。 我々は内のすべての文字を通過する必要が 文字列我々が決定しましたので、 私たちは、それぞれの1に触れる必要があるとし、 その後、私たちの新しい整数に追加します。 しかし、我々は単に数として追加することはできません。 私達はちょうど9を取ることができないと 私たちの整数に9を追加します。 それは、どのような場所に依存 それが文字列である。 私たちは、乗算する必要になるだろう その10の力で。 そのためにはどのようにベース10の作品だ。 だから我々は、実際に取得するつもりだ 文字、または実際の整数 数値、文字0を減算することにより 文字9我々が行ったようで から文字大文字のAを差し引く 我々は1で持っていたどのような文字 これらの問題。 だから我々は、実際には0から番号を取得します 9実数として保存し、我々はよ 応じて10の力を掛け 我々は、文字列のどこにいるかに。 そして、我々はそれを再度追加しようとしている 私たちの新しい整数型の変数に変換する。 それでは、これはなりようになります。 も - 私たちはこっちに描画します。 我々は、文字列90で渡されたら - 学生:[聞こえない]。 JASONハーシュホーン:しかし、 atoi関数は、文字列を取ります。 だから我々は通過するつもりだ 保持。 我々は90で渡された取得します。 我々は、フロントに戻ってから行く。 我々は0になります。 学生:私は申し訳ありません。 多分これはばかげている。 我々は、文字列で渡された取得している場合は、 なぜ我々はしているもの90である 渡されたばかり? 90は整数ですから。 JASONハーシュホーン:atoi関数がかかるので 文字列と整数に変換します その文字列の表現。 しかし、文字列90は整数ではありません 90または数90。 文字列90は2の配列で、か 3文字ではなく、9 文字、0文字、および バックスラッシュ0文字。 そして我々は、理由のためatoi関数を書いている たとえば、次のコマンドを撮るとき ライン引数、それは内に保存だ ARGV、それが文字列として保存さだ。 しかし、あなたは数としてそれを扱いたい場合には、 あなたは、ANに変換する必要があり 実際の整数。 その我々は我々の問題のセットのいずれかを行った。 我々は数でやっている 我々の問題セット。 整数を取ったすべての人 コマンドライン引数として。 だから、だからこそ私たちatoi関数は 文字列を取ります。 だからもう一度、ここで我々の例では、ね 最後の1を取るつもり。 私たちは、文字を減算するつもりだ 文字それのための0、0 文字0を差し引いたあなたに与えます によると、実際の数は0、 我々が行うのASCII数学。 文字は、次のように表現されているので 実際のとは異なる - 文字aは、例えば、 小文字のaは97である。 そうではありません - おっと! それはあなたが期待する何でもありません それは、例えば、0である。 だから、減算する必要があります 文字0を取得します。 だから我々は、ここでそれをやろうとしている 実際の数を取得します。 そして、我々を掛けしようとしている 10の力はどこにに応じて、 文字列であり、その後、それを取る 我々のプレースホルダに追加 変数ので、思い付くことができます 私たちの最終的な新しい整数。 それはすべての人に理にかなっていますか? だから我々は、これをコーディングするつもりはない 今、私たちはだから 時間に短い取得。 私はそのタイミングをお詫び申し上げます。 しかし、これがうまくいけば、あなたがどうなるか、です クイズに行うことができる - で 最低限、この擬似コードを取得する 書き出さ。 そして、我々はなかった場合に書き込む 擬似コードは、実際には、我々はこれを行うことができます かなり迅速に。 私たちが書いたコメントの各行 ここに約に変換 Cコードの1行。 新しい変数、書き込みの宣言 ループ、いくつかの減算、いくつかの 乗算、およびいくつかの割り当て。 我々は、おそらくもしたいと思う 戻りラインを記述します。 また、配置したい場合があります ここでのいくつかのチェック。 うん。 学生:だから我々は扱うことができます 実際の文字列としてのS? 私が知っているので、それだけでアドレスです。 同様に、どのようにして、長さになるだろう 文字列がそのまま渡されて? JASONハーシュホーン:それでは、どのようでした 文字列の長さ? STRLEN。 学生:strlen関数、うん。 しかし、あなたのようにSを置くことができます そのための議論? JASONハーシュホーン:だからstrlen関数 char型の星を取る。 そして、それは、その文字のスターに追従し、それ それがAに到達するまでカウントを続ける バックスラッシュ0。 strlen関数は、実際にあった 他のプログラムの1、私たち コー​​ドに行っていた。 つまり、コードに別の良い1だ。 その1は、少し簡単だ場合、以下の原因 あなたはそれについて考えるつもりだ 概念的には - 私はちょうどそれを大声で言った - strlen関数は、以下の ポインタといっていると カウントとなるまで追跡する あなたは、バックスラッシュ0に達する。 学生:はい、それを得た。 JASONハーシュホーン:のだから、最高の クイズ0明日に運。 ご質問があれば、私はよ この後に外にしてください。 私に電子メールを送ること自由に感じ。 君がいるなら、自分のTFに手を差し伸べる 私のセクションで、または私の得られない あなたはそれをしたい場合は、電子メールで送信。 あなたが陥るだけ送信したい場合 私のメール、FREAKOUTのメール、私はよ 、スマイリーフェイスのように、戻ってを送信 または、のように、冗談か何か。 だからだけでなく、それを行うにはお気軽に。 幸運を再び、と私はよ すべて来週お会いしましょう​​。