>> 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のメール、私はよ
、スマイリーフェイスのように、戻ってを送信 または、のように、冗談か何か。
だからだけでなく、それを行うにはお気軽に。
幸運を再び、と私はよ すべて来週お会いしましょう​​。