[テーマ音楽] SPEAKER 1:こんにちは、みんな。 セクションに戻っようこそ。 私はなぜ、ある素敵な一日かゆうパックで 必ず、あなたの4は、ここでしかない とではない私たちのいつものパック。 私はこの週末に病気だった。 だから私はあなたたちのためにスターバーストを持っていません。 そして、私は咳起動することがあり ひどくこれを通して。 だから私と一緒に負担する。 私は実際に試してみるつもりだ そして、最初にこの乗り切る しかし、私は咳発作を起こす前に。 しかし、単に私に簡単であること 私が尋ねるすべてのリトルbit--。 だからtoday--ための私達の議題だけ reminder--あなたのクイズは来週です。 私はそれに、この最後の週あなたに言った ガードをあなたをキャッチしないであろう。 だから私は再びあなたを思い出させるよ。 来週のクイズ。 そのために、来週の セクションには、はるかになる of--私はいくつかのレビューで試してみて、うまくいく。 だから、君たちができれば、 私を送信することにより、私を助けて あなたが満足しているもの あなたが心配していること、と、 あなたが探したいトピック カバーするために私に、それは素晴らしいことと思います。 だから私は彼らを試してみて、動作することができます 私たちのセクション来週へ またはあなたに余分な材料や予備校を送る あなたが他の場所で取得していない可能性があること。 うん! より多くの人々が来ている! 私はひどく、最後のことをやった、と思った 今週は、誰も戻って来たいしないこと? 私は怖い。 だから、他の三つのこと 私たちはオーバーに行くつもりだ リダイレクションは、ファイルI / Oであり、そして その後、ポインタと動的メモリ。 私はあなたがすべてに約超興奮していると確信している 、みんなのお気に入りのトピックをpointers-- 理解することはとても簡単。 私はあなたたちはすべての権利、ことを持って確信している? したがって、最初のものは最初に、redirection-- これは基本的には単なる方法です どのように入力を制御する あなたのプログラムに物事、 どのようにあなたのプログラムからあなたの出力の事。 主な方法君たち それと対話されてきた ただ標準出力を介して行われ ここにあなたの印刷画面を持つ。 それだけには方法があります 私たちはここに見るようにpipe-- 私たちのwords--種類の1つである パイプの情報 またはファイルからファイルにそのデータ。 それはちょうど、異なる方法だ あなたのプログラムに物事を そしてあなたのプログラムの中から、代わりに ただ、この画面にそれらを印刷する や物事を入力 コマンドラインから。 だから、最初のものは少なく、 キャレットより大きい。 それだけで出力を印刷しoutput--そう 代わりに、画面のファイルへ。 だから、あなたが印刷された何かを持っていた場合 "こんにちは、世界!"画面に、 あなたが代わりにそれを置く場合 output.text、それに output.textと呼ばれるこのファイルを作成します。 あなたがそれを開いたときと、それはよ "こんにちは、世界!"と言うそこに。 これは、超便利です あなたがエラーのトンを持っている場合 実際に、我々はこの1つで見るように。 あなたは2キャレットを行う場合、それはよ エラーメッセージを印刷します。 あなたが持つ問題を抱えているので、もし コンパイル、それがエラーをたくさん持っている あなたがしようとしてで泥沼取得している あなたのコマンドラインでスクロールするには すべてそれらを介して、次のことができます 単にファイルにそれらを印刷し、 あなたがそのようにそのファイルを開く それらを介して簡単にスクロールすることができます。 私は実際にあることを使用 私がデバッグしたたくさん 機械学習のための私の181のpset。 だから、後でスーパー便利です。 あなたがプログラムを持っている場合にも便利です それは多分、ライブラリを生成している またはいくつかのセットを生成する 文字列の、そしてあなた それを見ることができるようにする必要がある それが適切に生成だ。 これはそれを行う方法です。 ですから、ファイルにあなたをそれらを印刷した場合 より簡単に調べることができますよね? スクロールしようとして対 あなたのコマンドラインを介して。 その後一つのことに注意する そのちょうど大きな付きです キャレットより、あなたが書いている場合は、 すでにexists--ファイルへ 私たちが最初にこれを実行した場合のような 時間は、私たちは、output.textためにそれを置く その後、我々は第二のプログラムを持っていた プログラム2としてこれを印刷していること そして、output.text以上やった それはそうthat--上書きされます で今までにあったものに上書き そもそもそのファイル。 だから、あなたが追加したい場合は、 ファイルへの、私たちはここで見るように、 あなただけの看板よりも2よりを行う。 そして、それはそれに追加されます。 それはそれを上書きしません。 ですから、複数を実行する必要がある場合 プログラムやキープの種類 それらのすべてが何であるかを追跡 ファイル内のあなたに戻って、 それはそれを行うための方法です。 あなたはあなたのファイルに何があるか気にしない場合 そしてそれは、上書きが許可さだ あなただけのよりシングル以降を使用することができます。 それは皆に意味があるか? 聴衆:同様にドットが大きくハロースラッシュ 二回のような出力ドットのテキストより、 それだけで出力のみに表示されます ドットのテキスト第二time-- SPEAKER 1:右。 だから、基本的には完全にだろう そもそもそこにあったものが上書きされます。 ここでは、このファイルの場合 すでにoutput.text お電話の何でも基本的には、存在している シングル大きいと再びその あなたはそれについて考えることができるよりも、 などのようなそれは、ファイルを置き換え。 Wordを保存しているときのような あなたはとして保存しない文書や、 そしてあなたは、同じ名前を維持し、 それは完全にit--を上書き これは物と同じ種類である。 誰でも上の任意の質問がある 単にファイルに出力? 恐ろしい。 だから、明らかに、あなたが逆転した場合 方向矢印は、入力を行うことができます。 だから、あなたたちは持っていたとき シーザーやのVisioneer様 あなたが入力何かに持っていた、 あなたがコマンドラインの引数を持っていた それそれ実際に入力。 これはそれを行うための別の方法です。 だからではなく、待っているの コマンド·プロンプトのため、 あなたが尋ねられたときのようなあなたの シーザーかのVisioneerでメッセージ、 テキストフ​​ァイルがあった場合 それが、あなたのメッセージを持っていた あなたはちょうどそれにそれを入力することができます。 これは、ドットのようなものでしたので、もしシーザースラッシュ 3矢印入力テキスト未満いる あなたのメッセージがあること、である うまく実行されます。 ときに、実際にあなたのシーザープログラム ユーザからの入力を求め、 それが既にあるため、それを持っているだろう あなたはこのファイルに入力した。 それはちょうど別の方法です。 output--のちょうど逆 あなたのデータのためだけで入力。 その後最後のものはパイプである。 だから、この1のかなりクール。 それはあなたができるため 一方の出力を行う としてそれをプログラムとput 別のプログラムへの入力。 あなたのうちのどれかかどうかは知りません 解読と共演 そのCS50は持っているかもしれません それはあなたが与えられただろうが、 あなたには、いくつかのサンプルを採取することができます ファイルには、あなたの暗号化にそれを入力し、 そして、そこから入力し あなたの解読にその 確認してくださいそれは同じ判明。 だから、この種の3ウェイループのようなものだ。 それのために行く。 読者:プログラムの場合 複数の入力を持って、 どの入力にそれを伝える方法はありませ テキストフ​​ァイル、または出力を使用するには? SPEAKER 1:これは、複数の入力を有する。 それはだ時にどのようなinput--を提出 初めてことの入力を求めて、それはだ 仮定するつもりは、私が思うに、それはだ ファイル全体でパイプに行く。 あなたが複数の入力を持っている場合、あなたがしているので、 複数のファイルにパイピングされようとして。 だから、あなたがメッセージを求めている場合 あなたのコードでは3回、 あなたはパッティングことになるだろう 三つの異なるファイルに。 そして、それはクレイジー取得します。 そして、あなたがする必要はありません 今のことを心配。 しかし、それはアイデアだ。 そんなわけで、パイプは1だけが出力され このプログラムは、他への入力を使用しています。 誰もそこに良い? 涼しい。 [OK]をクリックします。 あなたはおそらくありません それをあまりすることができません。 しかし、あなたは理解しておく必要があります あなたがこれを使用することができる方法。 いくつかの場合があること あなたはそれを使用したい場合があります。 だから、私は、ファイル/ O-で私はあなたがしているか知っている saying--我々はからの読み取りに慣れている そしてそこに私たちの画面への書き込み、 これで標準と標準出力である。 そして、それはあなたたちがされているものだ ここで、クラスの初めからやって。 しかし、あなたはまた、ファイルの読み書きができ、 私は/ O-でそう入力ファイルのすべてのファイルである、 出力は、それがすべてを表している。 だから、これは基本的にことを意味します あなたは今、あなたのデータを格納できます。 あなただけにそれを印刷するとき 画面、それは基本的には、右逝ってしまった? とすぐに「ハロー作るように 世界 "と実行の" Hello World " それは、画面に「こんにちは」を印刷します。 しかし、あなたは本当に行うことはできません そこから、それを使って何。 あなたがテキストで保存する場合 ファイル、突然 あなたが許可されているこのデータを持っている 操作したり、ファイルにそれを置くために、 以降のプログラムにそれを置く。 理由の一つ なぜ我々はこれを行うだけである 後で使用するためにデータを保存する手段として。 私はここでの手順のカップルを持っている ちょうど標準を歩いて I / O。ステップ1では、あなた 参照を作成する必要があります すべての付いたファイルへ キャップはスターファイル。 だから、ファイルへのポインタを作成します。 だから、あなたはそれを開きたい。 そして、あなたは、文字通り、言う ちょうどファイルがfopenを等しくなります。 そして、これは返すために起こっている あなただけの開いたファイルへのポインタ。 私はあなたのカップルを見ました 営業時間の連中。 しかし、物事の一つ remember--のポインタである 右、いくつかのアドレスまたはnullにすることができますか? 我々はこれまでどこのケースを持っている場合 何かが、nullを返すことができます 私たちは何をすべきかを持っていない 私たちは今までそれを使用する前に? 私たちは、どうかをチェックする必要があります それがnullかどうか、だね? あなたのいくつかは持っていた可能性があるため、 問題どこでどのようなオブジェクト ブレイクアウトで返されていたNULLでした。 あなたが実行しようとしました その上にいくつかの機能。 そして、あなたのコンピュータサイトが障害の発生した。 右? 私はあなたのカップルを賭ける その問題を持っていたかもしれない。 fopenを持つように、関数fopenはどちらでしょう ファイルへのポインタを返す、 または何かがうまくいかない場合には、 それがnullを返すために起こっている。 だから、常にチェックする必要があります それがnullを返されていないこと あなたが何かを実行しようとする前に。 これは標準的なパラダイムのようなものです あなたはここで必要になるだろうことを。 チャンスは今までがある場合、その 何かが、nullを返す可能性 それ確認してください あなたが進行しないの前に。 そうでなければ、あなたが行っている 素敵なサイトの障害を取得します。 そして、誰もそれらに対処するために好きではない。 だから私たちはここに見るように、最初の引数 ファイルへのパスだけです。 そのファイルが存在しない場合、 それは、そのファイルを作成するために起こっている。 そして、それは単に空白になるだろう。 その後、第2引数 あなたが望むモードです。 私たちはこのファイルから読みたいですか? あなたはそれから書いてみませんか? あなたが追加したいですか? だから、実際にどのような私はちょうどsaid-- ファイルが存在しない場合 あなたがから読み取るしようとしている それは、それがエラーをスローするようになるだろう。 ファイルがある場合のようにname--場合 file.textはまだ存在しません あなたが書きたい それに、それが作成されます あなたのためにfile.text呼ば空のファイル。 そして、あなたが追加したい場合は、 あなたが同じことを行う必要があります。 それは理にかなっていますか? あなたがから読み取るしようとしている場合は まだ存在しないファイル、 それがエラーをスローします。 それ以外の場合は、ファイルが作成され あなたがそれにやりたいため。 涼しい。 今、私たちは、ファイルから読み込むことができます。 そして、これは単なる種の予定です 異なる機能を通じて 我々は、ファイルI / Oを持っていること。この意志 今週のPSETで必要となる、 私は記憶が正しければ。 はい、それは絶対になります 今週のPSETに必要。 だから、fgetc関数は、次の文字を返します。 fgetsのは、単なるテキストの行を返します。 それは、最大何も返されます 新しい行、それが解除されます。 だから、関数freadは、特定を読み込み バイトや場所、それらを数 その配列内へ 何かがあなたは可能性がある 再size--でやってみたい 役に立つかもしれない。 どのように多くの人が読んでいる ところでPSET仕様、? [OK]をクリックします。 [聞こえない] SPEAKER 1:OK。 わかりました。 それが楽しいのpsetだthat--間違いなくお読みください。 あなたは、削除されたメモリを回復するために取得 それが動作する時に本当にエキサイティングcard--。 しかし、間違いなく、それを読み始める。 あなたなら、私に話をしてくる それについての質問があります。 [OK]を、関数fread、私が言っていたように 特定のバイト数を読み取る。 それはいくつかの任意の数だ あなたが設定するつもりだという。 そして、ちょうど移動しFSEEK 特定の位置に移動する。 だから、多分あなたは気にしない 次の10バイト程度。 あなただけ先にスキップしたい。 あなたはそれらを気にしないでください。 あなたは、バイト11から始まる読みたい。 fseekはあなたがそれを行うことができます。 だから、それはあなたが選択的であることを可能にする あなたが読んでいるかについて。 fgetc関数、fgetsの、そして関数fread読み取りので、 ファイル内の特定の場所から。 この場合は、この考える方法です 私たちのファイルであり、あなたが最初にそれを開いたときに、 あなたは、ファイル内のこの位置を持っている それは冒頭で始まります。 あなたが呼び出すたびに、 fgetc関数、fgetf、または関数fread、 それはから始めるために起こっている この位置マーカー。 例えば、あなたがちょうど読んでもらいたいとしましょう こっちにこのメモリチャンク。 あなただけ呼び出すことはできません。 あなたがこっちに模索する必要が し、そこから読み取る または、読み取りを取得、またはGETC あなたが望むものに応じて。 だから、ちょうどあなたがすることができ求める メモリの一部をスキップします。 そしてそれは唯一だ あなたは物事をスキップすることができる方法 あなたのバッファにそれらを読まず。 それは皆に意味があるか? 明らかに、あります パラレルhere--たくさんの 私たちの出力、または入力のリダイレクト、 あなたは読み取りと書き込みました。 だから、fputcのちょうど書き込み ファイルに文字。 fputsは、ラインを書き込みます。 関数fprintfは、フォーマットされた出力を印刷します。 だから、あなたは、タブを持っている場合、 またはスペース、またはその他もろもろ。 その後fwriteのは、いくつかを書き込みます ファイルへのバイトの配列。 だから、これは同じ方法です fwriteはと関数freadは類似して opposites-- fgetsの、fputs、および その後FPUTCとfgetc--たくさん クレイジー、迅速な物事の。 だけの種類のこのhandy--を保つ あなたは、異なる時間があるでしょう 多分あなたはちょうどどこが欲しい 1文字ずつ。 たぶん、あなたは全体のラインが欲しい。 あなたの辞書pset--付き これは、2つのPsetにあり、 私たちはあなたに全体を与える、と信じて テキスト形式で辞書 そのすべての単語を持って 行で区切ら。 だから、あなたが読みたい場合は、 1ワードずつで、 あなたが読んでいる場合は、何を使用する場合があります それらはすべて、新しい行で分離している そしてあなただけ一度に一つの単語をしたいですか? 読者:fgetsの SPEAKER 1:右。 Fgets--それは返すため 何でも1行になります。 そして、すべての単語がある場合、その 自身のライン、我々はfgetsを使用することができます。 涼しい。 意味をなすことなく、すべての人? クール? ええ、私たちに取得するつもりだ ポインタを持つ楽しみの一部 非常にすぐに、どこに いくつかの計算を行うために取得。 そして、それは素晴らしいことでしょう。 最後には、あなたのファイルを閉じstep--。 ここでたくさんのことで、 私たちのパラダイムの1 それが返すことができる場合にはある NULL、NULLをチェックする。 あなたが何かを開いた場合、 あなたはより良いそれを閉じたいと思います。 あなたが整うまでOK、そう、あなたは行われていない あなたがそれを閉じていない限り行わ。 それは終わっていないん種のように 太った女性が歌うまでは。 それはあなたのファイルをクローズするようなものだ。 それだけで、ここに言うように 常に、繰り返しに あなたがしている前に、あなたのファイルを開く 読み取りまたはそれに書き込む。 あなたがそれを開いた場合には、常にそれを閉じ。 すべての権利? 涼しい。 だから、ここでの例です。 だからかどうかはわからないtiny-- 男は非常によくそれを見ることができます。 場合にのみ、我々は増加する可能性が 明るさは何とか。 私ができるなら、私は実際にこれをやってみましょう。 [OK]を、君たちは本当にできない あなたは、そのすべてですることができます参照してください? [OK]を、私たちはその後、これをやろうとしている。 [聞こえない] 私はこれが見てはるかに優れて想定しています。 誰もがどこで見ることができ、私の マウスが質問です行きました? ああ、そこは苦労何is--! [OK]をクリックします。 基本的に、あなたたちは種類を持っている必要があります これが何をしているかのアイデアの。 これは完璧ではあり​​ません。 費やすよりも、私はむしろそれを説明するだろう より多くの時間を適切にフォーマットしようとしている。 基本的に、あなたがここに見るように、 我々は、ファイルのオープンで始まる。 そして、我々はいくつかを持っている 我々は、データベース·ファイル それを開くと、それが私たちの学生だと言う。 そして、我々はそれに書き込むつもりだ。 だからもちろん、nullを返します。 だから我々はnullをチェックする必要があります。 そしてそれはではない場合 ヌル、我々は通過します。 ご覧のように、私たちはしている ここをループ。 学生があります。 学生は3のように定義ハッシュです。 そして私たちがやっていることは、私たちされている 右、ファイルへの印刷? だから何我々は、ファイルにプリントアウトされている? 読者:得点 それが配列にある? SPEAKER 1:うん。 内にあるスコア 正確にarray--。 だから我々はこれを開いている データベースファイル、どの 私はいくつかの並べ替えであると仮定し グレードデータベース。 そして、私たちはちょうどプリントアウトしている そのファイルへの各学生のスコア。 クール? グッド。 恐ろしい。 [OK]をクリックします。 to--を取り戻すましょう 読者:私は簡単な質問を持っている。 printfのはループではないですか? それはあたかもループの中でですか? SPEAKER 1:いいえ、それはのためにループ内でです。 私はここまで非常によく私のマウスを見ることができない。 だから私はに苦労して 形式が正しく。 このブラケットは消えなければならない。 ここはダウンしている必要があります。 これは、あなたのためのループに何があるかである。 そこに。 今、それはかなりです。 だから、それはそれは除いてbe--べきかだ 私は却下、その最後のブラケットについて。 [OK]をクリックします。 それは皆に意味があるか? [OK]をクリックします。 私たちは、上に移動するつもりだ 次の事にthen-- これ、実際に、あなたが行っている コー​​ドを確認する必要があります。 だから私はちょうどに行くよ その上で、今コピーします。 [OK]をクリックします。 だから私はあなたたちにこのコードを表示するつもりです。 と私はあなたがしようとする姿たい それが行うことになっているかを。 だから分程度かかりthat--与え。 試してみて、ここで何が起こっているかを把握。 任意のアイデア? 我々は、少なくとも二つがあることがわかっている コマンドラインの引数は、右? 私は、のいずれかがあることを行っていると仮定 ある私たちのプログラムの[聞き取れない]という その後何か他のもの。 [聞こえない]が小さければ理由 2よりも、我々は彼らに叫ぶ。 右? と使用から、それは次のようになります それは、ファイルのいくつかの並べ替えになるだろう。 私たちは皆、それに同意する? だから今、ループが何をやっている? それは何を介して起こっているの? 読者:すべてのファイル。 SPEAKER 1:その通り。 これは、すべてを通して起こっている 私たちはそこに入力をしたファイル。 だから、それぞれのファイルのために、それはだ そこにいくつかの文字列を開く。 それは、そのファイルを開くだ。 右? そして、それはそれから読んでいる。 それがnullだ場合はもちろん、チェックする。 その後、印刷だ。 それがnullなら、それはちょうど私達に言っています ことをそれが存在しているファイルではありません。 で、覚えているので、 私たちのファイルが存在している必要がありますお読みください。 右? 書き込みとして追加し、 あなたはそれで逃げることができます。 しかし、読み取りで、私たちのファイルが存在している必要があります。 その後、それが存在する場合、 私たちはここで何してるの? ちょうどここから始めましょう。 この最初の文字do--これは何。 それは何をしますか? 彼は右の1文字を取得? だから、これは何をしているのですか? これは、最初の文字を得ている。 誰もが、EOFを知っていますか? 聴衆:ファイルの終わり? SPEAKER 1:正確にfile--の終わり。 だから、通過するために起こっている ファイル全体、右? そして、それはによって更新するだろう 後続のすべての文字を取得する。 右? そして、それは何をやっている? 読者:それを置くin-- SPEAKER 1:PUTCHARプリント あなたのスクリーンセーバーに。 [聞こえない]の文字。 その後ときに[聞き取れない] これは、ファイルを閉じます。 読者:あなたは[を必要としないのですか?他に? ?] SPEAKER 1:必ずしもそうではありません。 私が意味する、それは一種の、この中で暗示だ。 これは長いように、しかし、返すので この投稿をキャッチしないように、あなたはいいですよ。 私はそれはおそらく良いことだ意味 他を行うために練習します。 しかし、それ以外は常にではない 必要に応じて、特に あなたが何かを持っている場合 リターン、のようなもの この場合には、それがキャッチした場合ことを意味します それは、あなたのプログラムは終了するだろう そしてそれはこれに得ることは決してないだろう。 それはあなたがしている場合のためにさらに重要 必ずしも何かを返していません。 これがなかったらので、 何かを返す、 それがもしこれが真実であったことを意味するであろう、 この残りの部分は、まだ実行されます。 その場合には、あなた 偽したいんだろう。 それは返却だ場合、および プログラムのエンディング、 他には、すべての必要はありません 文脈に応じて時間。 ヤコブは、あなたが疑問を持っていたのですか? 聴衆:うん。 だから、fgetc関数は、次の文字を取得していますか? キャラクターはどのように増やしていますか? SPEAKER 1:うん。 だから、fgetc関数は、次の文字を取得します。 あなたは、ある意味で、C ++のように考えることができます。 聴衆:だからEOFは何でしたか? SPEAKER 1:EOFは、ファイルの終わりです。 それはちょうどあなたが知ることができますマーカーです あなたのファイルの最後にいること。 だから、これは印刷するために起こっている あなたの標準出力へ。 そしてそれは閉じるために起こっている に行うのファイル。 その後ましょへ行こう 次のファイルは、右? だから、全体的に、このプログラムは何をするのでしょうか? [聞こえない] SPEAKER 1:うん。 それはちょうどそこにすべてのものを出力します。 だから、あなたたちは今までのCATを使用した場合 いくつかのfile--のその後名前 あなたのうちのどれかが持っているかどうかは知りません 今までお使いの端末にそれを行って。 しかし、あなたが今まで使用している場合 コマンドCAT-- C-A-T-- その後どのようなファイル あなたはそれを持っているthere-- これ、あなたの端末にそれをプリントアウトする いくつかのスーパー便利です。 私はそれをたくさん使用しています。 それは皆に意味があるか? クール? [OK]をので、あなたのタスクのいずれかによってnow-- 自分自身や周りの人々とのyou-- 単純なプログラムを書くことである それはただの "Hello、World!"という書きます ファイルへの出。 [聞こえない] [聞こえない] SPEAKER 1:私はのようだった、でした 私はそのひどく先週のですか? 私はそれが悪かったとは思わなかった。 私はあなたがすべてここにしてくれてうれしい。 それは本当に私を幸せにする。 私は単純な楽しみの女の子です。 私のセクションでは、出席したとき、私はちょうど好き。 だから、僕はこれがために始めた取得しています 君たちは、私たちは一緒にコーディングできるようにします。 私は上の誰を入れて好きではありません あなたがなりたい場合を除きスポット。 聴衆:クイズのために、やる 我々はプログラムを書く必要がありますか? SPEAKER 1:あなたが求められる場合があります 手で簡単なプログラムを書きます。 うん。 聴衆:クイズ、右、来週のですか? SPEAKER 1:クイズは来週の水曜日です。 それは素敵な[がありますことを意味? CSE?] その後パーティーをグレーディング、どの あなたがあなたのスコアを得るでしょう意味 バック何時night--こと? 誰が知っている? しかし、それはその夜になります。 わかりました。 どのように我々はこれを開始したいですか? 私はあなたにこれでhint--開始を与えるでしょう。 読者:あなたがファイルを開く必要があります。 SPEAKER 1:うん。 だから何あなたはこれを呼びたいのですか? あなただけの "ファイル"と呼びたいですか? のは、それが簡単に作ってみましょう。 だから私たちの何fopen-- 出力テストは、になるだろう? 「こんにちは。」それを呼び出す そして、我々のモードは何ですか? 我々は、このファイルに何をしているのか? 聴衆:読んでください。 ライティング。 SPEAKER 1:我々はそれに書いている。 ラブリー。 [OK]を、私たちは今、このファイルを持っている。 私たちは何をする必要がありますか? 読者:それがnullだかどうかを確認してください。 SPEAKER 1:それは正確にnull--だかどうかを確認してください。 それは私が聞きたいものだ。 つまり、特に、自動でなければなりません この時点からほとんど。 あなたはおそらく、あなたをセグメンテーションフォルト起動した場合 どこかヌルをチェックしませんでした。 10人のうち9回、それだ あなたのエラーになるだろう。 だから、あなただけで得ることができれば それがnullだ場合には、習慣、必ず確認し、 あなたの人生は、になるだろう 素敵easy--または容易になります。 だから、それはヌルだかどうかを確認します。 だから、それはnullではない場合、その ビッグバンに等しいものです それが有効だnull--ませんmeans--。 私たちは何をすべきかをしたいですか? 私達はちょうど印刷したい そのファイルへの、右? それでは、私たちは使用するつもりですか? 読者:fprintfの SPEAKER 1:素敵Fprintf--。 とfprintfのは2 arguments--場所をとり それは行くと私たちが印刷されたいだ。 だから、最初のものは何ですか? それはどこに行くのですか? 聴衆:ファイル。 SPEAKER 1:それはファイルになるだろう。 そして、我々は印刷された何をしたいですか? "こんにちは、世界!" わかりました。 我々は最後thing--を持っている ここにもう一つの大きなパラダイム。 聴衆:閉じる。 SPEAKER 1:閉じる。 そこに行きます。 読者:これが起こっている ファイルがnullの場合はどうなりますか? SPEAKER 1:それがnullでない場合は、[いいえ、これは。 聴衆:ああ、もしそれがnot-- OKです。 その後は、fopenおよび用 中に入る二つの引数、 最初の引数は再び何を意味するのでしょうか? SPEAKER 1:引数がある 単にファイル名様 あなたがに行きたいという。 この実行後だから、あなたはでしょう 「ハロー」と呼ばれるいくつかのファイルを持っている それは、その中に "Hello、World"を持っていた。 それだけだ。 名前だけ。 読者:そして、それは書いているので、 ファイルがすでに存在する必要はありません。 あなたが言っていることですか? SPEAKER 1:右。 正確に。 ファイルとして「こんにちは」の場合 それはだ、まだ存在していない というファイルを作成しよう 「こんにちは、あなたのためにそれに書き込む。 読者:あなたが言っている ファイルに書いたプログラム、 なぜあなたは書いて "ファイル"の代わりにない ファイルの名前とfprintf-- SPEAKER 1:この場合、我々は持っているので すべてcaps--スターでその大FILE--、 ファイル。 だから、ファイルへのポインタだ あなたが話していること。 これがその方法です 我々はそれを参照してください。 この場合はそう、あなた file-- AHAと考えることができ、 我々はここでthis--ファイルを使用することができます 「こんにちは」のオープニングを指し、 それは書くせる。 聴衆:私たちは "こんにちは"置いてもらえません 代わりに[?ちょうど?] Fファイルの? SPEAKER 1:いいえ、なぜなら「こんにちは」 オープンかつ書き込み可能である必要があります。 ここにファイルすることに似ている [OK]を言う指定子は、我々 このfile-- hello--を持っている 私たちが見ていること。 それが開かれている。 そして、我々はそれに書き込むしようとしている。 あなただけの「こんにちは」を使用する場合、 それはその中にカプセル化される。 だから、フリークアウトになるだろう。 私が意味する、あなたはそれを名付けたかもしれない。 あなたは、ファイルを行っている可能性が 星は、「こんにちは」、すなわちに等しい。 しかし、全体のポイントはあなたということです 順番にファイルスターポインタを必要とする これらの機能を使用できるようにする。 読者:あなたが発音する ファイル、スター、ファイル、「こんにちは」 またはあなたが入れてありますか ファイルのスター、それによってファイル? SPEAKER 1:あなたができた 「こんにちは。」、ファイル、スターを行う あなたはこれを変更することができます どんな名前あなたが欲しい。 それは完全に任意です その名前は何ですか。 あなたはそれでも名前を付けることができます。 あなたが望むなら、スパゲティを飛ぶという名前を付けます。 読者:用の引用符で「w」は何ですか? SPEAKER 1:「W」は単なるモードです。 だから我々は、このファイルに書いている。 みんな良い? クリア? はい。 読者:だから、これを書いて ファイル、我々は、そのファイルを見つけるのですか? SPEAKER 1:それは同じことになるでしょう あなたが現在いるディレクトリ。 あなたはPSET 3にいる場合と あなたのpset内で、これを実行する 3フォルダがあることを行っている と呼ばれるこのファイルは「こんにちは。」 クール? みんな良い? あなたはすべてしているような気がします 偉大である、それを取得する。 [OK]をクリックします。 だから、戻って私のスライドshow--へ 物事が働くとき、私は大好きです。 [OK]を、あなたたちは興奮してpointers--ていますか? ポインタは素晴らしいです。 彼らは少しを取る あなたの頭の周りをラップする。 これは私の2年目 教えポインタ。 と私は最終的にそれを得たと思う。 あなたは闘争のであれば、それはOKです。 私が前に言ったように、絵を描く CSで物事に多くのことができます、 私は人々が傾向があると思うと同じくらい ああ、私たちはコンピュータの前にいると思うように。 私達はちょうどコードすべきである。 絵を描くNo-- 本当にあなたを助けるでしょう。 と私は本当にすることをお勧めします あなたの幼稚園児側へタップ とクレヨンを引き出す またはマーカーとドロー。 それはあなたを助けるため。 そして、あなたはオフィスの時間で私を見た場合、私は 紙のスタック持ち歩いされます ペンは物事を引き出すと。 だから、特に付き 絵を描くpointers--。 そして、私たちは実際にするつもりだと確信している ここにもいくつかの写真を描くこと。 だから、君たちは、すべて、Binkyを見守った このクールなクレイメーションの事。 そして、我々はそれが時本当に面白いと思う 彼は作品の束に爆発する。 それは、クラスのためのいくつかのコミックリリーフだ。 C [聞こえない]この偉大な能力 メモリを制御できるようにする。 そして、それは本当に物事の一つだ それそのような強力な言語になります。 しかし、偉大な力が付属しています 大きな責任。 そしてクレイジーなことが起こることができます あなたが注意していないのであれば。 だから、あなたが使用しているとき ポインタは、あなたが作りたい あなたが本当に理解してください 正確にあなたが何をやっている。 うまくいけば、次のの少し 時間は、あなたが本当に理解するのに役立ちます ポインタは、どのようにそれらを使用するには、 そしてそれらを操作する方法について説明します。 だから私たちは確信してきたmemory-- 前に、この図を見た。 だから、これはただのシンプルな図である どのように物事は、メモリに格納することがあります。 ですから、基本的にはこれらのを持っている 1バイトブロックの巨大な配列 我々はhere--わずか持っているものである 1ずつ増加します。 これはヘックスにある[聞こえない] そのように8ビットのブロック。 そして、すべてのブロックが関連している いくつかの16進アドレスを持つ。 だから、あなたが表示された場合 に0x、それはちょうど記譜だ それは16進アドレスだということ。 あなたはこの手段をとることができる メモリ内のいくつかのアドレス。 我々は、メモリアドレスの話をしている あなたは、16進数を見るたびに。 私たちは、int型変数である持っている、 山車は、格納する変数です。 int型ストアの整数そう。 山車ストアが浮かぶ。 だから我々はまた、ポインタを持っている そのストアメモリアドレス。 つまり、マッピングの一種です。 ポインタがもっぱらである メモリアドレスのため。 だから、そこにあなたのタイプのようなものだ。 アプライアンスは、32ビット、どの手段である メモリ·アドレスは4バイトである。 あなたが持っているので、任意のポインタ また、4バイトであることを行っている。 あるいはそれは4バイトだ場合には、 メモリは4バイトです。 ポインタストアメモリ。 従って、それらは4バイトだ。 Cool--はちょうどそれを強化したいと思います。 これで、この漫画を取得する必要があります。 私はあなたの何を知らない XKCDファンですが、私はXKCDが大好きです。 それは素晴らしいことだ。 わかりました。 私が言ったようにそれはだ、pointers--作成 かなり多くのちょうど何か他のものが好きです。 あなたはタイプを持っている。 あなたが名前を持っています。 右? それは我々がそこに持っているものだ。 [?六角?]スターはそれがポインタであることを意味し、 その後、あなたはそれを呼び出すために好き。 だから、タイプは表し あなたは何を保存することができます。 すべての権利? 我々はint型を行う場合と同じ方法で、 私たちはそこにint型を格納している知っている。 ポインタを、それを メモリアドレスを保持します。 しかし、それが意味することは、ここどこだthat--です 図面は重宝するだろう。 したがって、この場合には、我々は いくつかは、それでは4を言わせvalue--。 四つは、アドレス1にあります。 OK? この最初の1はここに意味 それは、ポインタ2倍だという。 右? これは、いくつかのポインタxのだ。 xは何でも何かあってもよい。 どのようなxは、xが4であると言うis--。 それは、保存するために起こっている ここではメモリアドレス。 だから、星をint型、x--これは memory--内の他のスロット 誰が、これが何であるかを知っている。 しかし、それはここにアドレスを格納するために起こっている。 だから、これは次のようになりlike-- この場合は、何であれ、 保存されているどのような0x1--で保存されている 私たちのポインタが保持しているアドレスで、 と一致しなければならない 私たちは、指定されました。 そのように0x1ので、この場合、これは、xである。 これは今まですることができ 我々はこれを使用している間にint型。 同様に、私たちが持っている場合 別1Y、何でも アドレスyを持つと共に格納される zはchar--同じことであると。 同じように、いつでもあなたを 試してみて、INTXが0.4に等しい行い、 それはあなたで叫ぶとになるだろう いいえのような、あなたはint型を望んでいたと述べた。 これは、整数であるとする。 それフロートにしようと停止します。 だから、物事は彼らがなりたいものとする。 物事が自分自身であるとする。 だから、大きなものだけである ポインタのタイプに関わらず それはそれが唯一だ、である 事はあなたがそこに格納することができます。 OK? 練習では、と同様に 先週、すべてのもの 本当に親切の抽象的と思われる。 私たちはいくつかの練習をやろうとしている。 それは、より多くの意味を確認する必要があります。 だから、だdereferencing--参照し、 本当に重要なのは、これらのストレートを取得します。 私はまだ、リフレッシュする必要があります すべての今して。 そして、私は私がしたいです1ウエイト、のようだ? だから、アンパサンドは、実際に得られます あなたの参照またはアドレス。 だから、中のアドレスを返す 変数のメモリが格納される。 だから、実際にあなたに戻るために起こっている 進、それを逆参照のに対し、 実際にあなたを与えるために起こっている そこに格納されたデータ。 OK? だから我々は例を見てするつもりだ 本当に速い、または実際に次のアップ。 [OK]をクリックします。 だから我々は本当に考えなければならない 慎重にこのことについて。 そこでここでは、いくつかの整数xを持っている。 私はこれを試してみて、描画するつもりだ 自分の能力を最大限に外。 だから我々はこのスロットxを持っているつもり。 そして、それは5の格納だ。 そのアドレスは、0x4にある。 クール? すべての良い。 だから今我々は、このポインタを持っている。 それはここを超えていた。 アンパサンドは私たちを与える 何かのアドレス。 そこで、この場合には、xのアドレスだ。 xのアドレスは何ですか? 04--このポインタが0x08にである。 クール? だから、このことについて考えることができます ポインタは、04、ちょうどここポイント以上。 そして、彼らはポインタと呼ばれるている 我々はこの中に多くを得るようにするので、 あなたは物事を指して見ることになるだろう。 そして、もう一つのブロックは、別のを指す ブロックは、より多くの意味になる。 だからここ2です。 そして、我々はいくつかを持っている what-- 0x0Cのあるコピー、。 そして、それはに起こっている 私たちのポインタを間接参照。 だから、何であるかを言っている [OK]を、ここに私たちのポインタです。 それが格納された値は0x04のです、そして、何 それは、このアドレスにアクセスしていると言っています それに何があるか教えてください。 だから、効果的だ この矢印は何をやっている。 あなたの星のように考えることができます。 私たちは星をやるときに[OK]を、それが従うことを意味します。 このアドレスに移動します。 そして、それは基本的には次のようだ このメモリチャンクにこの矢印。 そして5である、それに何があるか私たちを与える。 私たちのコピーが5に等しく、なぜそれがです。 それは理にかなっていますか? 誰もが通過する私を必要としない その再び、以上のゆっくり? あなたは私が行きたい それもう一回通って? [OK]をクリックします。 我々は再びそれを再描画するつもりだ。 我々は起動すると、私たちはすべて我々が持って同意する 変数のメモリの一部のチャンク 我々は5に等しくセットのx。 それがメモリ内にある場合、我々は制御しません。 だから、この場所はちょうどです 任意に割り当て。 そこに良い? [OK]をクリックします。 その後、我々はintへのポインタを初期化します。 つまり、それが指すように許可されている理由だ xは我々がここでint型を持っているので。 私たちは、別のチャンクを持っている メモリなぜならこのポインタ ちょうど何かのような変数である。 これは、任意に割り当てられている メモリ内のいくつかの領域。 そして、何それが格納しても、xのアドレスです。 アンパサンドは、xのアドレスを意味します。 だから、xのアドレスは何ですか? 聴衆:それはzero--だ SPEAKER 1:0x04の。 だからthen--最後の1。 我々は再びいくつかのcopy--を持っている ちょうど別の変数。 それでは、いくつかの任意の場所を割り当ててみましょう。 そして、私たち私たちのポインタを間接参照。 星はに行く意味 アドレスは、私のポインタに格納。 何があるか教えてください。 だから、アドレスが格納される 我々のポインタは0x04である。 だから我々はそのアドレスにアクセスしてください。 それは、そのアドレスを指しています。 このメモリ·ブロックの内側に何ですか? それは5つだ。 だから、私たちは私たちのコピーを割り当てるものだ。 みんな良い? 涼しい。 Again--写真。 だから、私はhere--値を追跡 あなたたちはこのことについて考えてみましょうする予定。 私たちは別の画像を描くことができます。 しかし、私はあなたがしようと理由たい 分間自分でこの貫通。 彼らは明らかにしなかったので 私たちの例アドレス、 私はちょうどアンパサンドをするつもりですx-- どの家にそれを後押しする必要があります。 アンパサンドは、アドレスを意味します。 最初の1でだから、誰もが 最初の行で行く。 一部のXセットの一部five-- メモリ内のランダムスロット。 int型星のポインタが等しい xのアドレスに、右? int型のスターポインタが作成されます このブロックは、それがポインタを呼び出し、 xのアドレスに割り当てます。 私はアンパサンドでひどいよ。 今、私たちは、私たちは言うことが何であるかをやっている [OK]を、私たちのポインタを間接参照。 だから我々は我々のポインタに何があるかは、[OK]を行く? それはアンパサンドXの。 アンパサンドxに移動し、それを再割り当てする。 だから今、アンパサンドxは35になるだろう。 だから、基本的に、あなたがいるとき デリファレンス、[OK]を行く。 あなたが描くことになるだろう このような絵。 あなたが描くことになるだろう それがどこにあるの上に矢印を。 だから、メモリ内のこのスロットに移動し、いずれか 私にその値を返す、またはそれを変える。 この場合、我々はこの時だから 値は、我々はそれが35であることが代入しています。 最後のに対して 1、あなたが気づけば、私たちは 何であったかの割り当てられた 何か他にここで。 そこで、彼らはこの素晴らしいテーブルがあります。 それはそんなに悪くはありません。 君たちはそれに取り組んでいます。 私は、ボード上でそれを引き出すつもりだ。 私たちは、[OK]を、それを一緒に記入するつもりですか? だから、いくつかの論文、グラブをつかむ パートナーは、作業を開始する。 私は取得するつもりだ チョークの大きな作品。 それは多くのことになるだろうから。 [OK]をクリックします。 PROFESSOR:OK。 それでは最初の行から始めましょう。 私たちはあなたたち、その後、そこから始めましょう おそらくいくつかのより多くを介して動作することができます。 [OK]をクリックします。 B回Cを等しいので、何ですか? それは私が約束する、トリックの質問ではありません。 学生:4〜5倍。 PROFESSOR:4〜5倍。 20。 だから、bは何ですか? 学生:4。 PROFESSOR:とC? 学生:5。 PROFESSOR:5。 その後、これはちょうどしようとしている 、アンパサンドbをアンパサンドも、 アンパサンドC、右? 悪いことではありません。 それは十分に簡単です。 [OK]をクリックします。 次の1だから。 Aは場合に、時刻Cに等しい 誰もがその不慣れだった。 おなじみの誰もがある 時代とともに等しい? [OK]を、これはすべてこれですmeans-- のための速記は、時刻Cに等しい。 また、部門とそれを行うことができ、 を加えて、減算した。 あなたは、等号を行うことができ、またはプラスは、cに等しい プラスC、同等のマイナスに等しい意味 cがマイナスCに等しいだろう。 それはちょうど糖衣構文です。 そこで、この場合には、aはに等しい 時間cは、私たちに何を与えるだろう? ここでも、いないトリックの質問。 学生:100。 PROFESSOR:100。 何かが変わるのでしょうか? いいえ。 たぶん私は最終的に取得します 私のアンパサンドでより良い。 学生:[OK]を、申し訳ありませんが、どのように100を取得したのですか? PROFESSOR:OK。 そうに等しい 時間cは、そう時間cを。 学生:ああ、あなたが使用している previous--用 PROFESSOR:はい。 したがって、これらは、私たちの最新の値です。 これらはあなたがどうあるべきかである 私たちは下に移動するように使用して、[OK]をクリックします。 だから、bは右、唯一の変化とは? それでは、他のすべてに記入してみましょう。 B.どのようなbがあることを行っている? であること、又はではない。 だから、これは何をしているのですか? スターPAは何をしているのですか? 学生:コードPAの場所へ。 学生:いいえ、全くありません。 だから、これはdのリファレンスです。 学生:だからbはPAの利き値です。 PROFESSOR:うん、​​そうPAがある のアドレスは、右? だから、ある場所に行くと言っています 格納されているし、それに、その値を与える。 だから、bは何ですか? 学生:100。 PROFESSOR:100。 パーフェクト。 [OK]を、ので、pcは変えているものです。 他のすべてが同じまま。 どのようなPCがあることを行っている? 単純な代入。 PcはPAに等しく、PAは何ですか? 学生は:アンパサンド。 PROFESSOR:パーフェクト。 今、私たちは興味深い取得している。 [OK]を、のこの1つを打破しましょう​​。 それだから、まず、B時間cの何 この1の簡単な部分、右? B回C is-- 学生:500。 PROFESSOR:うん、​​そう この1は何をやっている、 それのスターPBあれば、何を変えるのか? 学生:the--の新 PROFESSOR:Bの中身は? 学生:宇宙には何が そのPBはを指している。 PROFESSOR:Pbがto--指している 学生:B. PROFESSOR:B.だからのみ 事の変化は、B、権利である。 そこでB倍cを、500。 だから、今どのような変更だ。 涼しい。 ラブリー。 君たちは素晴らしいやっている。 すべての権利、これを破壊する。 Cは右、変化している? だから我々は他のすべてに記入することができます。 見てみましょう。 [OK]をクリックします。 我々は、cがあることを行っていることを知っている 2つの数の積は、右? しかしどのような2つの数字? 学生:AとC? PROFESSOR:だからである 最初の1のための権利。 だから我々は、右のページを参照してdをしている? への点Pを、私たちは知っている これは100倍ものになるだろう? へのPCポイントを何回? を指す。 だから、100回100が10,000です。 それは理にかなっていますか? 涼しい。 ホームストレッチ、みんな、最後の行。 [OK]をクリックします。 ここで何を変えるのか? 学生:A. PROFESSOR:A.パーフェクトなので、 他のすべてが同じ滞在することができます。 [OK]をクリックします。 そして、何でしょうか? だから、それは何回ですか? これは星のPBである。 だからスターPBは、ここにある意味 PB、PB点がBに。 学生:500。 PROFESSOR:500。 だから我々は500回100を持っている。 その50,000です。 やれやれ! その時に見てください。 学生:なぜ私たちは持っている last--用&C PROFESSOR:申し訳ありません。 学生:ああ、[OK]をクリックします。 PROFESSOR:私の悪い。 書き込みがたくさん。 みんな良い? 右、悪くない? ほんの少しかかります 一方、スルー動作するように。 あなたはそれを打破した場合、 何各部分を理解する としてto--言及している すべてにそれはだ、 少しにそれを打破yes-- その後の問題と再結合し、 そしてあなたはいくつかの素晴らしいものを行うことができます。 そこに答えがあるが、我々はそれをした。 ポインタ演算。 ああ。 私の手は、すべてのチョークのようです。 そのように加算または減算 int型は、ポインタを調整 ポインタの型のサイズによって。 どのようにすべてのタイプのを忘れないでください 異なるサイズを持って? だから、doubleまたはlong longのようなものです 8とint型は4ですが、charが1である。 だから、あなたが何をしたいか 覚えて一つのことをis-- あなただけではどのくらいです ポインタ値は、実際に変化 に依存することになる ポインタの種類がある。 これで良い皆? 私はそれを消去することができますか? 我々は良いしている? 恐ろしい。 だから我々はいくつかのポインタを持っている場合 これはbe--しようとしているthat--私は今 それint型のポインタをするつもり。 それは、これを格納します。 あなたは、ポインタを言うとしたら プラスワン、それは何をする何が起こっているか それが更新するために起こっているされている int型のサイズによって、それ それはだから ポインタの種類がある。 Cでは、すべてがある 非常に厳しいと調整。 int型のポインタはによって更新しようとしている intはかかるだろうスペースの量。 int型は4バイトです。 だから、これはどのようにを回すでしょうか? あなたはちょうどこの上に4を追加している。 今すぐあなたのポインタがOK be--でしょう。 だから、char型だった私たちは、ポインタを行った場合 プラスワン、それは今何でしょう? それは我々をふりstarted--場合 今はそれが0x08にだstarted--。 それでは、これがあったとしましょう char型のポインタ、そして我々は1を追加しました。 それはに何を変更するのでしょうか? charが何バイトある? 聴衆:One。 SPEAKER 1:ワン。 聴衆:だから0x09の。 SPEAKER 1:だからそれは9になります。 だから何かが覚えておくべき。 あなたが1を追加するちょうどその時、そうではありません それはシャアない限り、1を加える。 それはどのように多くの追加だ 、それはタイプバイト 我々が持っている理由である ここまでこの方程式。 だから、int型倍の大きさだ ポインタの種類。 だから我々はここでの例を持っている。 yが、その値、を0x4に割り当てられていた 我々は、Yやっプラス1に等しいとき。 しかも、それには何が Xでは、変更されません。 何の変更を行うことは、Yに何があるかである。 y方向に格納されたアドレスが4で更新 4バイトがint型であるので、 そしてそれはint型のポインタです。 わかりました。 だから今、私たちは別の練習を持っている。 そこで問題が印刷されますものです。 任意のアイデア? 聴衆:数 幸せな猫の文字? SPEAKER 1:その通り。 だからあなたの文字列で好きです。 誰もがそれを取得していますか? 我々はそれを歩くしたいですか? [OK]、[はい。 だから私たちは私が持っているものhere-- このようなので、はるかに。 私がする必要はありません [聞こえない]途方もなく。 だから我々はここで我々の文字列、幸せな猫を持っている。 ラブリー。 我々はいくつかのカウンターを持っている 我々を追跡している。 だから我々は、いくつかのchar *ポインタを持っている そのちょうどSTRに等しく設定される。 これが何をやっていると、それはだです いくつかのポインタを割り当てる あなたの文字列の先頭に。 私は確信しているので、それとして 講演で言及した、 我々は、この君たち与えてくれた 文字列と呼ばれるデータ型。 しかし、実際に文字列はちょうどです 配列はchar *型のようにof--。 これは、文字の束へのポインタだ メモリ内に連続していること。 だから、これはちょうどそれを設定します 任意の文字列に等しい ここで識別 その最初の文字がある。 だから、これはいくつかのポイントを設定されている 文字列の先頭に等しい。 誰もそこに良い? 涼しい。 だから、これは私たちのポインタを逆参照される。 だから、実際に起こっている ここで私たちにいくつかの値を与え、 私たちが話している私たちの文字列中。 そして、我々は限り、言っている それがヌルターミネータではありません。 だから、あなたが得るまで続ける 文字列の最後に。 1によってあなたのポインターを更新します。 だから、rは、それは実際に1によって更新されます 毎回これがcharであるため、 char *を。 だから、通過になるだろう。 これは、更新するために起こっている。 これが実行されますので、初めて、 それは時間でここになるだろう。 これは、更新するために起こっている。 それはAでしょう。 それはとても上などのp、yのこと、とあります。 我々はカウンターを更新します。 それが最後に到達すると、それ ちょうどそれが得だどこまで印刷されます。 はい。 聴衆:だからそれはカウント 1としてのスペース、右? [OK]をクリックします。 SPEAKER 1:そう思う。 question--ということです 読者:[聞こえない]。 SPEAKER 1:いいえ心配。 これは、私はそれを行う。 すべての権利なので、一つのこと、私 理解してアレイを用いていることである、 あなたはまた、としてそれを扱うことができます ポインタの配列はただなので、 メモリの連続スポット。 だから、それを同じように扱うことができます。 あなたはそれらを操作することができます ポインタを持つ、あまりにも。 だからではなく、この中で、やって 場合、類似の事 アレイ0が1に等しいだろう。 しかし、同じようにその 文字列が決定される の開始によって、 その最初の文字がある、 配列はによって決定されます ここで、その最初の要素がある。 私たちが知っているので、我々はしている 保証された、これらのことを 連続になるだろうしている メモリのブロック。 つまり、私たちはこれを行うことを可能にするものだ。 我々は、彼らが連続している知っている メモリのブロック。 だから、この場合には、逆参照することにより を教えてくれるだけで、アレイ、 [OK]を、開始に行く ここにあるあなたの配列。 だから、1にそれが等しくなるように設定することができます。 そして、この場合には、どのようなお使いのアレイ タイプは、1によってそれを更新するときに、ある、 それはちょうど更新のようなものだ それ次のインデックスへ。 あなたが行うことができますので、 お使いのアレイに何があるか知っている。 だから、どのくらいまで知っている あなたのポインタを更新することで、 どのアドレスそうにそれを更新するために あなたは次のスロットにいること。 だから、これは単に別の方法です の配列0が1に等しい書き込み、 アレイ1は2、配列に等しい ブラケット2は3に等しい。 それはそれについて考えるちょうど別の方法です。 彼らは連続しているので メモリ内のブロック、 あなたはどちらかそれらを参照することができます アレイによるnotation-- これ個人的に私 easier--見つける多分 あなたはそれを操作する必要がある 厳密にメモリアドレスによって。 そして、これはあなたがそれを行うだろう方法です。 種類等のより あなたができるクールなもの あなたがしているそうでないかもしれない何か対 実際に実装する予定。 私は61でそれを使用しています。 君たちはおそらく必要はありません あまりそれを心配する。 しかし、もし興味があるなら、 来年61を取る。 我々は、ホームストレッチの連中にしている。 私が知っている、それは長いです。 動的メモリAllocation-- 私たちはそのいずれかを知っている 我々は中に話し物事の 一緒に私たちの最初のセクション、 我々はスワップを見て それがあった機能 私たちの主な機能の範囲外。 そして、我々は、これらの値を渡した それが効果的にコピーしていた。 一度完成したスワップ 実行、それだけのスタックを残しました。 覚えておいて、私たちは持っている スワップ用のフレームをスタック。 それが出て、それらの 値がそれと一緒に出国。 そして、彼らはなくなっていた。 私たちは何もできなかった 彼らと私たちは悲しいでした 我々は値を交換することはできませんので。 しかし、私は、あなたを述べたように、C、と メモリ上に多くの電力を持っている。 だから、何ができるかのことができている ここでヒープ上に物事を割り当てる それがされるまでそこに滞在します あなたがそうでなければ、それらを教えてください。 彼らは良い子供のようだ。 彼らはそこに滞在。 彼らは放置しないでください。 あなたが整うまで、彼らはそこに滞在します のように、[OK]を、あなたは離れて行くことができます。 スタック上の物事のに対し、who-- 彼らはいたずらな子供のようだ。 お好きな時に彼らはただ逃げるよ そこに、その後、彼らは消えています。 あなたはそれらを取り戻すことはできません。 だから我々はするつもりだis--ヒープ これ、mallocとfreeの話 私はあなたたちと確信している 講演での話を聞いた。 そして、それは基本的には方法です 非常に永続的なデータを持っている。 だから、データを保持することができます 周りに限り、あなたが望むように。 MHM。 読者:あなたは、ヒープを定義し、スタックすることはできますか? 彼らは物事を置くための場所が好きですか? SPEAKER 1:だから、彼らはしている 基本的に彼らがしているjust-- 我々だけでメモリを参照する方法です。 だから、ヒープはちょうどどこ置きされている メモリが動的に割り当てられ、 スタックが指し、一方、 スタックフレームより より中心であること 実際に実行されている機能。 あなたは本当にコントロールを持っていません。 大きな違いは、あなたがコントロールを持って あなたがしたい場合は、ヒープオーバー。 あなたは、スタック上で少なく制御することができます。 スタックに依存 実行されている機能は、 そして順序は、それらは 実行して、物事がどのように返されます。 ヒープを持つのに対し、として 私たちは、あなたが言うことができ、表示されます [OK]を、私は、この値になりたい 周りにまで、私はそうでないことを伝える。 あなたがそれを取り除くために許可されていません。 あなたはそれを上書きすることができていない。 あなたの周りそれを維持するつもりだ 限り、私はあなたを伝えるようにするため。 あなたは、ヒープ内のボスであることを得る stack--一方、多分あなたなら のようなあなたのようにfinagle あなたが上司であることができる。 しかしかなり。 そして、それは本当にただのメモリです。 それはちょうど、異なる方法だ メモリを参照する。 涼しい。 それとだから、どのように あなたの記憶を制御します。 それは、malloc関数とそのだ あなたが使用するために取得するつもりだ。 だから、それだけで短いです メモリ割り当てのために。 つまり、それがすべてです。 他のクールの束があります 最後にはallocを持つ関数、 そしてそれらは異なるもののために立っている。 だから、あなたが必要とするストレージを必要とするとき ので、あなたの現在の機能を長持ちする 時現在のもの この関数は、逃げる あなたはまだあなたのデータを持っている あなたはmalloc関数を使用したい、そこから得た。 つまり、ヒープ上でそれを初期化します。 等を私は言ったとキープ と言って、あなたはそれをそこにしておこう あなたがそうでなければ、それを指示するまで、 それここで重要なことです。 だから、一つのことに気づく、とする それは、典型的には、本当に重要です これははsizeofということです 使用する超便利です タイプに応じため 機械のあなたが実行している、 それは、様々な量を有することができる それが取るのメモリ。 だから、いつものサイズを使用したい あなたがマシン依存じゃないこと、 そのため、あなたのコードでしょう 任意のマシン上で実行する。 そして、それはほんの一部だ 良いコードを書く。 それは一台のマシン上で動作する場合、 他のものではなく、任意の、 あなたのプログラムはどのように役立ちました? だから、あなたは常にしたい 確認してくださいとはsizeofを使用しています。 聴衆:だから、のようなものです 10インチのサイズ[聞こえない]? SPEAKER 1:これは10 intのサイズです。 うん。 だから、intのサイズが返されます 1 INTはどのくらいかかりますか。 またはcharのサイズは、どのように 多くは1 char型のテイクを行います。 その後どのように多くのブロック そのことをあなたがしたいですか? したがって、この場合には、何かをしたい 私たちは10整数を格納できること。 そして、それは関係なく動作します クールです機械の。 だから、何バイトでしょう それは実際にあなたを与える? クイック数学。 聴衆:40。 SPEAKER 1:40。 正確に。 だから、別の大きなもの。 ポインタやmalloc関数はnullを返すことができます。 だからもう一度、いつもにチェック それがnullを返したかどうかを確認 あなたは試してみて、それで何かを行う前に。 あなたは試してみて、間接参照した場合 今、このポインタは、 それだけでセグメンテーションフォールトになるだろう あなたが行ってみましたので、 あなたが持っているべきではないときはnullタッチします。 だから、常にnullをチェック。 ここでも、すべてあなたが行うことができます。 これは、nullを返すことがあります。 あなたはどちらかなら、それはnullを返します 宇宙の外、または何らかの理由で それはいくつかのメモリのバグに遭遇した。 それは時々ちょうどnullを返します。 だから、あなたはそれをチェックする必要があります。 つまり、すべてのこのスライドが言っているのです。 そして、我々が持っているもの ここに自由への呼び出しがある。 だから、同じようにあなたの場合、その あなたがファイルを閉じる必要がありますファイルを開き、 あなたのmallocメモリであれば、あなた あなたはそのメモリを解放しなければなりません。 そして君たちは取得します 本当にクールなものを行うため。 そして、あなたがに実行できるプログラムがあります あなたが今までメモリをリークしているかどうかを確認します。 しかし、あなたはメモリリークが発生する必要はありません。 それは本当に残念だ。 ちょうど台無しに物事。 それはちょうど、プログラミングのように行うことが残念だ 設計効率のための賢明な。 しかし、それはまた、単にようなものだ お使いのコンピュータのための悪い。 だから自由に物事 あなたはそれらををmallocとき。 君たちはここに対称性を参照してください。 スーパーシンプル。 それからちょうど自由 どのようなあなたのポインタ、 どのような名前の あなたのポインタがあり、それ あなたのためにそれを解放するの世話をします。 涼しい。 その後、我々はこれを持っている。 だから我々はちょうどするつもりだ このプログラムの中を歩く。 その後君たちが行われている。 だから、[聞こえない]ちょうどメイン。 だから我々はいくつかのint型*ポイン​​タを持っている。 だから我々は、ポインタを持っている それはint型を保持するために起こっている。 そして、どのように多くのintそれが保持​​するために起こっている? ちょうど1。 int型のサイズ。 私たちは、かどうかを確認してください ポインタがnullであるため 我々は何もしないと言いたいです。 それは悪いです。 だから我々は外にいくつかのエラーを印刷する メモリ、最も頻繁に1が返さ 君たちと使用されている。 そして、我々は、我々は、ここにある 私たちのポインタを間接参照。 だから、私たちが保存するつもりだ意味 私たちに与えられた場所で何か。 int型*ポイン​​タ、malloc関数、返す それがこれを取っておく場所のアドレス あなたのためのメモリ。 だから、基本的にはだ あなたがいる場合like--与える の束を考える 近所の住宅 あなたが入れたいこと malloc関数、であなたの家具 OKのようなものです、あなたが得る 家3に移動します。 そして、それはあなたができます 家3のアドレス。 だから、この、今、この ポインタはアドレスを格納する、 あなたの家のアドレスを格納する。 * PTR手段、[OK]を、私は自分の家にいる。 涼しい。 私はいくつかの整数を取得する必要があります。 だから、誰かのために求めている 今、あなたの家具を得た。 だから、いくつかのint型を取得します。 そして、それはあなたのポインタに入れます それはどこを指しています。 そして、それだけでプリント アウト、あなたがどこに入った。 そして再び、参照。 だから、これはあなたがこのに行ってきましたようなものです アドレスとあなたがそこにあったものを見た。 クール? そしてもちろん、私たちは私たちのポインタを解放します。 あなたのポインタを解放することを忘れないでください。 ヌルをチェックすることを忘れないでください。 あなたのポインタを解放することを忘れないでください。 あなたは覚えているから二つのことを持っている これは、またはあなたが覚えておくべきこと。 はい。 読者:[聞こえない]のもの そのような、のchar * sを。 どのように我々は、これらの自由は決して来ない? SPEAKER 1:フム? 読者:文字列のようなものがありますか? あなたが文字列であると述べ ただのchar * sのような、右? では、なぜ私たちは、文字列を解放しませんか? SPEAKER 1:あなただけへ 自由なあなたがmallocingしている場合。 聴衆:ああ、あなたがmallocingしている場合。 SPEAKER 1:だからのmalloc そして自由な、2つのことである あなたはいつも一緒に持っているべきであること。 fはオープンで、f近い、二つのこと あなたが一緒に持っている必要があります。 両方のこれらのケースでは、nullかどうかを確認します。 はい。 聴衆:だから自由はただである 何か他のものを許可する 後にそこに格納される このプログラムは、それを使用しています? SPEAKER 1:それはちょうど言って、 [OK]を、私はこれで終わりだ。 あなたはそれを周りに維持する必要はありません。 そうでない場合は、お使いのコンピュータの意志 ちょうどそこにそれを試しておくのが好きです。 そして、あなたはそれが実行can't-- 後でメモリの問題に。 あなたは、常にので、それを解放したい それは[OK]を、私は、お使いのコンピュータに伝えます このメモリのスポットで行わ。 あなたはそれを後ろ持つことができます 私のために後で使用します。 クール? はい。 読者:だから我々はちょうど%dを使用 、戻って来て、二重理由 または、なぜ[聞こえない] is--。 読者:あなたは私は%を使用できますか? SPEAKER 1:あなたは%iを使用することができます。 でも直前の質問? 先に行く。 読者:私はちょうど簡単な質問を持っている。 だから、PTR変数、that's-- のように、int型* ptrは=のmallocと、 それはちょうどそれがだと言っています memory--内の場所を指し示す SPEAKER 1:あなたは[聞こえない]たいですか? 読者:--thatはだ サイズはof--いや、それはOKです。 しかし、それは単に内の場所を指しています わずか4バイトのようなものだメモリ。 SPEAKER 1:右。 だから、int型の大きさは言うをmalloc [OK]を、私はオフに実行に行くつもりです、 あなたのための4バイトのメモリを見つける。 それはその4を見つけると メモリのバイト、それは あなたの住所をバック与える それが始まるところの、 それが格納されているものだ ポインタ、またはPTRで。 グッド。 君たちは、ほとんど未満の困惑した表情 私はポインタの話人々、 ので、私は今、かなり良い感じている。 わかりました。 いつものように、あなたたちはすべてを持っている必要があります 今ではあなたのpset2グレードを頂いております。 私が知っているいくつかのグラグラがなされている それは式が有効ではない、と言う事 か何か。 あなたは、ことのすべてを取得している場合 あなたの成績は私の側に有効です。 だから私はあなたを送信することができます あなたの等級のスクリーンショット。 ちょうど私が同様にあなたがしているかどうかを知りましょう どのグレードか何かが足りない 意味をなさないしていないようです。 私に来る。 私はあなたのスーパー誇りにしてきた 連中はすでにので、それを維持する。 そして、あなたの週の十分に休息を持っている。 私はいくつかを見るだろうと確信して あなたのオフィスの時間で。