1 00:00:00,000 --> 00:00:03,395 >> [音楽再生] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J.マラン:これはのようなものです 新入生セミナー今日。 4 00:00:13,280 --> 00:00:14,060 OK。 5 00:00:14,060 --> 00:00:15,024 アウトとても雨。 6 00:00:15,024 --> 00:00:17,690 これは、水曜日に発生する傾向があり、 しかし、すべてのより多くの機会 7 00:00:17,690 --> 00:00:18,700 質問のための今日。 8 00:00:18,700 --> 00:00:22,210 それでは、実際に始めてみましょう 一瞬でフィルムと。 9 00:00:22,210 --> 00:00:24,560 しかし、我々はいつものように盛大に開始します。 10 00:00:24,560 --> 00:00:28,000 >> これはCS50であり、そしてこの 4週の終わりです。 11 00:00:28,000 --> 00:00:30,820 だから、あなたが今まで見てきた場合 テレビや映画の特徴 12 00:00:30,820 --> 00:00:34,690 一部のコンピュータの専門家がありますし、 警察、またはFBI、またはいくつかの代理店 13 00:00:34,690 --> 00:00:36,930 いくつかをキャッチしようとしています 敵、さて、あなたはしました 14 00:00:36,930 --> 00:00:40,850 おそらく「強化」という表現を聞きました それによって、その技術者は何とか 15 00:00:40,850 --> 00:00:44,750 魔法無限に拡大されます 犯罪者を見てはるかに 16 00:00:44,750 --> 00:00:48,640 同一またはナンバープレートの番号 ミラーのさえきらめきで 17 00:00:48,640 --> 00:00:50,390 または誰かの目の輝き。 18 00:00:50,390 --> 00:00:55,196 だから確かに、のを見てみましょう ハリウッドから数などのシーン。 19 00:00:55,196 --> 00:00:55,862 [ビデオ再生] 20 00:00:55,862 --> 00:00:59,243 -OK、今のあなたをよく見てもらいましょう。 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -持て。 23 00:01:07,415 --> 00:01:08,267 そのバックを実行します。 24 00:01:08,267 --> 00:01:09,121 >> -ちょっと待って。 25 00:01:09,121 --> 00:01:11,300 右移動します。 26 00:01:11,300 --> 00:01:12,209 >> -There、それを凍結します。 27 00:01:12,209 --> 00:01:12,750 -全画面表示。 28 00:01:12,750 --> 00:01:13,558 -OK、それを凍結します。 29 00:01:13,558 --> 00:01:14,820 その上に-Tighten、あなただろうか? 30 00:01:14,820 --> 00:01:16,530 その上で - ベクトル 後輪によって男。 31 00:01:16,530 --> 00:01:19,400 右ここでこの場でで-Zoom。 32 00:01:19,400 --> 00:01:22,846 適切な機器、画像-with 拡大して先鋭化することができます。 33 00:01:22,846 --> 00:01:24,065 -あれは何でしょう? 34 00:01:24,065 --> 00:01:25,600 - それは、強化プログラムです。 35 00:01:25,600 --> 00:01:26,860 それまでの任意の明確なあなたが-CAN? 36 00:01:26,860 --> 00:01:27,890 -知りません。 37 00:01:27,890 --> 00:01:29,050 のは、それを強化しましょう​​。 38 00:01:29,050 --> 00:01:31,575 >> セクションA6 -Enhance。 39 00:01:31,575 --> 00:01:33,642 >> -Iは、詳細を増強しました and--私はそこだと思います 40 00:01:33,642 --> 00:01:35,433 向上させるのに十分な、 私の画面にそれを解放。 41 00:01:35,433 --> 00:01:37,080 -Iは、彼女の目の中の反射を強化しました。 42 00:01:37,080 --> 00:01:38,830 >> 介してこれを実行するのを-LEt ビデオエンハンスメント。 43 00:01:38,830 --> 00:01:40,100 -Edgar、あなたはこれを強化することができますか? 44 00:01:40,100 --> 00:01:41,875 >> -待って。 45 00:01:41,875 --> 00:01:44,010 >> この反射に取り組んでき-I've。 46 00:01:44,010 --> 00:01:44,995 >> -Someoneの反射。 47 00:01:44,995 --> 00:01:45,495 -Reflection。 48 00:01:45,495 --> 00:01:47,399 人間の顔の反射が-Thereです。 49 00:01:47,399 --> 00:01:48,065 -The反射。 50 00:01:48,065 --> 00:01:48,981 反射が-Thereです。 51 00:01:48,981 --> 00:01:50,600 鏡にで-Zoom。 52 00:01:50,600 --> 00:01:52,712 - あなたは反射を見ることができます。 53 00:01:52,712 --> 00:01:54,350 あなたはここからイメージを高める-CAN? 54 00:01:54,350 --> 00:01:55,370 あなたはここに彼を高める-CAN? 55 00:01:55,370 --> 00:01:56,210 あなたはそれを強化-CAN? 56 00:01:56,210 --> 00:01:56,900 あなたはそれを向上させることができますか? 57 00:01:56,900 --> 00:01:57,870 >> 我々はこれを強化する-CAN? 58 00:01:57,870 --> 00:01:58,717 >> あなたはそれを強化-CAN? 59 00:01:58,717 --> 00:02:00,050 第二に-hold、私が高めます。 60 00:02:00,050 --> 00:02:00,924 ドアに中-Zoom。 61 00:02:00,924 --> 00:02:01,700 10倍と。 62 00:02:01,700 --> 00:02:02,586 -Zoom。 63 00:02:02,586 --> 00:02:03,490 で-move。 64 00:02:03,490 --> 00:02:03,990 -もっと。 65 00:02:03,990 --> 00:02:04,690 -wait、停止します。 66 00:02:04,690 --> 00:02:05,190 -停止。 67 00:02:05,190 --> 00:02:05,970 それを-pause。 68 00:02:05,970 --> 00:02:09,460 私たちに75度を-rotate 垂直のまわりでお願いします。 69 00:02:09,460 --> 00:02:10,962 -停止。 70 00:02:10,962 --> 00:02:14,040 部分に戻ります 再び、ドアについて。 71 00:02:14,040 --> 00:02:15,860 >> ビットマップすることができ、画像増強剤を-Got? 72 00:02:15,860 --> 00:02:18,776 >> -Hey、多分私達は、プラディープを使用することができます ウィンドウに表示するにはセン方法。 73 00:02:18,776 --> 00:02:20,372 - このソフトウェアは、最先端の技術です。 74 00:02:20,372 --> 00:02:21,845 >> -The固有値がオフになっています。 75 00:02:21,845 --> 00:02:24,300 >> 右-with algorithm--の組み合わせ 76 00:02:24,300 --> 00:02:26,755 >> -HEの撮影排除 次のレベルへのアルゴリズム、 77 00:02:26,755 --> 00:02:28,730 私はにそれらを使用することができます この写真を高めます。 78 00:02:28,730 --> 00:02:31,286 >> 上-lockおよびz軸を拡大。 79 00:02:31,286 --> 00:02:32,560 >> -Enhance。 80 00:02:32,560 --> 00:02:33,100 >> -Enhance。 81 00:02:33,100 --> 00:02:33,600 >> -Enhance。 82 00:02:33,600 --> 00:02:34,960 -freezeと高め。 83 00:02:34,960 --> 00:02:37,180 >> [END再生] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J.マラン:すべての権利なので、 それらのすべては、実際に言葉です。 85 00:02:41,160 --> 00:02:44,450 彼らはただでつなぎ合わせています 実際には賢明ではない方法。 86 00:02:44,450 --> 00:02:48,400 そして、実際には、CS50そのようなコース テレビや映画の多くを台無しにする傾向があります 87 00:02:48,400 --> 00:02:48,900 あなたのために。 88 00:02:48,900 --> 00:02:52,330 ときに、それらのコンピュータの専門家ので、 用語をオフ威嚇と言っています 89 00:02:52,330 --> 00:02:56,860 以下のような派手なもの 固有ベクトル、及びz軸、 90 00:02:56,860 --> 00:02:59,572 および他の任意の数 実際にはより技術的な用語、 91 00:02:59,572 --> 00:03:02,030 彼らは本当にちょうど糸います 言葉一緒にあまりにも頻繁に。 92 00:03:02,030 --> 00:03:05,020 私たちの希望の一つがそれであることです、 コー​​スを取るの副作用として 93 00:03:05,020 --> 00:03:08,245 このように、より多くの人々ます 世界は実際に比較検討することができます 94 00:03:08,245 --> 00:03:12,040 ちょうどほんの少し影響を与えます これらの膜の品質と精度? 95 00:03:12,040 --> 00:03:14,350 >> 実際には、のは、現実を見てみましょう。 96 00:03:14,350 --> 00:03:18,070 だからここのスタッフの写真です メアリー、私たちの教育の仲間の一つ。 97 00:03:18,070 --> 00:03:20,050 そして、彼女があるとし 何かの疑いがあります。 98 00:03:20,050 --> 00:03:23,730 そして、まだ、かすかあります 彼女の目の中の証拠のいくつかの作品は、 99 00:03:23,730 --> 00:03:25,480 または彼女の眼鏡の反射インチ 100 00:03:25,480 --> 00:03:30,760 さて、私たちは映画のように正確に行う場合 私たちはズームインして「強化」ここで、提案、 101 00:03:30,760 --> 00:03:34,080 これは、どのくらいの情報であり、 メアリーの顔であります 102 00:03:34,080 --> 00:03:36,795 あなたはイメージをキャプチャするとき その元の解像度を持ちます。 103 00:03:36,795 --> 00:03:39,120 >> そして、実際には、あなたがこれらのドットを見ることができます。 104 00:03:39,120 --> 00:03:41,900 そして、これらは何です 画素P-I-X-E-L-Sと呼ばれ、 105 00:03:41,900 --> 00:03:45,740 これは典型的にはちょうど正方形であります すなわち、画像を構成する点です。 106 00:03:45,740 --> 00:03:49,200 そして、戻って一日で、実際にあっても 今日のLEDテレビの一部で今日 107 00:03:49,200 --> 00:03:51,950 あなたが持っている場合は、液晶テレビ、 お部屋や自宅で1、 108 00:03:51,950 --> 00:03:55,100 あなたが上がる場合は、それに超近いし、 それはやや古いテレビの場合は特に、 109 00:03:55,100 --> 00:03:58,760 あなたは多分、これらのドットを見ることができます それは、画像を構成するものです。 110 00:03:58,760 --> 00:04:00,980 >> そして何よりはありません これ以上の情報。 111 00:04:00,980 --> 00:04:05,400 私たちは、の意味で、「強化する」ことができ 超えると、ソートのものを平滑化 112 00:04:05,400 --> 00:04:09,040 何の種類のソートを推論 色は、メアリーの目の隣にあるべきです 113 00:04:09,040 --> 00:04:10,910 それは実際にそのようにピクセル化ではありませんように。 114 00:04:10,910 --> 00:04:14,510 しかし、私はそこに、ズームインし続ける場合 彼女の目の中の悪い男です。 115 00:04:14,510 --> 00:04:16,600 そのようなすべてのです 私たちが持っている情報。 116 00:04:16,600 --> 00:04:18,920 あなたが作成することはできません 無から情報。 117 00:04:18,920 --> 00:04:20,790 唯一の有限あります そこにビット数。 118 00:04:20,790 --> 00:04:22,873 >> 問題セット4、でそう あなたは機会を持っています 119 00:04:22,873 --> 00:04:24,580 世界のこの種で再生します。 120 00:04:24,580 --> 00:04:27,610 問題セット4では、見ていきます グラフィックス、およびフォレンジックの世界、 121 00:04:27,610 --> 00:04:30,870 実際にコードを書きます それが失われた画像を回復します。 122 00:04:30,870 --> 00:04:33,510 あなたはそのコードを書きます 既存のイメージを操作します 123 00:04:33,510 --> 00:04:36,120 そして最終的に何を理解します ボンネットの下に起こっています。 124 00:04:36,120 --> 00:04:38,540 >> そして、結局のところ、実際です すべてが複雑ではありません。 125 00:04:38,540 --> 00:04:41,320 たとえば、私たちがしたい場合 どこスマイリーフェイスを表します 126 00:04:41,320 --> 00:04:44,160 これらの黒画素と、 またはこれらの黒点、 127 00:04:44,160 --> 00:04:47,230 よく、我々は単純に表すことができ 彼らは、真のビットマップ。 128 00:04:47,230 --> 00:04:50,040 そして、あなたが今までと聞いていた場合 おそらく表現ビットマップ、 129 00:04:50,040 --> 00:04:52,330 それが今作るために開始します もう少し意味今日。 130 00:04:52,330 --> 00:04:53,580 >> 我々はすでにビットが何であるかを知っています。 131 00:04:53,580 --> 00:04:54,160 それは、0または1です。 132 00:04:54,160 --> 00:04:56,201 そしてマップがちょうど何かであります 一枚の紙のような 133 00:04:56,201 --> 00:04:59,180 それはあなたに指示を与え、持っています 多分x座標とy座標の格子。 134 00:04:59,180 --> 00:05:00,540 そこでここでは、ビットマップです。 135 00:05:00,540 --> 00:05:03,680 これは、ビットのマップです これにより1は明らかです 136 00:05:03,680 --> 00:05:07,857 白画素を表現します。また、 0は黒画素を表現しようとしています。 137 00:05:07,857 --> 00:05:09,440 しかし、我々は確かにそれを周りの反転ができます。 138 00:05:09,440 --> 00:05:11,648 それはそう本当に重要ではありません 我々は一貫している限り。 139 00:05:11,648 --> 00:05:15,570 そして、ここでは内部binary--で、どのように コンピュータのメモリ、あるいは内部 140 00:05:15,570 --> 00:05:18,160 ハード上のファイルの drive--あなたは格納することができます 141 00:05:18,160 --> 00:05:20,240 スマイリー顔画像の最も簡単な。 142 00:05:20,240 --> 00:05:23,990 しかし、我々は何をしている、もちろん、 この画像に欠けていますか? 143 00:05:23,990 --> 00:05:24,610 色、右? 144 00:05:24,610 --> 00:05:28,220 これは明白な次のステップですか 色でこれを改善するための強化。 145 00:05:28,220 --> 00:05:32,230 だから、残念ながら1つだけで ビットは、0または1、我々は色を表すことができます。 146 00:05:32,230 --> 00:05:36,100 すなわち赤、青、またはかもしれません 黒、または白、緑、またはピンク、 147 00:05:36,100 --> 00:05:37,420 または色のいずれかのペア。 148 00:05:37,420 --> 00:05:40,860 しかし、簡単にするため、我々はよ ちょうど黒と白を前提としています。 149 00:05:40,860 --> 00:05:45,930 >> だから論理的に私たちが必要とする場合に何をすべきか、我々 画像の色を実現したいですか? 150 00:05:45,930 --> 00:05:49,080 私たちは何をする必要がありますか? 151 00:05:49,080 --> 00:05:51,900 ここでの制限因子の場合と同様に 1ビットを使用すると、唯一できることです 152 00:05:51,900 --> 00:05:55,977 白、二つの状態、0または1を表します または黒、何をやりたいのですか? 153 00:05:55,977 --> 00:05:56,810 者:より多くのデータ。 154 00:05:56,810 --> 00:05:58,813 DAVID J.マラン:より多くのビット、 ええ、より多くのデータ、より多くのビット。 155 00:05:58,813 --> 00:06:01,440 そして、確かに、それは正確にどのようです カラー画像が表現されます。 156 00:06:01,440 --> 00:06:05,120 単一のビットを使用するのではなく、 各画素について0または1であり、各ドット 157 00:06:05,120 --> 00:06:06,170 あなただけの複数を使用しています。 158 00:06:06,170 --> 00:06:09,660 多分多分、より一般的に、8を使用 問題セットで、実際に24を使用し、 159 00:06:09,660 --> 00:06:13,300 4、あなたは、ファイルに再生されます 一般的に24ビットを使用する形式。 160 00:06:13,300 --> 00:06:15,430 >> しかし、あなたのほとんどはおそらくあります JPEGファイルに精通しています。 161 00:06:15,430 --> 00:06:17,460 あなたは今までに撮影した場合 お使いの携帯電話上の写真、 162 00:06:17,460 --> 00:06:20,360 またはアップロードまたは上で何かを見て フェイスブック、またはFlickrの、任意の数 163 00:06:20,360 --> 00:06:24,882 写真ベースのウェブサイトの、あなたはしました おそらく前のJPEG画像を見て。 164 00:06:24,882 --> 00:06:27,840 そして、それは結局のところ、これはファイルです 我々はPSET 4で使用するつもりフォーマット、 165 00:06:27,840 --> 00:06:30,340 それによって、あなたがしようとしています 画像を回復する必要が 166 00:06:30,340 --> 00:06:35,160 私が誤ってから削除したこと カメラ内の破損したメモリカード、 167 00:06:35,160 --> 00:06:35,800 あなたがする場合。 168 00:06:35,800 --> 00:06:38,490 >> そして、それは判明しているにもかかわらず JPEGはかなりsophisticated--です 169 00:06:38,490 --> 00:06:40,906 それははるかに、より洗練されたのです 黒と白のドットより 170 00:06:40,906 --> 00:06:44,480 ありますので、我々は、先ほど見ました 実際に空想のアルゴリズムこと 171 00:06:44,480 --> 00:06:47,410 そのように、JPEG圧縮に使用されています あなたは本当に素晴らしいを持つことができ、 172 00:06:47,410 --> 00:06:49,832 品質の画像が、使用して 比較的少数のビット。 173 00:06:49,832 --> 00:06:51,790 そして、我々は戻ってくるだろう 長い前に圧縮。 174 00:06:51,790 --> 00:06:56,280 これは最初のことが判明 JPEGで3バイトimage-- 175 00:06:56,280 --> 00:07:02,750 関係なく、あなたが写真を撮影したもの of--は値255、216、255です。 176 00:07:02,750 --> 00:07:05,990 >> 言い換えれば、あなただけの場合 ビットのパターンを参照してください、 177 00:07:05,990 --> 00:07:09,180 3としてここで表さ バイト、または24ビットは、合計します 178 00:07:09,180 --> 00:07:13,810 高い確率であなたはそれを推測することができます あなたは、この最初の三つのことを見ています 179 00:07:13,810 --> 00:07:15,230 JPEGのバイト。 180 00:07:15,230 --> 00:07:18,040 そして、これは知られています JPEGの署名として。 181 00:07:18,040 --> 00:07:20,540 ファイル形式の多く そこに開始する傾向があります 182 00:07:20,540 --> 00:07:23,735 0と1の特定のパターンで、 そのWindows、およびMac OS、およびiOSのように、 183 00:07:23,735 --> 00:07:28,272 Androidは、ファイルの種類を彼らが知っています いわゆるファイルに加えて、あります 184 00:07:28,272 --> 00:07:29,730 拡張子のファイルの多くが持っていること。 185 00:07:29,730 --> 00:07:32,590 あなたがの.jpgれている場合、それはです コンピュータに別の手がかり。 186 00:07:32,590 --> 00:07:35,310 >> それでは、今、これを見てみましょう もう少し技術的に。 187 00:07:35,310 --> 00:07:37,390 私たちは、小数点以下を知っています システムは、0〜9です。 188 00:07:37,390 --> 00:07:38,740 私たちは、バイナリが0と1であることを知っています。 189 00:07:38,740 --> 00:07:41,842 そして、あなたはPSETに戻ってと思われる場合 0、我々はあなたが持っていたと格闘、 190 00:07:41,842 --> 00:07:43,800 少し、何かのため 進と呼ばれます、 191 00:07:43,800 --> 00:07:47,320 あなたは16桁の数字を持っている場合は、 代わりに、10または2の代わりに。 192 00:07:47,320 --> 00:07:50,405 そして、それらの数字、慣例により、 0〜9、次にあります 193 00:07:50,405 --> 00:07:55,040 f、ここで、fは何を表しています ちょうど迅速正気10進数、 194 00:07:55,040 --> 00:07:56,640 チェック? 195 00:07:56,640 --> 00:07:57,610 だから、15。 196 00:07:57,610 --> 00:08:01,390 そして、ちょうどによって、10を表している必要があります 私が与えてくれた順序の性質。 197 00:08:01,390 --> 00:08:04,350 それはちょうど任意の慣例です、 しかし、それはかなり標準です。 198 00:08:04,350 --> 00:08:06,870 >> だから我々は、このパターンを見れば 3 bytes--レッツの 199 00:08:06,870 --> 00:08:09,620 ただでそれを見始めます どのように一致する方法 200 00:08:09,620 --> 00:08:12,450 一般的にコンピュータ科学者 見て、ファイルを考えます。 201 00:08:12,450 --> 00:08:15,580 あなたは確かに考えることができます 0内のファイル、と1、および小数点、 202 00:08:15,580 --> 00:08:19,340 実際には、我々はバイナリを使用する傾向があります またはより典型的にはhexadecimal-- 203 00:08:19,340 --> 00:08:20,760 バックPSET 0から。 204 00:08:20,760 --> 00:08:25,857 だから、私はその255、216、および255を提案してみましょう 0と1のちょうどこれらのパターンです。 205 00:08:25,857 --> 00:08:28,440 そして、あなたはあなたの場合は、これを確認することができます 0週から数学をやってみたいです。 206 00:08:28,440 --> 00:08:30,810 しかし、今のところ、ちょうどと仮定 これが実際に正しいこと。 207 00:08:30,810 --> 00:08:33,850 私は小数点以下3桁を書き換えました 3バイナリ値として数。 208 00:08:33,850 --> 00:08:36,100 今私は何をするつもりだものです ただ、いくつかの空白を追加し、 209 00:08:36,100 --> 00:08:37,266 ちょうど読みやすさのために。 210 00:08:37,266 --> 00:08:39,940 そして、通知は、私は行きますよ 物事を離れて移動します。 211 00:08:39,940 --> 00:08:43,090 だから前、後、前、後。 212 00:08:43,090 --> 00:08:46,180 私は他の興味深い何もしませんよ ちょうどそう物事を広げるより 213 00:08:46,180 --> 00:08:50,380 それは、8つの各セットに気付きます ビットは、現在の4ビットの二組です。 214 00:08:50,380 --> 00:08:54,920 これは、16進数のために便利です 特にファッショナブルです 215 00:08:54,920 --> 00:09:00,930 なぜなら、各進数0から F、またはより具体的には0〜15、 216 00:09:00,930 --> 00:09:03,430 表すことができます。 正確に4ビットで。 217 00:09:03,430 --> 00:09:07,960 言い換えれば、あなたの場合は16進数で 0を表現したい、それだけで0000ですが、 218 00:09:07,960 --> 00:09:08,780 4ゼロ。 219 00:09:08,780 --> 00:09:13,997 そして、あなたは15を表現したい場合は、 それは4ビットである、1111年です。 220 00:09:13,997 --> 00:09:16,080 そして、あなたは数学を行う場合には、 これは一の位である場合、 221 00:09:16,080 --> 00:09:18,210 これは、16Sの場所です それは与えるために起こっていますyou-- 222 00:09:18,210 --> 00:09:19,960 むしろそれが起こっています 申し訳ありませんto--、バイナリで、 223 00:09:19,960 --> 00:09:23,660 それは15あなたを与えるために起こっている、一の位、 補数場所、四つんばいとエイト場所。 224 00:09:23,660 --> 00:09:26,821 だから、私はそのことを提案してみましょう 左側の4ビットのセット 225 00:09:26,821 --> 00:09:28,070 我々は、Fを呼び出すために起こっているものです。 226 00:09:28,070 --> 00:09:30,110 それは最大の数あなたです 4ビットで表すことができます。 227 00:09:30,110 --> 00:09:33,300 そして、我々はすでに進から知っています、 fは16進数で最大の数字です。 228 00:09:33,300 --> 00:09:36,020 私たちは、そこに別のFを持って あそこより2。 229 00:09:36,020 --> 00:09:38,980 そして今のところ、ちょうど信仰​​を取ります 私は数学の権利を行っていること 230 00:09:38,980 --> 00:09:41,890 その左半分 これらのビットの、1101年、 231 00:09:41,890 --> 00:09:43,980 16進数でdと同じものです。 232 00:09:43,980 --> 00:09:46,490 そして右手、1000年には、わずか8です。 233 00:09:46,490 --> 00:09:48,140 >> そして、それは自分の見やすい、右? 234 00:09:48,140 --> 00:09:51,670 8 represents--は権利であります そのエイト場所の下に。 235 00:09:51,670 --> 00:09:56,040 だから我々はエイト列のいずれかを持っています そして、四つんばい、補数またはものに何もありません。 236 00:09:56,040 --> 00:09:59,830 だから今より従来、人間は傾向があります このような16進数を書くために、 237 00:09:59,830 --> 00:10:03,000 あなただけの、一緒にそれらをスキッシュ そして、あなたは0xでそれらを付けます。 238 00:10:03,000 --> 00:10:05,920 これは、以外の何を意味します human--への視覚的な手掛かり 239 00:10:05,920 --> 00:10:10,350 ここ進value--が来るので、 それは、そうでなければ明白ではないかもしれません。 240 00:10:10,350 --> 00:10:13,629 >> もの、最終的に、言うことです 0と1のパターン、 241 00:10:13,629 --> 00:10:16,170 または16進数のパターン あなたがしていることを同等に数字 242 00:10:16,170 --> 00:10:18,990 探して開始する予定 問題にセット4はthis--です 243 00:10:18,990 --> 00:10:22,120 問題セット4仕様が歩いていきます もっとdetail--このを通してあなた 244 00:10:22,120 --> 00:10:25,344 しかし、難解なの一種であるとして実現 これは、一見見えるかもしれません 245 00:10:25,344 --> 00:10:27,010 あなたはこのロットを見て開始するつもりです。 246 00:10:27,010 --> 00:10:30,320 そして実際に、でもGDBで、 我々は月曜日に導入デバッガ 247 00:10:30,320 --> 00:10:35,440 そして、ダンは、PSET 3に導入されて起こっています 多くの場合、あなたの16進数値を表示します 248 00:10:35,440 --> 00:10:39,910 彼らはよりになる傾向があるという理由だけで 10進数またはバイナリよりも、従来の 249 00:10:39,910 --> 00:10:41,157 コンピュータの世界です。 250 00:10:41,157 --> 00:10:42,490 それでは、コンテキストにこれを入れてみましょう。 251 00:10:42,490 --> 00:10:48,040 あなたの多くは、このを覚えているかもしれません 何から来たここで絵、? 252 00:10:48,040 --> 00:10:51,240 Vistaの場合は、そうであっても、以前より それは、Windows XPは、このデビューをしました。 253 00:10:51,240 --> 00:10:52,620 だから、これは美しい風景です。 254 00:10:52,620 --> 00:10:55,940 そして、実際には、あなたの周り突く場合online-- 私はそれはWikipediaの記事だと思います、 255 00:10:55,940 --> 00:11:00,110 ここで誰かが非常に驚くほど出て行きました 見つかった世界でこの場所を設定 256 00:11:00,110 --> 00:11:02,240 彼または彼女のカメラで 正確に右place-- 257 00:11:02,240 --> 00:11:06,510 これは本日、like--見えますが、 それは全く同じ設定です。 258 00:11:06,510 --> 00:11:10,060 この画像は、しかし、ファイル内にあります ビットマップ形式と呼ばれる、B-M-P。 259 00:11:10,060 --> 00:11:12,910 そして、我々はスーパーを取るつもりです それが何を意味するのかでチラッ。 260 00:11:12,910 --> 00:11:17,770 >> しかし、ビットマップは、ちょうど別の方法であります 代表画像は、まだ画素を用いて 261 00:11:17,770 --> 00:11:19,580 0と1で、最終的に。 262 00:11:19,580 --> 00:11:23,282 しかし、一目で、それは持っています もっと面白い署名 263 00:11:23,282 --> 00:11:24,490 ファイルの先頭に。 264 00:11:24,490 --> 00:11:26,670 それはちょうど3ではありません バイトは、かなりあります 265 00:11:26,670 --> 00:11:30,770 バイトのパターンの全体の束 それは意味が所定ました。 266 00:11:30,770 --> 00:11:34,490 例えば、どこかで ビットマップ画像の最初の数バイト 267 00:11:34,490 --> 00:11:37,440 の大きさになるだろう 画像、画像の幅、 268 00:11:37,440 --> 00:11:40,390 画像の高さなので、 便利なメタデータを、可能ならば。 269 00:11:40,390 --> 00:11:43,940 お役立ち情報Photoshopのこと または任意のグラフィックスは、あなたが使用しているプログラム 270 00:11:43,940 --> 00:11:45,180 実際に気にすることがあります。 271 00:11:45,180 --> 00:11:47,170 >> だから、もっとこの中に 問題は4を設定しますが、これを 272 00:11:47,170 --> 00:11:49,220 言うことだけです 一日の終わりに 273 00:11:49,220 --> 00:11:52,390 あなたが使用しているすべてのファイル形式 years-- Microsoft Wordファイルのために、 274 00:11:52,390 --> 00:11:55,820 数値ファイル、Excelファイル、 ファイル形式の任意の数 275 00:11:55,820 --> 00:11:57,770 それは、いくつかがあるかもしれません 既知のファイル拡張子 276 00:11:57,770 --> 00:12:00,130 フードの下にちょうど0と1です。 277 00:12:00,130 --> 00:12:02,970 そして、人間が決定しました 規則がありますか、 278 00:12:02,970 --> 00:12:08,340 何0と1のパターンを表します Wordは、Excelファイルに対するファイル 279 00:12:08,340 --> 00:12:10,322 他のファイル形式の任意の数の対。 280 00:12:10,322 --> 00:12:12,780 だから、PSET 4に、あなたが持っているでしょう それにプレイする機会。 281 00:12:12,780 --> 00:12:14,405 >> しかし、それは、構造体を持つことを意味します。 282 00:12:14,405 --> 00:12:18,012 これは今、実際に素敵なセグエです 唯一のカップルを持っているにC、 283 00:12:18,012 --> 00:12:20,220 その追加機能の 我々はまだ見ていません。 284 00:12:20,220 --> 00:12:24,230 それはかなり小さな言語との一つです Cについての素晴らしい機能は、構造体です。 285 00:12:24,230 --> 00:12:27,300 たとえば、あなたの場合 みましょうrepresent--したかったです 286 00:12:27,300 --> 00:12:33,690 あなたがその変数を持っていると思ったと言います いくつかのプログラムの学生を表します。 287 00:12:33,690 --> 00:12:37,330 たぶん、あなたはコースを書いていました 登録プログラム、またはコア買い物 288 00:12:37,330 --> 00:12:38,870 ツール、またはそのような何か。 289 00:12:38,870 --> 00:12:42,922 関連データの部分は何ですか 気になる生徒に? 290 00:12:42,922 --> 00:12:44,880 学生のようなものです どんな値で表現? 291 00:12:44,880 --> 00:12:45,732 うん? 292 00:12:45,732 --> 00:12:46,940 あなたは学生として名前を持っています。 293 00:12:46,940 --> 00:12:48,900 典型的な学生は、他に何がありますか? 294 00:12:48,900 --> 00:12:49,320 >> 聴衆:[聞こえません] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J.マラン:だから、申し訳ありません。 296 00:12:50,200 --> 00:12:50,660 >> 聴衆:年齢。 297 00:12:50,660 --> 00:12:52,980 >> DAVID J.マラン:年齢や 同等の誕生日、うん。 298 00:12:52,980 --> 00:12:53,557 ほかに何か? 299 00:12:53,557 --> 00:12:54,390 聴衆:ID番号? 300 00:12:54,390 --> 00:12:57,460 DAVID J.マラン:だからID番号、多分 電話番号、多分寮、または家、 301 00:12:57,460 --> 00:12:58,670 や大学、またはそのような何か。 302 00:12:58,670 --> 00:13:01,820 そのデータの任意の数 あなたの連絡先リストを持っている可能性があります 303 00:13:01,820 --> 00:13:03,890 学生を定義するかもしれないものです。 304 00:13:03,890 --> 00:13:08,490 だから、私たちはコードの中で、これを実行したい場合、 我々はこのような単純な何かをする可能性があります。 305 00:13:08,490 --> 00:13:15,670 私たちはそのようにプログラムがあるかもしれません (空隙)メインint型、のは言わせました。 306 00:13:15,670 --> 00:13:18,920 そして、私が表現したい場合 例えば、私が持っているかもしれない学生、 307 00:13:18,920 --> 00:13:24,330 その学生の名前と呼ばれる文字列、 その学生のための寮と呼ばれる文字列、 308 00:13:24,330 --> 00:13:26,900 多分int型は、その学生のためのIDと呼ばれます。 309 00:13:26,900 --> 00:13:30,840 そして私は、私は、文字列を使用していますので、 戻ってCS50.h.を設置する必要があります 310 00:13:30,840 --> 00:13:33,300 たぶん私はstdio.hのを必要とするつもりです。 311 00:13:33,300 --> 00:13:38,190 だから、私は先制それらをやらせると私はよ 今のところ、このstudent.cを呼び出すために行きます 312 00:13:38,190 --> 00:13:40,080 これを保存します。 313 00:13:40,080 --> 00:13:44,206 >> そして今私は何かを行うことができます これらの変数を持ちます。 314 00:13:44,206 --> 00:13:46,830 そして、私たちはただ書くつもりです その擬似コードでコメントとして、 315 00:13:46,830 --> 00:13:48,829 それは面白くないだから 我々は今のために何をすべきか。 316 00:13:48,829 --> 00:13:51,242 [OK]を、これは、そのプログラムであります 何とか学生を格納します。 317 00:13:51,242 --> 00:13:53,450 私は場合にどうするかをしたいです 二人の学生を保存したいですか? 318 00:13:53,450 --> 00:13:55,991 だから、私の最初の本能が起こっています すべての権利であることが、ちょっと待って、 319 00:13:55,991 --> 00:14:01,920 私は他の生徒を持っている場合、なぜ私にはありません ちょうど行う文字列名2、文字列の寮2、 320 00:14:01,920 --> 00:14:04,190 int型のID2。 321 00:14:04,190 --> 00:14:06,540 そして、我々はなくなってやりました 前にこの道 322 00:14:06,540 --> 00:14:10,890 そして、思われるものに私たちのソリューションは、何でした ハックコピーペーストのようなものであることを 323 00:14:10,890 --> 00:14:11,555 ここでの仕事? 324 00:14:11,555 --> 00:14:12,346 聴衆:配列。 325 00:14:12,346 --> 00:14:13,830 DAVID J.マラン:ええ、 我々は、配列を使用することができます。 326 00:14:13,830 --> 00:14:15,620 右この非常に迅速に 扱いにくくなります。 327 00:14:15,620 --> 00:14:18,453 あなたは、任意の並べ替えする必要があります これらの変数のすべてを命名開始。 328 00:14:18,453 --> 00:14:22,190 そして、あなたは、人間は、維持する必要があります そのOK NAME2の対応を追跡 329 00:14:22,190 --> 00:14:25,060 dorm2とID2に対応します。 330 00:14:25,060 --> 00:14:26,200 それはちょうど混乱になります。 331 00:14:26,200 --> 00:14:29,350 だから、非常に簡単です、 数週間前からリコール、 332 00:14:29,350 --> 00:14:34,300 ちょうどと呼ばれる文字列名を有するに 多分私たちにそれらのうち3つを与えます。 333 00:14:34,300 --> 00:14:36,940 そして多分私達は持っています 文字列の寮としています 334 00:14:36,940 --> 00:14:41,900 それらの3つ、または定数と、 IDS int型とそれらのうち3つを持っています。 335 00:14:41,900 --> 00:14:45,250 しかし、今でも、これは感じています 右、少しずさん。 336 00:14:45,250 --> 00:14:49,440 私たちはまだ学生と話をしています 私は本当に低レベルで住居です 337 00:14:49,440 --> 00:14:50,470 実装の詳細。 338 00:14:50,470 --> 00:14:52,790 学生は名前と寮とIDです。 339 00:14:52,790 --> 00:14:59,814 >> なぜ私は、変数を宣言することはできません 学生と呼ばれ、それがよ呼び出します。 340 00:14:59,814 --> 00:15:02,230 そして、私は別の学生をしたい場合は、 なぜ私はちょうどトンそれを呼び出すことはありません。 341 00:15:02,230 --> 00:15:05,260 または私は全体の束をしたい場合 学生の、なぜ私はちょうどありません 342 00:15:05,260 --> 00:15:09,740 私は全体のクラスを持っていると言います 学生、それはそれらの3です。 343 00:15:09,740 --> 00:15:12,470 つまり、なぜ私が来ることができません 私自身のデータ型と、最大と呼ばれます 344 00:15:12,470 --> 00:15:15,641 であるの内側学生、 名前は、IDで、寮で、 345 00:15:15,641 --> 00:15:16,890 他のフィールドの任意の数です。 346 00:15:16,890 --> 00:15:19,030 そして、それはあなたが判明 まさにそれを行うことができます。 347 00:15:19,030 --> 00:15:21,850 >> だからCは構造体と呼ばれるこの機能を持っています。 348 00:15:21,850 --> 00:15:24,700 それは、その言語の機能です 私たちは正確にこれを行うことができます。 349 00:15:24,700 --> 00:15:28,370 私は先に行くつもりです そして、structs.hを開きます 350 00:15:28,370 --> 00:15:32,299 我々が見に行くている場所 学生の定義は次のとおりです。 351 00:15:32,299 --> 00:15:35,215 それは、判明 - と、この1の偶数 IDを含む1よりも簡単 352 00:15:35,215 --> 00:15:36,080 少し前。 353 00:15:36,080 --> 00:15:39,120 あなたが思い付くしたい場合 あなたの自家製のデータ型、 354 00:15:39,120 --> 00:15:42,750 そして、int型に加えて、チャー中と フロートと存在するすべてのこれらの他、 355 00:15:42,750 --> 00:15:45,810 あなたは、文字通りして行うことができます typedefは構造体を書き込み、 356 00:15:45,810 --> 00:15:47,880 その後、いくつかの中括弧、 その内部ます 357 00:15:47,880 --> 00:15:51,460 あなたがしたい変数を表示 この新しいカスタムデータに関連付けます 358 00:15:51,460 --> 00:15:55,670 名前と寮のように入力し、 して、中括弧の後 359 00:15:55,670 --> 00:15:57,860 あなたは、新しいデータ型に名前を与えます。 360 00:15:57,860 --> 00:15:59,220 だから、例えば、学生。 361 00:15:59,220 --> 00:16:03,247 >> そして、何今、このことについての素晴らしいのは、ということです 我々は、対応するコードを見れば、 362 00:16:03,247 --> 00:16:05,080 最初の大会、 すべての、これを置くことです 363 00:16:05,080 --> 00:16:08,230 何かドットHと呼ばれるファイルで、 私たちが持っていないヘッダファイル、 364 00:16:08,230 --> 00:16:09,780 あまり自分自身を使用して開始。 365 00:16:09,780 --> 00:16:12,120 しかし、我々は開始するつもりです 今かなりを使用。 366 00:16:12,120 --> 00:16:18,650 そして、私たちはこれで何ができますか、 最終的に、これらのコード数行で 367 00:16:18,650 --> 00:16:22,130 まさにそれを宣言しています データ型、学生。 368 00:16:22,130 --> 00:16:23,230 そして今のは、それを使用してみましょう。 369 00:16:23,230 --> 00:16:27,274 >> 私は今に行くつもりです structs1.cと呼ばれるファイル。 370 00:16:27,274 --> 00:16:29,440 そしてのは、見てみましょう ここではいくつかの特徴。 371 00:16:29,440 --> 00:16:32,250 だから、ここまでのものがあります ほとんど馴染みの、私たちはよ 372 00:16:32,250 --> 00:16:35,040 何ではないに戻ってきます 一瞬でおなじみ。 373 00:16:35,040 --> 00:16:39,880 もちろん、これは私自身を含めています 同様に新しく追加されたヘッダファイル、 374 00:16:39,880 --> 00:16:42,580 PSET 3を除いて、 リコール、我々はhelpers.hを持っています。 375 00:16:42,580 --> 00:16:45,150 だから、の#include helpers.hを思い出すかもしれません。 376 00:16:45,150 --> 00:16:49,381 >> なぜ私は、引用符を使用していても 代わりに、山括弧の? 377 00:16:49,381 --> 00:16:50,630 とき、私はそれらの間に選ぶのですか? 378 00:16:50,630 --> 00:16:52,310 ほとんどの場合私が見えます 角度付きブラケットを使用しています。 379 00:16:52,310 --> 00:16:55,040 そして、すべての突然の ライン6私は二重引用符を使用しています。 380 00:16:55,040 --> 00:16:55,860 それはなぜでしょうか? 381 00:16:55,860 --> 00:16:56,700 うん? 382 00:16:56,700 --> 00:16:57,725 >> 聴衆:[聞こえません] 383 00:16:57,725 --> 00:16:59,350 DAVID J.マラン:それは実際のですが、何? 384 00:16:59,350 --> 00:17:00,559 聴衆:あなたのIDEでです。 385 00:17:00,559 --> 00:17:02,475 DAVID J.マラン:ええ、 それは私の実際のIDEのです。 386 00:17:02,475 --> 00:17:05,690 そしてので、のは、IDEにこだわるわけにはいきません それはちょうど私が使用しているツールです。 387 00:17:05,690 --> 00:17:08,119 それは私の現在にです ディレクトリ、特に。 388 00:17:08,119 --> 00:17:11,647 だからstructs.hは自分のファイルです IDEでインストールされていません、 389 00:17:11,647 --> 00:17:14,480 オペレーティングシステム自体で、 むしろそれは、私の現在のディレクトリにあります。 390 00:17:14,480 --> 00:17:16,910 あなたがたいのであれば慣例があります 独自のヘッダーファイルをインクルードするには、 391 00:17:16,910 --> 00:17:18,200 あなただけの二重引用符を使用します。 392 00:17:18,200 --> 00:17:23,290 >> このことを私たちに何と言います 8行目、一般的に言えば? 393 00:17:23,290 --> 00:17:25,200 これは何ですか? 394 00:17:25,200 --> 00:17:28,220 #define何か。 395 00:17:28,220 --> 00:17:31,040 これは右、定数を表しますか? 396 00:17:31,040 --> 00:17:33,140 あなたが持っているしたい場合は あなたのプログラムに値 397 00:17:33,140 --> 00:17:35,110 あなたは全体を使用すること 回の束が、それはです 398 00:17:35,110 --> 00:17:39,330 それを考慮するのは良い慣習、 ハッシュ記号で、それを宣言 399 00:17:39,330 --> 00:17:43,340 すべての中で、慣例により、その後、定義 それはないですけれどもword--大文字 400 00:17:43,340 --> 00:17:45,320 厳密には必要ではなく、 それは人間の慣習です 401 00:17:45,320 --> 00:17:47,210 定数を大文字にします 彼らが飛び出すように 402 00:17:47,210 --> 00:17:50,380 あなたvisually--スペースでと その後、必要な値であることが判明しました 403 00:17:50,380 --> 00:17:52,250 その定数の名前に相当します。 404 00:17:52,250 --> 00:17:56,110 セミコロンませんが、単にあなたなし そこにそのパターンに従ってください。 405 00:17:56,110 --> 00:17:57,770 >> だから私はこの実際のコードで何をしています。 406 00:17:57,770 --> 00:18:00,660 それでは、見てみましょう ここでの主なプログラム。 407 00:18:00,660 --> 00:18:04,080 12行目では、私のため structs.hが含まれています、 408 00:18:04,080 --> 00:18:06,492 私は今、私に魔法のように持っています 廃棄新しいデータ型。 409 00:18:06,492 --> 00:18:09,200 私は、intへのアクセス権を持っていません チャー、フロート、文字列、 410 00:18:09,200 --> 00:18:10,060 、青など。 411 00:18:10,060 --> 00:18:12,470 私は今へのアクセス権を持っています 生徒データ型。 412 00:18:12,470 --> 00:18:17,740 だから、12行目では、私は2つを組み合わせています 1つのカスタムデータ型と2つのideas-- 413 00:18:17,740 --> 00:18:18,940 アレイを用いました。 414 00:18:18,940 --> 00:18:21,700 だからこのプログラムであれば 私は実際にサポートしたいです 415 00:18:21,700 --> 00:18:24,320 三つの異なる学生 私のプログラムでは、私 416 00:18:24,320 --> 00:18:30,480 単に私の変数を与えると言うことができます それぞれが、学生と呼ばれます 417 00:18:30,480 --> 00:18:32,970 タイプの学生、のです 私のカスタムデータ型です。 418 00:18:32,970 --> 00:18:35,890 そして、具体的には、私を与えます 私の配列のものの3。 419 00:18:35,890 --> 00:18:37,750 >> だから今、私たちはこのプログラムで何をしますか? 420 00:18:37,750 --> 00:18:40,670 ここだけのループ反復のためです 0から3まで、それがだから 421 00:18:40,670 --> 00:18:42,110 学生の価値は何ですか。 422 00:18:42,110 --> 00:18:44,420 私は、ユーザーにメッセージを表示してい 私は学生の名前を付けます。 423 00:18:44,420 --> 00:18:48,090 そして、17行目では、我々 ほとんどおなじみのラインを持っています。 424 00:18:48,090 --> 00:18:50,370 私たちは、古くからの友人を持っています 右側にはgetString。 425 00:18:50,370 --> 00:18:52,345 構文の何個 、明らかに新しく追加されました 426 00:18:52,345 --> 00:18:55,130 あなたは前にC言語でプログラミングしたことがない場合は、 そして、構造体を使用したことがありませんか? 427 00:18:55,130 --> 00:18:55,510 うん? 428 00:18:55,510 --> 00:18:56,417 >> 聴衆:.NAME。 429 00:18:56,417 --> 00:18:57,500 DAVID J.マラン:.NAME。 430 00:18:57,500 --> 00:19:01,220 しかし、これは、跳躍のも過言ではありません 今の学生は私を囲むので、 431 00:19:01,220 --> 00:19:02,590 あなたのi番目の学生を提供します。 432 00:19:02,590 --> 00:19:04,730 そして、あなたがダイビングをしたい場合 その構造の内部に、 433 00:19:04,730 --> 00:19:09,490 あなただけの単一期間を使用し、 その後、内部変数の名前、 434 00:19:09,490 --> 00:19:11,900 またはその内のプロパティ あなたはへのアクセスを取得したいです。 435 00:19:11,900 --> 00:19:14,816 同様に、その後、私は、プロンプト場合 ユーザーは、私の学生の寮を提供し、 436 00:19:14,816 --> 00:19:18,390 あなたは同様にそれを保存することができます 内部の寮の変数内の文字列 437 00:19:18,390 --> 00:19:19,940 その学生の構造の。 438 00:19:19,940 --> 00:19:21,410 >> そして今、物事は少し空想を取得します。 439 00:19:21,410 --> 00:19:24,420 そして、これは見に行くされています おそらくたくさんで非常にすぐに。 440 00:19:24,420 --> 00:19:27,970 しかし、あなたはPSETで、このはるかに多くが表示されます 4、今それでちょうど一見してみましょう。 441 00:19:27,970 --> 00:19:33,364 これは、ライン23の貫通ことが判明 38、あなたは私はおそらくやってるどう思いますか? 442 00:19:33,364 --> 00:19:35,530 私は、コメントを削除しました 今日は、しかし、バージョン 443 00:19:35,530 --> 00:19:38,660 コー​​ドのオンラインのために 参照は、すべてのコメントを持っています。 444 00:19:38,660 --> 00:19:40,171 私がやっている何をしているようですか? 445 00:19:40,171 --> 00:19:42,530 >> 聴衆:すべてのファイルを保存します ユーザーが入力した情報。 446 00:19:42,530 --> 00:19:44,530 >> DAVID J.マラン:ええ、 まさに、これは新しい方法です 447 00:19:44,530 --> 00:19:46,370 我々は2を見ていること、 Cの他の特徴、 448 00:19:46,370 --> 00:19:48,700 それによって私は自分自身のファイルを作成することができます。 449 00:19:48,700 --> 00:19:51,580 これまでのところ、ほとんどすべてのプログラム あなたはステートレスで書きました。 450 00:19:51,580 --> 00:19:53,334 すぐにそれが動作して行うのように、それはそれです。 451 00:19:53,334 --> 00:19:55,000 それのないメモリまたは記憶はありません。 452 00:19:55,000 --> 00:19:56,110 保存されたファイルはありません。 453 00:19:56,110 --> 00:19:58,120 しかし、あなたがしたい場合 持っている入力を保存 454 00:19:58,120 --> 00:20:02,100 ゲームやプログラムのように、起こりました このように、それは我々がそうすることができるが判明しました。 455 00:20:02,100 --> 00:20:04,360 そして、あなたはこの多くを参照してくださいよ PSET 4とセクションインチ 456 00:20:04,360 --> 00:20:08,661 しかし、このライン23は、基本的に students.csvというファイルが作成されます。 457 00:20:08,661 --> 00:20:10,160 そして、あなたは前にこれを見ている可能性があります。 458 00:20:10,160 --> 00:20:14,250 あなたが前にCSを勉強したことがない場合であっても、 CSVはカンマで区切られた変数です。 459 00:20:14,250 --> 00:20:19,000 それは非常に貧乏人のようなものです Excelファイルのバージョン、 460 00:20:19,000 --> 00:20:22,270 これは、それが開かれることを意味 Excelでアップルの数字で、 461 00:20:22,270 --> 00:20:23,830 それは、行と列を有しています。 462 00:20:23,830 --> 00:20:26,485 しかし、それは独自のではありません マイクロソフトやアップルのような形式。 463 00:20:26,485 --> 00:20:29,840 これは、分離だけでカンマです 私たちはその瞬間に表示されます値。 464 00:20:29,840 --> 00:20:31,010 >> そして、ちょうど推測を取ります。 465 00:20:31,010 --> 00:20:33,480 非常に、23行目で 最後に、私の第二引数 466 00:20:33,480 --> 00:20:37,700 呼ばれるこの新しい機能に Fファイルのオープンのために開いワットです。 467 00:20:37,700 --> 00:20:39,430 W何を意味するのでしょうか? 468 00:20:39,430 --> 00:20:40,022 うん? 469 00:20:40,022 --> 00:20:41,260 >> 観客:それはあなたがファイルに書き込むことができますか? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J.マラン:それはすることができます あなたはファイルに書き込みます。 471 00:20:42,630 --> 00:20:44,810 だから、バリアントのカップルがあります ことを、私たちはここにプラグインすることができます。 472 00:20:44,810 --> 00:20:47,184 しかし、あなたはちょうど読みたい場合 それを見ているファイル、 473 00:20:47,184 --> 00:20:50,010 そして、メモリにあなたをそれを読みます ちょうど引用引用終わり "R"を使用します。 474 00:20:50,010 --> 00:20:53,110 あなたがに書き込みたい場合 ファイルは、 "W"引用終わり引用符を使用します。 475 00:20:53,110 --> 00:20:55,190 追加もありますし、 他の物事のカップル 476 00:20:55,190 --> 00:20:57,356 あなたは既存のファイルを変更する場合。 477 00:20:57,356 --> 00:21:00,480 今、私たちはこれを見て維持するつもりです 24行目に事は、我々は戻ってくるだろう。 478 00:21:00,480 --> 00:21:02,640 NULLは、結局のところ、あります 特別な値その 479 00:21:02,640 --> 00:21:06,070 特定の機能によって返すことができます 何かがwrong--てしまった場合 480 00:21:06,070 --> 00:21:08,490 ファイルが存在しない場合、 あなたがメモリを使い果たしてしまった場合、 481 00:21:08,490 --> 00:21:09,620 またはその他のエラーの束。 482 00:21:09,620 --> 00:21:13,470 しかし、今のところ、ちょうどこのことを前提としてみましょう ただ、従来のエラーチェックがあります。 483 00:21:13,470 --> 00:21:17,090 ここでは26行目では、私は反復です 0から3までのすべての私の学生を超えます。 484 00:21:17,090 --> 00:21:20,470 そして、これは一種の一種であります 新機能の、関数fprintf、 485 00:21:20,470 --> 00:21:21,460 ちょうど推測を取ります。 486 00:21:21,460 --> 00:21:24,370 printf関数は、単に印刷の場合 フォーマットされた文字列、 487 00:21:24,370 --> 00:21:26,507 関数fprintfは、おそらく何を意味するのでしょうか? 488 00:21:26,507 --> 00:21:27,590 聴衆:ファイルに印刷します。 489 00:21:27,590 --> 00:21:29,290 DAVID J.マラン:プリントA ファイルにフォーマットされた文字列。 490 00:21:29,290 --> 00:21:31,180 それはどのような追加です fはファイルであることを意味します。 491 00:21:31,180 --> 00:21:36,420 また、新しい最初の引数は、である必要があります あなたのファイルを表す変数。 492 00:21:36,420 --> 00:21:38,866 その後、我々は単にフォーマットを持っています ちょうどprintfのような文字列。 493 00:21:38,866 --> 00:21:40,740 とにもかかわらず、この 構文はちょうどこの、新しく追加されました 494 00:21:40,740 --> 00:21:44,610 、学生の名前でプラグインを意味 学生寮にプラグインした後、 495 00:21:44,610 --> 00:21:47,160 fcloseをして、ファイルを閉じます。 496 00:21:47,160 --> 00:21:49,730 そして、これは新しいものでlastly-- 私たちはこれに戻ってきます 497 00:21:49,730 --> 00:21:53,240 long--前に私が解放してい 理由のための学生 498 00:21:53,240 --> 00:21:54,860 それが上まで起こりました。 499 00:21:54,860 --> 00:21:56,820 しかし、我々は戻ってくるだろう long--前と 500 00:21:56,820 --> 00:21:59,820 それがためのGetStringがどの程度のです 実際にボンネットの下に取り組んでいます。 501 00:21:59,820 --> 00:22:01,280 >> それでは、ここで簡単に見てみましょう。 502 00:22:01,280 --> 00:22:04,380 私は自分のディレクトリにlsコマンドを入力すると、 私がいないことに注意してください 503 00:22:04,380 --> 00:22:09,360 、students.csvと呼ばれるファイルを持っています ただそこに存在するものではありません。 504 00:22:09,360 --> 00:22:14,965 だから私は今、このプログラムをコンパイルする場合、 、構造体-1を作ります。 /構造体-1、 505 00:22:14,965 --> 00:22:20,570 私は先に行くと入力するつもりです エールでバークレーに住んでいるアンディ、。 506 00:22:20,570 --> 00:22:26,350 我々はロブを持っているとしている人 これらの日セイヤーに住んでいます。 507 00:22:26,350 --> 00:22:33,760 そしてのはどこを思い付くしましょう ですが、私が思うに、マリアは、マザーであります 508 00:22:33,760 --> 00:22:35,100 私は正確に覚えています。 509 00:22:35,100 --> 00:22:36,460 >> だから、何も起きていないようにみえます。 510 00:22:36,460 --> 00:22:40,680 しかし、私は今、lsコマンドを入力すると、 students.csvがあります。 511 00:22:40,680 --> 00:22:43,080 それでは、先に行くとオープンstudents.csvましょう。 512 00:22:43,080 --> 00:22:46,050 これも非常にあります 軽量ファイルフォーマット。 513 00:22:46,050 --> 00:22:49,570 しかし、私は単純に規則を採択しました 私はここでは2つの行と列を持っています。 514 00:22:49,570 --> 00:22:52,020 最初の列は、 人の最初の名前。 515 00:22:52,020 --> 00:22:55,740 2番目の列は、学生のです 寮、または大学、または家、またはその他もろもろ。 516 00:22:55,740 --> 00:22:57,900 そして今、私はこれを保存しました 永久にファイルインチ 517 00:22:57,900 --> 00:22:59,280 >> だから、すべてが面白いではありません。 518 00:22:59,280 --> 00:23:02,980 しかし、これは単なる足がかりは今 情報を保持することができることに 519 00:23:02,980 --> 00:23:04,040 永久。 520 00:23:04,040 --> 00:23:08,340 それでは、何より私たちができるようになりました見てみましょう これらおよび他の機能で行います。 521 00:23:08,340 --> 00:23:10,729 しかし、最初に、何か質問? 522 00:23:10,729 --> 00:23:12,145 それがたくさんあって、それは高速でした。 523 00:23:12,145 --> 00:23:16,131 しかし、あなたは多くのことを参照してくださいよ PSET 4より、同様に。 524 00:23:16,131 --> 00:23:16,630 うん? 525 00:23:16,630 --> 00:23:19,360 >> 聴衆:への道があります そのファイルに名前を追加し続けますか? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J.マラン:良い質問。 527 00:23:19,880 --> 00:23:21,800 継続する方法はあります そのファイルに名前を追加? 528 00:23:21,800 --> 00:23:22,340 はい。 529 00:23:22,340 --> 00:23:24,630 そして、実際には、あなたが終了した場合 再オープンするファイルをバックアップし、 530 00:23:24,630 --> 00:23:26,780 あなたが引用符を使用します 引用終わり ""を追加するため、 531 00:23:26,780 --> 00:23:31,090 これは、単に新しい行を追加し、 新しいライン、何度も何度も、正確に。 532 00:23:31,090 --> 00:23:32,010 良い質問。 533 00:23:32,010 --> 00:23:32,950 その他の質問? 534 00:23:32,950 --> 00:23:33,450 うん? 535 00:23:33,450 --> 00:23:35,580 観客:あなたが実行した場合 今再びプログラム、 536 00:23:35,580 --> 00:23:38,000 それはに名前を追加し続けるだろう ファイルまたは、新しいファイルを開くのでしょうか? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J.マラン:ああ、良い質問。 538 00:23:38,740 --> 00:23:41,448 あなたは正しいプログラムを再度実行した場合 今、多分新しい名前で入力し、 539 00:23:41,448 --> 00:23:44,820 これはファイルに追加します またはファイルを上書き? 540 00:23:44,820 --> 00:23:47,420 私はだから、後者 追加モードを使用していません。 541 00:23:47,420 --> 00:23:49,930 そして、私はちょうど盲目的だから 書き込み用にファイルを開いて、 542 00:23:49,930 --> 00:23:51,310 それだけでファイルを上書きするだろう。 543 00:23:51,310 --> 00:23:54,570 だから私は実際に追加され行う必要があるだろう、 私は実際に長期を持っているしたい場合 544 00:23:54,570 --> 00:23:55,350 データベース。 545 00:23:55,350 --> 00:23:58,220 >> 今CSVはあっても、率直に言って、便利です 等のためのあなたはwriting--している場合 546 00:23:58,220 --> 00:24:00,100 そして、私たちは最終的には、これを参照してくださいよ 後でとき学期中 547 00:24:00,100 --> 00:24:01,455 我々は、他の目的のためにCSVを使用しています。 548 00:24:01,455 --> 00:24:04,920 あなたは、人々のすべてを格納する場合 誰が、いくつかのイベントに登録されています 549 00:24:04,920 --> 00:24:07,420 またはあなたの学生にサインアップ グループ、またはそのような何か、 550 00:24:07,420 --> 00:24:10,330 この種のデータを格納します フォーマットの超便利です。 551 00:24:10,330 --> 00:24:12,580 文字通りので、私の場合 このファイルをダウンロードすることでした。 552 00:24:12,580 --> 00:24:14,540 私はdouble--可能性があり、 それでは、実際にこれを試してみましょう 553 00:24:14,540 --> 00:24:16,720 私はここにExcelや数字を持っている場合。 554 00:24:16,720 --> 00:24:19,130 >> 私は右クリックするつもりです または、私のファイルをコントロールクリックします。 555 00:24:19,130 --> 00:24:20,020 おっと。 556 00:24:20,020 --> 00:24:21,830 右クリックするか、私のファイルをコントロールクリックします。 557 00:24:21,830 --> 00:24:24,960 さあ、私のマウスは、連携されていません。 558 00:24:24,960 --> 00:24:32,694 私はするつもりですDownload-- ので、ここですべてのファイルをダウンロード 559 00:24:32,694 --> 00:24:33,860 ちょうどそう私はこの1つをつかむことができます。 560 00:24:33,860 --> 00:24:37,850 そして、これが動作するかどうかを見てみましょう 初めてstudents.csv-- 561 00:24:37,850 --> 00:24:39,310 私は、アクティブにしました。 562 00:24:39,310 --> 00:24:41,360 今、彼らは私の連絡先を確認したいです。 563 00:24:41,360 --> 00:24:44,310 今、私は登録する必要があります。 564 00:24:44,310 --> 00:24:47,620 それはCSVを使用することがいかに簡単であるかを参照してください? 565 00:24:47,620 --> 00:24:50,840 はい、今日までそれを維持します。 566 00:24:50,840 --> 00:24:52,375 [OK]を、今、私たちはクラスの準備が整いました。 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 ああ、[OK]を、新しい何ですか? 569 00:25:00,370 --> 00:25:02,920 [OK]を、近接しています。 570 00:25:02,920 --> 00:25:04,750 それは魔法でした。 571 00:25:04,750 --> 00:25:07,280 [OK]を、今、私たちは更新する必要があります。 572 00:25:07,280 --> 00:25:10,890 そして今、それは何を忘れてしまいました 私はもともとオープンされたファイル、 573 00:25:10,890 --> 00:25:13,090 そこA--何私達は行きます。 574 00:25:13,090 --> 00:25:16,341 [OK]を、今私たちは、Excelファイルを持っています。 575 00:25:16,341 --> 00:25:18,290 ありがとう。 576 00:25:18,290 --> 00:25:20,764 >> [OK]を、私がしたので、どのような簡単な部分でした。 577 00:25:20,764 --> 00:25:23,930 もちろん、私はプリインストールされている可能性が Excel、または番号、または任意のプログラム。 578 00:25:23,930 --> 00:25:25,846 しかし、これはので、いいです 今私が操作することができます 579 00:25:25,846 --> 00:25:28,090 標準フォーマットのデータ。 580 00:25:28,090 --> 00:25:30,294 >> だから今の状況を聞かせて 我々はオフに左場所に切り替えます 581 00:25:30,294 --> 00:25:32,710 起動することであった最後の時間、 補助輪を脱いで。 582 00:25:32,710 --> 00:25:34,543 しかし、最初に、あなたはしませんでした この先に昼食を参照してください。 583 00:25:34,543 --> 00:25:38,150 再び火にここで起こっていると ニューヘブンのケンブリッジ、シタールアイス。 584 00:25:38,150 --> 00:25:43,150 できるだけ早くCS50sウェブサイトにサインアップ CS50の学生やスタッフに参加します。 585 00:25:43,150 --> 00:25:46,090 >> だから我々は、補助輪を取りました follows--として月曜日にオフ 586 00:25:46,090 --> 00:25:49,120 文字列がで宣言されています しばらくの間CS50sライブラリ。 587 00:25:49,120 --> 00:25:52,650 それができるため、そして、それは、うれしいです 私たちはあるとして変数について話をします 588 00:25:52,650 --> 00:25:54,660 完全な単語や文章など。 589 00:25:54,660 --> 00:25:56,710 しかし、それは存在しない文字列が判明。 590 00:25:56,710 --> 00:26:00,200 それはちょうど同義語、または別名です、 我々はその何かのために作成されていること 591 00:26:00,200 --> 00:26:03,780 実際にはもう少しです 技術的にはchar *型と呼ばれます。 592 00:26:03,780 --> 00:26:07,900 >> そして実際、我々は例を見ました 月曜日にプログラムの 593 00:26:07,900 --> 00:26:11,200 それは我々が期待し、かなりのように動作しませんでした。 594 00:26:11,200 --> 00:26:13,630 これは、比較-0を、ファイルしました。 595 00:26:13,630 --> 00:26:17,910 そしてあれば、それは比較-0をリコール 私は月曜日のプログラムを再コンパイル 596 00:26:17,910 --> 00:26:22,670 実行0を比較し、でお母さんを入力 再び小文字小文字、およびお母さん。 597 00:26:22,670 --> 00:26:25,320 プログラムは、私の主張しました 異なるものを入力し、 598 00:26:25,320 --> 00:26:29,210 でもママかかわらず、すべてで 小文字は、視覚的に同じです。 599 00:26:29,210 --> 00:26:31,990 だから、短い答えは何でした コンピュータが考える理由について 600 00:26:31,990 --> 00:26:34,500 これらの二つの文字列が異なっていますか? 601 00:26:34,500 --> 00:26:35,250 うん? 602 00:26:35,250 --> 00:26:36,534 >> 聴衆:[聞こえません] 603 00:26:36,534 --> 00:26:37,450 DAVID J.マラン:右。 604 00:26:37,450 --> 00:26:39,600 だから、お母さん、初めて 私は、それを入力されています 605 00:26:39,600 --> 00:26:42,710 私のコンピュータの中にどこかに保存 メモリが、別の場所で 606 00:26:42,710 --> 00:26:44,690 二回目よりも私がお母さんに入力します。 607 00:26:44,690 --> 00:26:46,580 今では確かに最適化することができます。 608 00:26:46,580 --> 00:26:49,205 コンピュータは、スマートすることができ、 これら2つの文字列を実現する、ちょっと、 609 00:26:49,205 --> 00:26:49,954 これらは同一です。 610 00:26:49,954 --> 00:26:51,520 私は冗長に保管しないようにしましょう​​。 611 00:26:51,520 --> 00:26:54,229 しかし、コンピュータは、ということをしません あなたがそれらを指示しない限り、最適化。 612 00:26:54,229 --> 00:26:56,061 だから、デフォルトでは、彼らがしています ちょうど終わるつもり 613 00:26:56,061 --> 00:26:57,670 メモリ内の2つの異なる場所です。 614 00:26:57,670 --> 00:27:01,570 そしてそうするとき、より明確にします 我々は2つ​​の文字列を比較し、 615 00:27:01,570 --> 00:27:03,950 最初に呼ばれたの、 第二が呼び出されました 616 00:27:03,950 --> 00:27:08,530 トン、特に私が何でした 13行目で、ここで比較しますか? 617 00:27:08,530 --> 00:27:09,494 うん。 618 00:27:09,494 --> 00:27:12,390 >> 観客:それはメモリ内の場所です 変数が指し示すようにします。 619 00:27:12,390 --> 00:27:14,900 >> DAVID J.マラン:その通り、私がいました メモリ内の場所を比較します 620 00:27:14,900 --> 00:27:16,300 これらの変数は、指されています。 621 00:27:16,300 --> 00:27:20,560 そこで具体的には、もしお母さんがでました バイト番号1、2、3、 622 00:27:20,560 --> 00:27:24,020 そして、4--が原因バックスラッシュを覚えています 0最後にすべての方法であることが必要です。 623 00:27:24,020 --> 00:27:29,420 そしてお母さん、M-O-Mの他のインスタンス、 アドレス10、11、12、および13でした。 624 00:27:29,420 --> 00:27:33,100 私は1、そのアドレスを比較して、 メモリ内のその場所、 625 00:27:33,100 --> 00:27:35,160 である10、反対 明らかに同じではありません。 626 00:27:35,160 --> 00:27:36,260 1は10ではありません。 627 00:27:36,260 --> 00:27:39,620 >> だから、これはその中でいいです それはかなり簡単です。 628 00:27:39,620 --> 00:27:42,870 しかし、それは限り、問題です 私たちは、文字列を比較するように見えることはできません。 629 00:27:42,870 --> 00:27:44,930 だからfundamentally-- この低レベルで、 630 00:27:44,930 --> 00:27:47,300 あなたが実現したい場合 比較するプログラム 631 00:27:47,300 --> 00:27:50,270 二つの別個の言葉 ユーザーは、品質のために入力しました 632 00:27:50,270 --> 00:27:53,944 彼らはのために文字を並べるん ただ一般的な用語のchar、 633 00:27:53,944 --> 00:27:55,360 我々は明らかに、何をすべきかが必要ですか? 634 00:27:55,360 --> 00:27:57,940 それだけに十分ではありません これらの二つのアドレスを見てください。 635 00:27:57,940 --> 00:27:58,860 私たちは何をする必要がありますか? 636 00:27:58,860 --> 00:27:59,360 うん? 637 00:27:59,360 --> 00:28:01,120 >> 聴衆:を繰り返し処理 文字列[聞こえません]。 638 00:28:01,120 --> 00:28:02,600 >> DAVID J.マラン:うん、してみましょう 文字列を反復。 639 00:28:02,600 --> 00:28:05,808 それでは、ループ、whileループのために使用してみましょう、または あなたが最も快適だものは何でも。 640 00:28:05,808 --> 00:28:08,840 そして、私たちはどこかに2つの文字列を持っている場合 メモリに、の各のを見てみましょう 641 00:28:08,840 --> 00:28:11,770 最初の文字が、その後、それぞれが第二です 文字、第3、第4、 642 00:28:11,770 --> 00:28:15,206 そして第五に、我々はヒットするまで どのような特別なセンチネル値はありますか? 643 00:28:15,206 --> 00:28:16,080 聴衆:[聞こえません] 644 00:28:16,080 --> 00:28:18,800 DAVID J.マラン:ええ、バックスラッシュ ゼロ、いずれかの文字列内のポイントで 645 00:28:18,800 --> 00:28:20,100 私たちは、それはそれだ決めることができます。 646 00:28:20,100 --> 00:28:21,970 我々はすべての単一の文字にマッチしたことがありますか? 647 00:28:21,970 --> 00:28:22,990 そうでない場合、falseを返します。 648 00:28:22,990 --> 00:28:24,770 その場合は、trueを返します。 649 00:28:24,770 --> 00:28:28,800 そしてそうそれはまさにこのバージョンです プログラムの比較 - 1.Cはありません。 650 00:28:28,800 --> 00:28:31,677 それは、私たちと同じです その私のきを除き月曜日を見て 651 00:28:31,677 --> 00:28:34,760 しかしstring--単語の脱却 それが全く機能impact--を持っていません 652 00:28:34,760 --> 00:28:37,450 私は今やってる削除しています いくつかの視覚的な補助輪、 653 00:28:37,450 --> 00:28:40,880 しかし、明らかにそれを表示するには sおよびtはアドレスです。 654 00:28:40,880 --> 00:28:43,020 そして、それは、どのようなスターです アスタリスクを表し、 655 00:28:43,020 --> 00:28:46,690 それ以外の場合は、既知のアドレスであり、 より技術的にポインタとして。 656 00:28:46,690 --> 00:28:49,880 >> だから私は、上の宣言時 ライン9とのchar * sのを言います、 657 00:28:49,880 --> 00:28:52,160 それは私に文字列を与えることを意味するものではありません。 658 00:28:52,160 --> 00:28:56,360 それは私に、その変数を与えることを意味します 生活の中での目的は、アドレスを格納することです。 659 00:28:56,360 --> 00:29:00,400 私は置くことを約だから そこに文字列のアドレス。 660 00:29:00,400 --> 00:29:03,500 そして実際、のGetStringは、することが 明確な、文字列を返しません。 661 00:29:03,500 --> 00:29:06,110 それはお母さんを返しません。 バックスラッシュゼロ、それ自体。 662 00:29:06,110 --> 00:29:10,005 具体的に何をするのgetStringありません かつ正確に返しますか? 663 00:29:10,005 --> 00:29:10,880 聴衆:[聞こえません] 664 00:29:10,880 --> 00:29:14,080 DAVID J.マラン:アドレス、 最初の文字のアドレス 665 00:29:14,080 --> 00:29:16,070 いくつかの文字列では得ています。 666 00:29:16,070 --> 00:29:19,250 そして今、私たちは見ています 再び特殊なキーワード。 667 00:29:19,250 --> 00:29:20,640 そして、私はこの以前に言及しました。 668 00:29:20,640 --> 00:29:23,620 これは良い大会になるだろう 私たちは今、何度も何度も表示されますこと。 669 00:29:23,620 --> 00:29:27,540 私はそのことを確認するチェックしています sがnullでなく、tがnullではありません。 670 00:29:27,540 --> 00:29:30,100 本当に私に基づいているため 迅速な言及以前、 671 00:29:30,100 --> 00:29:35,510 GetStringがない返された場合に何を意味するかもしれません アドレスが、再び、N-U-L-L、 672 00:29:35,510 --> 00:29:36,990 いくつかの特別な値はありますか? 673 00:29:36,990 --> 00:29:37,890 >> 聴衆:エラー。 674 00:29:37,890 --> 00:29:38,600 >> DAVID J.マラン:それは誤りです。 675 00:29:38,600 --> 00:29:39,550 何かが間違っていました。 676 00:29:39,550 --> 00:29:41,341 そして、何通常、 特に、起こるかもしれません 677 00:29:41,341 --> 00:29:45,162 strings--となる可能性があります advance--で未知の長さの 678 00:29:45,162 --> 00:29:46,870 多分コンピュータの メモリのうち、多分 679 00:29:46,870 --> 00:29:49,280 あなたは、このようなAで入力 長い単語や文 680 00:29:49,280 --> 00:29:51,880 またはこのような巨大なエッセイを貼り付け だけでは十分なメモリがあります。 681 00:29:51,880 --> 00:29:55,340 だからのGetStringを返すことはできません。 全部のアドレス、 682 00:29:55,340 --> 00:29:56,620 それだけで何も返しません。 683 00:29:56,620 --> 00:30:00,580 そして、それはエラーが発生したと言います 特別なNULL値を返すこともできます。 684 00:30:00,580 --> 00:30:02,890 それはいわば、ゼロアドレスです。 685 00:30:02,890 --> 00:30:06,157 >> 今では判明Cが付属しています その繰り返しを行う関数。 686 00:30:06,157 --> 00:30:09,240 私たちは、でこれを実装する必要はありません ループまたはwhileループ自分のために。 687 00:30:09,240 --> 00:30:11,150 我々は、機能を使用することができ、 簡潔に呼ばれ、 688 00:30:11,150 --> 00:30:15,400 コンプをかき混ぜる、または文字列の比較、その 生活の中での目的は、まさにそれを行うことです。 689 00:30:15,400 --> 00:30:19,990 あなたはそれを二つのポインタ、2つのアドレスを与え、 そして、それはそれらのアドレスに移動します 690 00:30:19,990 --> 00:30:23,130 そして、その後のために手紙を比較 品質のための文字のための文字、 691 00:30:23,130 --> 00:30:26,610 真のものである場合にのみ停止? 692 00:30:26,610 --> 00:30:31,540 直感的にコンプをかき混ぜる必要があるとき ただ明確にすることが、反復を停止しますか? 693 00:30:31,540 --> 00:30:35,400 それはどちらかにバックスラッシュ0に達すると 文字列、その時点でそれは決めることができます 694 00:30:35,400 --> 00:30:38,910 すべてが一致した、または 矛盾がありましたか? 695 00:30:38,910 --> 00:30:42,740 >> だから、私たちは今、これを実行するとしようとした場合 私たちの小さな大文字ゲーム、 696 00:30:42,740 --> 00:30:49,260 そう比較-1、./compare-1を行い、 小文字の両方の時間でお母さんを入力します。 697 00:30:49,260 --> 00:30:50,560 今では同じことです。 698 00:30:50,560 --> 00:30:54,080 そして、私は再びそれを行う場合 小文字と大文字多分。 699 00:30:54,080 --> 00:30:56,720 今では確かに区別します 大文字と小文字の間。 700 00:30:56,720 --> 00:31:00,440 だから、すべてではないこと、ハードまたは 魔法が、それは、今説明しません 701 00:31:00,440 --> 00:31:03,140 何がボンネットの下に起こっています。 702 00:31:03,140 --> 00:31:07,640 >> だから我々は、より多くの何を抽出することができます レッスンのこの種から? 703 00:31:07,640 --> 00:31:08,980 それでは、これを見てみましょう。 704 00:31:08,980 --> 00:31:15,380 私が先に行くと書くつもりです コピー-0と呼ばれ、ここで迅速なプログラム。 705 00:31:15,380 --> 00:31:21,594 そして今のは先に、実際に行ってみましょう 、のコピー-0でthis--やらせます 706 00:31:21,594 --> 00:31:23,010 私がここに持っているものを見てみましょう。 707 00:31:23,010 --> 00:31:24,712 私が最初に何かを言う、ユーザーに伝えます。 708 00:31:24,712 --> 00:31:26,420 それから私は、文字列を取得 私はSにそれを保管していました。 709 00:31:26,420 --> 00:31:29,810 sが等しい場合、私はチェック わずか1を返し、NULLに等しいです。 710 00:31:29,810 --> 00:31:31,590 だから、これは標準的なエラーチェックです。 711 00:31:31,590 --> 00:31:33,112 興味深い何も起こりませんでした。 712 00:31:33,112 --> 00:31:36,320 そして実際に、我々は、エラーを取り除く場合 チェック、これは週1のコードのようになります。 713 00:31:36,320 --> 00:31:36,985 現時点では。 714 00:31:36,985 --> 00:31:39,110 しかし、私は取得するために開始しました それについて少し良く。 715 00:31:39,110 --> 00:31:43,340 >> 今16行で、一週間前に、多分 でも、数日または数分前に、 716 00:31:43,340 --> 00:31:46,720 あなたは16行目があると言うかもしれません トンという変数を作成します 717 00:31:46,720 --> 00:31:48,219 そして、コピーがそれにです。 718 00:31:48,219 --> 00:31:50,010 そして、それは完璧です 合理的な持ち帰り。 719 00:31:50,010 --> 00:31:51,560 しかし、今より正確に。 720 00:31:51,560 --> 00:31:54,190 16行目では何が起こっているのでしょうか? 721 00:31:54,190 --> 00:31:56,170 何がコピーされつつあります 右から左へ? 722 00:31:56,170 --> 00:31:56,669 うん? 723 00:31:56,669 --> 00:31:58,490 観客:tは秒のアドレスを取得していますか? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J.マラン:その通り、T Sのアドレスを取得しています。 725 00:32:01,220 --> 00:32:05,170 私は行くのであれば、今明確にします バックその先の例に 726 00:32:05,170 --> 00:32:08,520 私は私が入力したものを引き出します。 727 00:32:08,520 --> 00:32:11,640 そして、私が入力したもの in--ここのだし、ここで 728 00:32:11,640 --> 00:32:15,830 私はどこかに入力したものです その後、メモリ、ママとバックスラッシュ 729 00:32:15,830 --> 00:32:17,840 私のために追加されています0。 730 00:32:17,840 --> 00:32:23,060 私はここに保存され、リコール、 これは、位置1、2、3、4であります 731 00:32:23,060 --> 00:32:24,655 これはSで現在何です。 732 00:32:24,655 --> 00:32:29,220 ライン16にあれば、私は私を与えると言います トンとストアと呼ばれる別の変数 733 00:32:29,220 --> 00:32:33,590 sの値では、どのような ここに格納されるお母さんではないでしょう 734 00:32:33,590 --> 00:32:35,480 むしろちょうど数1。 735 00:32:35,480 --> 00:32:38,520 >> だから我々は、このプログラムに先に見れば 今、何が起こるだろうか? 736 00:32:38,520 --> 00:32:40,690 だからがあることに気付きます この機能を使用すると、かもしれません 737 00:32:40,690 --> 00:32:44,410 シーザーのためにいくつかの時間前に、これを使用しています、 またはVigenere、またはそうでないかもしれない、まったく。 738 00:32:44,410 --> 00:32:48,170 私は、私は、私のprintfと主張します コピーtを活用する予定。 739 00:32:48,170 --> 00:32:51,616 まず19行、迅速正気で チェック、strlen関数Tの長さをチェックします。 740 00:32:51,616 --> 00:32:53,740 私はしたくないので 何かを大文字にしてみてください 741 00:32:53,740 --> 00:32:55,104 場合そこには文字列はありません。 742 00:32:55,104 --> 00:32:57,520 ユーザーは単にEnterを押した場合は、 活用するものはありません。 743 00:32:57,520 --> 00:33:01,100 だから私は、ライン21を行うにはしたくありません。 744 00:33:01,100 --> 00:33:05,758 だから、ライン21を生かしています これは明らかに手紙、トンで? 745 00:33:05,758 --> 00:33:06,514 >> 聴衆:M? 746 00:33:06,514 --> 00:33:08,722 DAVID J.マラン:それが見えます 以下のようにそれは、コピーは1ですか? 747 00:33:08,722 --> 00:33:09,486 聴衆:メートル。 748 00:33:09,486 --> 00:33:10,450 DAVID J.マラン:ええと、M。 749 00:33:10,450 --> 00:33:12,685 [OK]を、最初のmので、 私はことを通知理由 750 00:33:12,685 --> 00:33:14,935 TOUPPERに渡す、これ あなたがそれを見たことがない場合にはです 751 00:33:14,935 --> 00:33:16,980 ちょうど機能 その入力として活用。 752 00:33:16,980 --> 00:33:20,240 Tブラケットゼロが与える意味します 私トンのゼロ文字。 753 00:33:20,240 --> 00:33:22,550 だからどのようにこれを行います 画像の変更は、明確にするには? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 何が書き換えまたは変更を取得する必要があります Sに対してとtとママと 756 00:33:29,160 --> 00:33:30,097 バックスラッシュゼロ。 757 00:33:30,097 --> 00:33:31,470 >> 聴衆:[聞こえません] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J.マラン:ええ、 ので、ここでこの1は、単に 759 00:33:34,030 --> 00:33:40,860 this--修正to--変更を取得する必要があります 資本メートルに変更を取得する必要があります。 760 00:33:40,860 --> 00:33:44,330 しかし、今、後で見に プログラム、私はプリントアウトした場合 761 00:33:44,330 --> 00:33:49,800 sとt私は、ここにきれいに何見ながら、 sとtをプリントアウト起こるだろう。 762 00:33:49,800 --> 00:33:54,310 だから./copy-0、コピー-0にします。 763 00:33:54,310 --> 00:33:57,140 私が先に行くと入力してみましょう すべて小文字でお母さんインチ 764 00:33:57,140 --> 00:34:00,140 オリジナルとの両方に注意してください コピーは、資産計上されています。 765 00:34:00,140 --> 00:34:00,850 なぜ? 766 00:34:00,850 --> 00:34:04,431 まあ、sおよびtは両方を指しています、 あなたがする場合は、メモリの同じチャンク。 767 00:34:04,431 --> 00:34:06,930 そして率直に言って、これはなっています 本当に事実をuninteresting-- 768 00:34:06,930 --> 00:34:09,150 ここでは、アドレスゼロを使用していること。 769 00:34:09,150 --> 00:34:11,719 私は意味、私は本当に気にしません ものは、メモリのどこにありますか。 770 00:34:11,719 --> 00:34:13,550 申し訳ありませんが私は少し多すぎるを消去しています。 771 00:34:13,550 --> 00:34:15,674 しかし、私は本当に気にしません 物事は、メモリのどこにいますか。 772 00:34:15,674 --> 00:34:18,510 だから、実際にどのような プログラマは考える傾向にあります 773 00:34:18,510 --> 00:34:21,080 あなたはについて話すときということです アドレス、またはポインタ、 774 00:34:21,080 --> 00:34:22,679 それはメモリのどこにあるか誰が気に。 775 00:34:22,679 --> 00:34:24,989 それはATの場合、私は気にしません バイト1または1億円となりました。 776 00:34:24,989 --> 00:34:27,920 私はこのことを気に 変数が効果的です 777 00:34:27,920 --> 00:34:29,620 メモリのチャンクを指します。 778 00:34:29,620 --> 00:34:33,350 だから、今後、よりもむしろ屁理屈 任意のメモリアドレスより、してみましょう 779 00:34:33,350 --> 00:34:36,710 単にポインタを描画するために開始 矢印などのポインタ、など。 780 00:34:36,710 --> 00:34:39,340 それでは、s及びtは本当に、あります このプログラムによれば、 781 00:34:39,340 --> 00:34:42,130 私はトンを作成する方法のため、 それは、ちょうど2つの別々の変数です 782 00:34:42,130 --> 00:34:43,840 メモリの同じチャンクを指します。 783 00:34:43,840 --> 00:34:45,215 彼らがどこにいるそして、我々は気にしないでください。 784 00:34:45,215 --> 00:34:47,130 だから我々は離れてその詳細を抽象化することができます。 785 00:34:47,130 --> 00:34:48,780 >> それでは、どのよう私はこの問題を解決するのですか? 786 00:34:48,780 --> 00:34:54,120 私はコピーのバージョンを書きたい場合 プログラム実際にコピーした文字列 787 00:34:54,120 --> 00:34:56,840 そして、だけ大文字 コピー、ただ直感的に、 788 00:34:56,840 --> 00:34:59,766 であることを何持っています 当社のソリューションの成分? 789 00:34:59,766 --> 00:35:00,640 聴衆:[聞こえません] 790 00:35:00,640 --> 00:35:01,420 DAVID J.マラン:私たちは、何が必要ですか? 791 00:35:01,420 --> 00:35:01,820 聴衆:メモリのチャンク。 792 00:35:01,820 --> 00:35:03,280 DAVID J.マラン:我々は必要 メモリの別のチャンクは、右? 793 00:35:03,280 --> 00:35:05,360 私たちはどのように知りません 必ずしも、まだそれを行います。 794 00:35:05,360 --> 00:35:11,330 しかし、私は一種のように起こるためにこれを必要とします その小文字で元のママ 795 00:35:11,330 --> 00:35:14,170 メモリの余分なチャンクで終わります。 796 00:35:14,170 --> 00:35:19,770 そして、私は、コピーを変更したときに、私 ここで、このコピーを変更する必要はありません。 797 00:35:19,770 --> 00:35:26,020 私の代わりにこれだけを変更したいです コピー元は変更されませんように。 798 00:35:26,020 --> 00:35:27,980 >> それでは、我々はこれを行う方法を見てみましょう。 799 00:35:27,980 --> 00:35:31,800 すでに持っているコピー-1では、 コメントを剥奪され、 800 00:35:31,800 --> 00:35:33,250 しかし、オンラインでコメントしています。 801 00:35:33,250 --> 00:35:36,710 私たちは、代わりにfollowing--これらの操作を行います ラインは同一であり、私は文字列を取得 802 00:35:36,710 --> 00:35:38,340 sを呼び出します。 803 00:35:38,340 --> 00:35:43,500 しかし、今私たちのほとんどの一つを見てみましょう 複雑であるが、複雑の最後 804 00:35:43,500 --> 00:35:47,340 しばらくの間、ライン16は、まさにこれを行います。 805 00:35:47,340 --> 00:35:49,400 であなたの快適なので、もし 私達はちょうどdrew--画像 806 00:35:49,400 --> 00:35:51,790 私はメモリの新しいチャンクを与え、 それにすべてをコピーし、 807 00:35:51,790 --> 00:35:53,730 我々はコードにそれを変換する方法を見てみましょう。 808 00:35:53,730 --> 00:35:59,400 >> そこでライン16、左側に、 char * tは私にこっちには、このボックスを提供します。 809 00:35:59,400 --> 00:36:00,230 それはそれがないすべてです。 810 00:36:00,230 --> 00:36:03,240 右側に、 m個のalloc、またはmalloc関数、 811 00:36:03,240 --> 00:36:06,480 メモリ割り当て、超空想であり、 ちょうど言うの不可解な方法 812 00:36:06,480 --> 00:36:07,640 私はメモリのチャンクを与えます。 813 00:36:07,640 --> 00:36:09,290 我々はどのくらいのメモリが必要なのでしょうか? 814 00:36:09,290 --> 00:36:10,910 まあ、大きな表現の一種です。 815 00:36:10,910 --> 00:36:12,570 しかし、ここではそれがここで言っていることを見てみましょう。 816 00:36:12,570 --> 00:36:15,940 これは、もちろん、与えるあります 私のの文字列の長さ。 817 00:36:15,940 --> 00:36:19,094 だから、お母さんはそれが何をすべきですか? 818 00:36:19,094 --> 00:36:21,010 だから3、右? お母さんは3文字です。 819 00:36:21,010 --> 00:36:22,830 あなたはカウントされません。 バックスラッシュゼロあなたを 820 00:36:22,830 --> 00:36:25,960 それはだ文字列の長さについての話 実際に人間の目に見える文字。 821 00:36:25,960 --> 00:36:28,020 だからお母さんは、これは私に3を与えます。 822 00:36:28,020 --> 00:36:31,170 しかし、私は今1を追加している、ちょっと待って。 823 00:36:31,170 --> 00:36:34,861 なぜ私が実際にしたいです わずか3 4バイトを割り当てていませんか? 824 00:36:34,861 --> 00:36:35,360 うん? 825 00:36:35,360 --> 00:36:36,910 >> 聴衆:センチネル値については? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J.マラン:その通り、 そのセンチネル値のため。 827 00:36:38,951 --> 00:36:40,840 バックスラッシュゼロの場合、 私は、4バイトの合計が必要です。 828 00:36:40,840 --> 00:36:42,870 だから私は、長さが必要です 文字列のプラス1。 829 00:36:42,870 --> 00:36:45,400 そして、ちょうど良いmeasure--用 でも、このシステムにかかわらず、 830 00:36:45,400 --> 00:36:49,390 それは常に私が言っている1--になるだろう 文字のサイズによって、これを乗算します。 831 00:36:49,390 --> 00:36:51,552 あるのsizeof判明 C言語で演算子こと 832 00:36:51,552 --> 00:36:53,260 ちょうどあなた伝えます だバイト数 833 00:36:53,260 --> 00:36:54,700 特定のデータタイプに必要。 834 00:36:54,700 --> 00:36:57,740 これは、配列のために動作しません、 一般的に、時にはそれはありません。 835 00:36:57,740 --> 00:36:59,210 しかし、一般的なケースで、ありません。 836 00:36:59,210 --> 00:37:02,330 多くのバイトをどのようにしかし、それは私に教えてくれます 判明char型であるが、常に1です。 837 00:37:02,330 --> 00:37:04,080 だから、これは1を掛けるようなものです。 838 00:37:04,080 --> 00:37:05,900 >> コー​​ドのだからスーパー不可解探しライン。 839 00:37:05,900 --> 00:37:09,320 しかし、それがないすべてのですができます 私のメモリの塊。 840 00:37:09,320 --> 00:37:13,590 しかし、それはコピーしているように見えるん そのメモリには何? 841 00:37:13,590 --> 00:37:14,560 未だに。 842 00:37:14,560 --> 00:37:22,040 だから、私はライン22上で行うと、どのような 23、24、25、まあ、私は単純にこれを行います。 843 00:37:22,040 --> 00:37:23,760 そして、これは一種のです 今古い学校のもの。 844 00:37:23,760 --> 00:37:26,010 これはPSET 2、のようなものです あなただけのものを移動しています 845 00:37:26,010 --> 00:37:28,620 メモリ内、あるいはむしろ文字列で周り。 846 00:37:28,620 --> 00:37:31,920 >> だから私は0からに反復しますよ 文字列sの長さ。 847 00:37:31,920 --> 00:37:37,820 そして私はi番目の文字をコピーしています s内のTのi番目の文字に。 848 00:37:37,820 --> 00:37:41,820 そしてので、私は、プログラマは、作られました 正確に同じ数のバイトを割り当ててください 849 00:37:41,820 --> 00:37:44,600 私が必要として、それは完璧です 1対1の関係。 850 00:37:44,600 --> 00:37:47,060 そして、私はでママをコピーします 新しいものに小文字。 851 00:37:47,060 --> 00:37:50,170 そして最後に、私はこの行を行います。 852 00:37:50,170 --> 00:37:54,637 それで効果があるだけで ここで、このTを大文字にします。 853 00:37:54,637 --> 00:37:56,470 吸収するそう多くはなく、 あなただけ考慮すれば、 854 00:37:56,470 --> 00:37:58,220 本当に何が起こっています ボンネットの下に 855 00:37:58,220 --> 00:38:00,880 ただこれらを移動しています すべてのことは、周りのバイト 856 00:38:00,880 --> 00:38:06,617 この問題を解決することで必要とされます ちょうど私達にこのメモリの塊を得ました。 857 00:38:06,617 --> 00:38:08,450 今のリスクがあります 圧倒的な、私がお見せしましょう 858 00:38:08,450 --> 00:38:13,200 ほとんどですつの他の例 この1を除いて、同一の 859 00:38:13,200 --> 00:38:14,350 コー​​ドの行。 860 00:38:14,350 --> 00:38:18,870 だから、これはハッカーのバージョンです このプログラムの、可能ならば。 861 00:38:18,870 --> 00:38:21,050 しかし、ちょうど蒸留しましょう その上で何が起こっているのかに。 862 00:38:21,050 --> 00:38:28,920 24行目は、このトンにするために使用します ブラケット私はSブラケット私を取得します。 863 00:38:28,920 --> 00:38:33,370 今、私はこれを変更しています ずっと不可解星トン 864 00:38:33,370 --> 00:38:36,280 プラス1は、星のプラス1に等しいです。 865 00:38:36,280 --> 00:38:38,702 >> だから、何が起こっているのか、なぜ 私たちは星の文字を持っていますか? 866 00:38:38,702 --> 00:38:41,410 私たちは前に星を見てきましたし、 それは異なって、ここで使われています。 867 00:38:41,410 --> 00:38:45,490 我々は以前、char *型を見た今私は見ています 先頭の星、それは大丈夫です。 868 00:38:45,490 --> 00:38:48,190 それは我々が判明するので 種類のちょうど推測することができます 869 00:38:48,190 --> 00:38:50,280 最初のものから 原則は何が起こっているのか。 870 00:38:50,280 --> 00:38:53,860 だから明確にする、のは何ですか? 871 00:38:53,860 --> 00:38:55,052 先週、それが文字列でした。 872 00:38:55,052 --> 00:38:56,260 それはもはや十分ではありません。 873 00:38:56,260 --> 00:38:57,690 具体的には、Sは何ですか? 874 00:38:57,690 --> 00:38:58,590 >> 聴衆:[聞こえません] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J.マラン:それはポインタです。 876 00:38:59,881 --> 00:39:02,610 これは、のアドレスです 私たちが最初に入力された文字。 877 00:39:02,610 --> 00:39:04,780 [OK]を、tは何ですか? 878 00:39:04,780 --> 00:39:05,660 >> 聴衆:[聞こえません] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J.マラン: 最初のバイトのアドレス 880 00:39:07,950 --> 00:39:10,490 トンで、メモリのチャンクは再割り当て。 881 00:39:10,490 --> 00:39:14,720 だから、そのときに我々が判明 文字列までに0から反復処理 882 00:39:14,720 --> 00:39:17,424 length--まず、私 ので、0でオフ開始 883 00:39:17,424 --> 00:39:18,840 ループもののために、この古い学校の。 884 00:39:18,840 --> 00:39:22,400 だから簡単にするために、してみましょう コー​​ドの最初の行と仮定 885 00:39:22,400 --> 00:39:23,760 右、本当にこれだけです。 886 00:39:23,760 --> 00:39:26,080 iがゼロを追加する、ゼロの場合 おそらく何かに 887 00:39:26,080 --> 00:39:27,540 効果を持っているつもりされていません。 888 00:39:27,540 --> 00:39:28,560 >> だから、この言葉は何ですか? 889 00:39:28,560 --> 00:39:31,600 それは星のことが判明 この文脈でのオペレータ 890 00:39:31,600 --> 00:39:33,700 間接参照は、 ちょうどであることをオペレータ、 891 00:39:33,700 --> 00:39:37,530 行くというのがファンシーな方法 以下のアドレスに。 892 00:39:37,530 --> 00:39:42,080 だからSは最初のアドレスである場合 このメモリのチャンクの文字、 893 00:39:42,080 --> 00:39:43,630 * sがそこに行くことを意味します。 894 00:39:43,630 --> 00:39:45,630 そして、我々は描かれてきましたので、 このように画像、 895 00:39:45,630 --> 00:39:47,430 あなたが採用することができます メンタルモデルを以下に示します。 896 00:39:47,430 --> 00:39:51,030 これはsであり、あなたは* S * S言えば 種類のシュートとはしごのような、 897 00:39:51,030 --> 00:39:54,540 あなたは子供の頃からゲームを覚えていれば、 その矢印に従って行くようなものです 898 00:39:54,540 --> 00:39:55,570 アドレスへ。 899 00:39:55,570 --> 00:39:57,080 >> * tは同じものです。 900 00:39:57,080 --> 00:39:59,855 だからここに開始し、そのチャンクにアクセスしてください。 901 00:39:59,855 --> 00:40:03,350 私はちょうどに描くことができません この画面にそのように。 902 00:40:03,350 --> 00:40:05,560 * tはここに行くことを意味します。 903 00:40:05,560 --> 00:40:08,830 そして、ループのためだけです この文字は、ここに移動と言って、 904 00:40:08,830 --> 00:40:11,330 ここでこの文字を移動し、 ここでこの文字を移動します。 905 00:40:11,330 --> 00:40:12,890 しかし、私はその増分をどのよ​​うに行うのですか? 906 00:40:12,890 --> 00:40:15,430 私はちょうど削除何元に戻す必要があります。 907 00:40:15,430 --> 00:40:18,140 これは、一般的に呼ばれるものです ポインタ演算、どの 908 00:40:18,140 --> 00:40:20,040 アドレスで数学を意味します。 909 00:40:20,040 --> 00:40:22,460 >> もし、このループのために、 私は私をインクリメント保ちます、 910 00:40:22,460 --> 00:40:26,880 sはアドレスであり、Tは アドレス、私はちょうど1を追加し続けるならば、 911 00:40:26,880 --> 00:40:31,406 それはただ前進し続けることを意味します、 そして、転送、およびメモリに転送します。 912 00:40:31,406 --> 00:40:34,030 それは、オックスフォード・ストリートのようなものです CSの建物がオンになっている通り。 913 00:40:34,030 --> 00:40:36,490 CSの建物は33オックスフォードストリートにあります。 914 00:40:36,490 --> 00:40:39,870 だから、33を行うした場合 オックスフォードストリートプラス1、 915 00:40:39,870 --> 00:40:42,870 それは34オックスフォードにあなたをもたらします ストリート、その後35オックスフォードストリート、 916 00:40:42,870 --> 00:40:46,380 その後、36オックスフォードストリート、どのようなもの 建物は実際にある - 彼らが存在する場合。 917 00:40:46,380 --> 00:40:50,540 だから、それは我々がやっているすべてです ここでポインタ演算と。 918 00:40:50,540 --> 00:40:53,820 >> だから、超難解な方法です 自分自身を表現します。 919 00:40:53,820 --> 00:40:56,160 しかし、すべてのことが起こっています フードの下に 920 00:40:56,160 --> 00:40:59,330 ただ、これらのアドレスに従っています、 あなたがする場合は、マップを次のように、 921 00:40:59,330 --> 00:41:02,692 などの矢印を次の 私たちは、画面上に描画されてきました。 922 00:41:02,692 --> 00:41:04,910 [OK]を、多くは消化します。 923 00:41:04,910 --> 00:41:10,410 構文上の任意の質問、概念、 ポインタ、malloc関数など。 924 00:41:10,410 --> 00:41:11,480 うん、こっち最初。 925 00:41:11,480 --> 00:41:13,755 >> 聴衆:だからここでそれ tはTOUPPERの* tを等しく*と言い、 926 00:41:13,755 --> 00:41:15,575 活用しようということです すべての文字またはjust-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J.マラン:ああ、 本当に良い質問です。 928 00:41:17,283 --> 00:41:19,805 ここでこの行のだから、31、 これは、大文字としています 929 00:41:19,805 --> 00:41:21,430 最初の文字または文字のすべて。 930 00:41:21,430 --> 00:41:23,460 それでは、行くことによってそれに答えてみましょう バック第一原理に。 931 00:41:23,460 --> 00:41:26,168 ここで私は平均と第一原理 ただ基本的な定義に行きます 932 00:41:26,168 --> 00:41:27,000 関与何の。 933 00:41:27,000 --> 00:41:29,770 だからTOUPPERは、関数の それは、charを大文字にします。 934 00:41:29,770 --> 00:41:30,530 それで全部です。 935 00:41:30,530 --> 00:41:36,740 * tはfirst--に行く意味します T内のアドレスにアクセスしてください。 936 00:41:36,740 --> 00:41:40,350 そのように、画像に、このチャンクがある場合 メモリの私たちは、malloc関数で割り当てられ、 937 00:41:40,350 --> 00:41:43,310 これはトンで、* tはここに行くことを意味します。 938 00:41:43,310 --> 00:41:46,710 >> 一方、あなたが渡しています その値、小文字メートル 939 00:41:46,710 --> 00:41:50,040 TOUPPERに、あなたが戻って取得しています あなたはそれを入れている資本M、? 940 00:41:50,040 --> 00:41:52,410 あなたは、同じ場所でそれを入れています。 941 00:41:52,410 --> 00:41:55,540 だからそれらのロジックによる それだけだ基本的な定義 942 00:41:55,540 --> 00:41:58,792 最初の文字を大文字 あなたは私またはAで反復しない限り、 943 00:41:58,792 --> 00:42:02,000 ループまたはwhileループのために、それはないだろう あなたがそれを頼むよりも何かをします。 944 00:42:02,000 --> 00:42:02,583 良い質問。 945 00:42:02,583 --> 00:42:03,237 うん? 946 00:42:03,237 --> 00:42:05,369 >> 聴衆:なぜあなたは使用しました この方法ではなく、逆参照 947 00:42:05,369 --> 00:42:05,979 配列? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J.マラン:ああ、良い質問。 949 00:42:07,395 --> 00:42:10,672 なぜあなたは間接参照を使用します 代わりに、アレイ法の方法? 950 00:42:10,672 --> 00:42:12,130 特段の理由は、正直言っていませんでした。 951 00:42:12,130 --> 00:42:15,290 そして、実際には、このための 例のようなもの、右、 952 00:42:15,290 --> 00:42:17,556 私はちょうど作っ主張しています より複雑なプログラム、 953 00:42:17,556 --> 00:42:19,680 より多くの目には、以上のグレージングされています 人々はチェックアウトされています 954 00:42:19,680 --> 00:42:22,830 これは、超難解に見えますので、しかし、 それは同じことをやっているにもかかわらず。 955 00:42:22,830 --> 00:42:26,695 だから、率直に言って、これは 必要以上に視覚的に複雑なソリューション 956 00:42:26,695 --> 00:42:27,320 問題に。 957 00:42:27,320 --> 00:42:29,580 >> それはまだ良いデザインですが、 5設計のための5つのうち、 958 00:42:29,580 --> 00:42:33,140 それはブラケットですか 表記またはポインタ表記。 959 00:42:33,140 --> 00:42:36,299 我々が得るときに特にBut-- 後で過程でPSET 5で 960 00:42:36,299 --> 00:42:39,340 我々はその辞書を実装するときに 私はtimes--のカップルを述べました 961 00:42:39,340 --> 00:42:42,300 私たちは実際に気にします 低レベルのメモリ・アドレス 962 00:42:42,300 --> 00:42:44,140 私たちは本当に理解しています どうしたの。 963 00:42:44,140 --> 00:42:48,300 >> しかし、今のところ、それは、このことが判明 コー​​ドの行ここでは、角括弧 964 00:42:48,300 --> 00:42:49,900 実際には存在しません。 965 00:42:49,900 --> 00:42:52,230 彼らはと呼ばれるものです シンタックスシュガー、これ 966 00:42:52,230 --> 00:42:58,390 のがちょうど不気味クールな方法です コンパイラがあることを角括弧に変換 967 00:42:58,390 --> 00:43:00,420 その数学的表現。 968 00:43:00,420 --> 00:43:02,660 だから、人間の慣習です ただ書くことができるようにします 969 00:43:02,660 --> 00:43:04,220 これらは非常にユーザーフレンドリーブラケット。 970 00:43:04,220 --> 00:43:06,850 しかし、どのようなコンパイラ、打ち鳴らします、 本当にすべての時間をやっています 971 00:43:06,850 --> 00:43:10,970 あなたはラインで強調表示されているもの書きます 24、ボンネットの下に、それは本当にです 972 00:43:10,970 --> 00:43:12,330 これに変換します。 973 00:43:12,330 --> 00:43:16,200 それは人間としてちょうどより楽しいです ライン24のようなコードを読み書きします。 974 00:43:16,200 --> 00:43:18,530 しかし、最終的にそれら 補助輪はあまりにも外れ 975 00:43:18,530 --> 00:43:21,780 自分の快適さが強くなったとき。 976 00:43:21,780 --> 00:43:27,240 >> すべての権利なので、このことを思い出して、その後 最大の問題のようなものでした 977 00:43:27,240 --> 00:43:27,807 我々はに走りました。 978 00:43:27,807 --> 00:43:30,640 そして、それはこの全体を巻き起こしたものです ポインタについて気会話、 979 00:43:30,640 --> 00:43:32,340 アドレス、およびコピーの事。 980 00:43:32,340 --> 00:43:35,410 私たちがつまずいからです この愚かな、愚かな問題、それによって 981 00:43:35,410 --> 00:43:38,830 私はローレンとlogically--実装しました ここでのデモとオレンジジュースのアップ 982 00:43:38,830 --> 00:43:43,770 milk--で完全に アルゴリズム正しい関数 983 00:43:43,770 --> 00:43:47,010 2つの変数を「スワッピング 値が、こいつ 984 00:43:47,010 --> 00:43:50,550 任意の永続的なを持っていなかった、または 私のコードに恒久的、効果。 985 00:43:50,550 --> 00:43:51,820 >> そして、なぜそれがでしたか? 986 00:43:51,820 --> 00:43:54,650 一言で言えば、これはなぜです スワップの実装 987 00:43:54,650 --> 00:43:58,740 論理的に正しいが、影響を与えることはありません それに渡された変数に、 988 00:43:58,740 --> 00:44:01,119 メインのためのxとyのような? 989 00:44:01,119 --> 00:44:02,410 問題の要点は何でしたか? 990 00:44:02,410 --> 00:44:02,909 うん? 991 00:44:02,909 --> 00:44:05,532 聴衆:変数が作られているので パス内の変数のコピー 992 00:44:05,532 --> 00:44:06,240 スルー機能。 993 00:44:06,240 --> 00:44:09,060 >> DAVID J.マラン:その通り、ときに渡します 関数に変数、または引数 994 00:44:09,060 --> 00:44:11,030 関数に、彼らがしています コピーによって渡されます 995 00:44:11,030 --> 00:44:14,770 あなたが探している同一のを得ることを意味 xとyの両方のビットパターン 996 00:44:14,770 --> 00:44:15,955 AとBのここと呼ばれます。 997 00:44:15,955 --> 00:44:18,080 そして、あなたが何かを行うことができます あなたはそれらのコピーをしたいです、 998 00:44:18,080 --> 00:44:20,657 しかし、彼らはありません必要があるとしています 呼び出し元の関数への影響。 999 00:44:20,657 --> 00:44:22,990 そして、実際には、我々はそれを描きました 画面上の画像、リコール 1000 00:44:22,990 --> 00:44:25,520 前回、それによってあなたの場合 本当に何を考えます 1001 00:44:25,520 --> 00:44:28,570 場合hood--の下で起こっ これはあなたのコンピュータのメモリであり、 1002 00:44:28,570 --> 00:44:31,650 ここでダウンの塊です メモリは、主に使用されています 1003 00:44:31,650 --> 00:44:34,020 これはの塊です メモリは、スワップのために使用されています 1004 00:44:34,020 --> 00:44:37,090 主が持っているので、場合でも、 2つの変数xとy、 1005 00:44:37,090 --> 00:44:41,840 スワップは、同一の探している場合があり 1および2はどちらの値、 1006 00:44:41,840 --> 00:44:44,520 しかし、彼らは完全にしています メモリの異なるチャンク。 1007 00:44:44,520 --> 00:44:46,130 >> だから我々は、これに対する解決策を必要としています。 1008 00:44:46,130 --> 00:44:51,580 そして率直に言って、それは今ように思われます 右、この問題の解決策を持っています。 1009 00:44:51,580 --> 00:44:55,760 我々は今の能力を持っている場合 アドレスにより物事を操作します 1010 00:44:55,760 --> 00:44:59,310 そして、、ソートのシュートとはしご スタイル、これらの矢印に従ってください 1011 00:44:59,310 --> 00:45:02,820 そして私たちが望むどこにでも行きます メモリでは、できませんでした 1012 00:45:02,820 --> 00:45:06,220 することによって、この問題を解決します メインからスワップに渡します 1013 00:45:06,220 --> 00:45:09,650 我々はしたくない値 スワップが、ちょうど直感的に 1014 00:45:09,650 --> 00:45:11,630 私たちは、代わりにスワップするために渡すことができますか? 1015 00:45:11,630 --> 00:45:12,620 >> 【声を挟ん] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J.マラン:なぜ我々だけではないん それは右、アドレス渡しますか? 1017 00:45:15,244 --> 00:45:17,470 なぜ我々はスワップaを与えていません 宝の地図、あなたがする場合は、 1018 00:45:17,470 --> 00:45:20,950 それはそれを導きます 実際の値xとy。 1019 00:45:20,950 --> 00:45:24,340 レッツスワップ、実際に変更 それらのオリジナルのビットではなく、 1020 00:45:24,340 --> 00:45:26,797 ちょうどビットのコピーを渡します。 1021 00:45:26,797 --> 00:45:29,130 だから、実際には、それが何です 解決策になるだろう。 1022 00:45:29,130 --> 00:45:31,899 このバージョンはこちら 明らかに悪いと欠陥があります。 1023 00:45:31,899 --> 00:45:35,190 そして今、一見、それだけに見えます 以下のような我々は、ランダムに星の束を追加しました 1024 00:45:35,190 --> 00:45:37,106 私たちの指を交差させ それはコンパイルすることを。 1025 00:45:37,106 --> 00:45:38,460 しかし、それは今、コンパイルします。 1026 00:45:38,460 --> 00:45:40,090 >> しかし、それでは、これらの事は何を意味するのか見てみましょう。 1027 00:45:40,090 --> 00:45:43,990 のと、残念ながら、作者 Cは別のシンボルを選択している可能性が 1028 00:45:43,990 --> 00:45:46,380 この小さなを作ります 明確にするが、スター・オペレーター 1029 00:45:46,380 --> 00:45:48,610 で異なる意味を持っています 二つの異なる文脈。 1030 00:45:48,610 --> 00:45:50,890 そして、我々は両方を見てきました、 しかしそれでは、区別してみましょう。 1031 00:45:50,890 --> 00:45:55,310 >> だから、一番上にアップし、 私はAとBを変更したとき 1032 00:45:55,310 --> 00:46:00,470 悪いではint型のであるから、 星、AとBをintへのバージョン、 1033 00:46:00,470 --> 00:46:01,740 以前、整数でした。 1034 00:46:01,740 --> 00:46:05,752 今、bは何ですか 良い、緑のバージョン? 1035 00:46:05,752 --> 00:46:06,900 彼らはアドレスです。 1036 00:46:06,900 --> 00:46:09,610 明確にするもの、のアドレス? 1037 00:46:09,610 --> 00:46:10,770 整数のアドレス。 1038 00:46:10,770 --> 00:46:12,520 私は事実そう int型のスター手段を言って 1039 00:46:12,520 --> 00:46:15,440 これは、のアドレスです 整数、特に。 1040 00:46:15,440 --> 00:46:19,120 >> だから今、コードの行に気付きます 何か他のものはあまりにも変更されています。 1041 00:46:19,120 --> 00:46:22,770 tmpがあるため、同じまま それだけで一時的な整数ですが、 1042 00:46:22,770 --> 00:46:24,110 そこにはメモリ魔法ません。 1043 00:46:24,110 --> 00:46:26,370 しかし、今の星を必要とします。 1044 00:46:26,370 --> 00:46:28,560 そして、実際には、すべての aとbの他の言及、 1045 00:46:28,560 --> 00:46:31,780 すべてのことだということに気づきます 赤から緑に変化します 1046 00:46:31,780 --> 00:46:34,209 私は接頭辞だということです 星とそれらの変数。 1047 00:46:34,209 --> 00:46:35,750 私はaとbをコピーしたくないので。 1048 00:46:35,750 --> 00:46:40,350 ので、私はちょうどaとbとのスワップをコピーする場合 AとB、私は実際に何を交換するのですか? 1049 00:46:40,350 --> 00:46:43,760 ただアドレスは、私が交換したいです これらのアドレスを散策。 1050 00:46:43,760 --> 00:46:44,860 そこに行きたい。 1051 00:46:44,860 --> 00:46:48,000 だからスター・オペレーター 私の関数の内部で、 1052 00:46:48,000 --> 00:46:51,700 ないパラメータリストの内側に、 あなたがそれらのアドレスに行くことを意味 1053 00:46:51,700 --> 00:46:54,490 実際にこれらの値を変更します。 1054 00:46:54,490 --> 00:46:56,500 >> だから何画像を行います 今の代わりのように見えます。 1055 00:46:56,500 --> 00:47:03,250 まあ、そうではなく私が渡しています aとbはない1のためにあると2-- 1056 00:47:03,250 --> 00:47:05,790 私は実際に追加する必要があります ここで一つの他の定義。 1057 00:47:05,790 --> 00:47:09,030 したがって、このチャンクと仮定 メモリの位置10にあります。 1058 00:47:09,030 --> 00:47:12,960 >> これは、位置11であるが、この 簡略化のビットは、 1059 00:47:12,960 --> 00:47:18,900 私は今、2つの選択肢があり、私はX渡すん yまたは私はそれらのアドレスを渡すのですか? 1060 00:47:18,900 --> 00:47:22,500 私はそれらのアドレスを渡す場合 このような、私はちょうど 1061 00:47:22,500 --> 00:47:25,390 今実装する必要があります 緑のコードあたりのスワップ 1062 00:47:25,390 --> 00:47:29,080 それは見ているときに、いつそう Bを見て、それだけでAとBをコピーしません 1063 00:47:29,080 --> 00:47:30,540 牛乳とオレンジジュースを移動します。 1064 00:47:30,540 --> 00:47:32,664 牛乳とオレンジジュース 隠喩は今、ブレークダウン 1065 00:47:32,664 --> 00:47:35,060 それらはコップであるため、 液体ではなく、マップの。 1066 00:47:35,060 --> 00:47:37,750 私たちは、代わりに移動する必要があります 10私たちに対処します 1067 00:47:37,750 --> 00:47:42,420 11に対応するために行く必要があり、 そのスワッピングロジックを実行。 1068 00:47:42,420 --> 00:47:45,580 >> だから、ロジックは同じですが、 我々はわずかに異なる方法が必要です 1069 00:47:45,580 --> 00:47:47,160 これらの変数にアクセスします。 1070 00:47:47,160 --> 00:47:52,400 だから最終的には、どのような プログラムでは、これがあるように見えることがあります。 1071 00:47:52,400 --> 00:47:56,610 swap.cで文字通りコピー 緑のバージョンを貼り付けました。 1072 00:47:56,610 --> 00:47:58,450 しかし、私は1つの変更を行う必要があります。 1073 00:47:58,450 --> 00:48:00,180 それはちょうど、スワップを変更するのに十分ではありません。 1074 00:48:00,180 --> 00:48:03,830 他にどのようなコードの行 私は変更する必要がありますか? 1075 00:48:03,830 --> 00:48:04,330 うん? 1076 00:48:04,330 --> 00:48:05,770 >> 観客:それは引数を取ります。 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J.マラン: それは、その引数を取ります。 1078 00:48:07,603 --> 00:48:09,985 だから私は、メインまでスクロールした場合、私は ただ、xとyに渡すことはできません、 1079 00:48:09,985 --> 00:48:12,820 そして、私は、最後の約束します 新しい構文の作品今日。 1080 00:48:12,820 --> 00:48:17,200 私はないのxに渡す必要があり、 Yが、xとyのアドレス。 1081 00:48:17,200 --> 00:48:20,400 そしてそれは、シンボルが判明 Cの著者が選んだこと 1082 00:48:20,400 --> 00:48:23,860 あなたがここにアンパサンドを使用している場合ではないと、あります ビット単位のアンパサンドと混同され、 1083 00:48:23,860 --> 00:48:27,130 あなたはアンパサンドを使用する場合 こことここアンパサンド、 1084 00:48:27,130 --> 00:48:29,570 これはあなたのために割り出し、 xのアドレスは何ですか、 1085 00:48:29,570 --> 00:48:31,740 多分それは何、10です Yのアドレスは、多分それはです 1086 00:48:31,740 --> 00:48:35,400 11、代わりのものを渡します。 1087 00:48:35,400 --> 00:48:37,210 >> だから、一度にすべてを吸収するためにたくさん。 1088 00:48:37,210 --> 00:48:40,190 しかし、ここでは、迅速で今見てみましょう 私たちの残りの4分 1089 00:48:40,190 --> 00:48:42,150 どこに物事がゆがんで行くことができます。 1090 00:48:42,150 --> 00:48:45,120 そして余談ですが、実際には 私はこの写真を撮りました、 1091 00:48:45,120 --> 00:48:46,920 TFは1年か2年前にこの写真を撮りました。 1092 00:48:46,920 --> 00:48:49,190 だから、これは背面の角です エリオットダイニングホール。 1093 00:48:49,190 --> 00:48:52,310 ポインタは、おそらく最も難しいです 我々はCS50でカバーするトピック。 1094 00:48:52,310 --> 00:48:54,810 ですから、並べ替えを心配している場合 多分それはだような斜面であります 1095 00:48:54,810 --> 00:48:56,770 ホッケースティックのより このように、実現 1096 00:48:56,770 --> 00:49:00,160 我々は種類の中でピークに近づいています 概念的な複雑さの点。 1097 00:49:00,160 --> 00:49:02,300 >> そして、私はこれを持ち出します 写真、私は誓う理由 1098 00:49:02,300 --> 00:49:05,920 私が撮った秋1996年の神、に 私の指導員とCS50、 1099 00:49:05,920 --> 00:49:09,620 Nishatメータ、彼は私を座っ ランチオーバーエリオットD.ホールの隅、 1100 00:49:09,620 --> 00:49:12,330 または夕食、またはしようとするもの 私はポインタを理解するのに役立ちます。 1101 00:49:12,330 --> 00:49:16,520 私は数週間後にあった場所そしてこれはあります それは講義時に導入されました 1102 00:49:16,520 --> 00:49:18,170 私は最終的にポインタを理解していました。 1103 00:49:18,170 --> 00:49:20,590 そして、私はこのことを期待しています あなたのためにはるかに早くクリックします。 1104 00:49:20,590 --> 00:49:23,540 しかし、絶対の間でこれを実現 より洗練されたトピック 1105 00:49:23,540 --> 00:49:24,420 我々は見てきました。 1106 00:49:24,420 --> 00:49:25,819 しかし、それは最も強力な間です。 1107 00:49:25,819 --> 00:49:28,860 あなたはそれを得るとき、それは本当にすべてです ただ、最終的に一緒に来るつもり。 1108 00:49:28,860 --> 00:49:31,460 だから、残りはそれがない安心しました 今日のすべてのシンクにする必要があります。 1109 00:49:31,460 --> 00:49:32,980 >> そこでここでは最後のプログラムです 我々が見てするつもりです。 1110 00:49:32,980 --> 00:49:35,605 そして、我々はで終了するつもりです クレイメーションの迅速な3分 1111 00:49:35,605 --> 00:49:37,030 私たちの友人、ニックParlanteによって作ら。 1112 00:49:37,030 --> 00:49:41,440 ここでは、プログラムは、その上の2つに、です 行は、変数xとyを宣言します。 1113 00:49:41,440 --> 00:49:44,780 アドレスでどちらも 整数の、AKAポインタ。 1114 00:49:44,780 --> 00:49:48,125 我々は、次に、十分に割り当てます 整数を格納するためのメモリ 1115 00:49:48,125 --> 00:49:51,344 そして、アドレスを格納 xのそのメモリの。 1116 00:49:51,344 --> 00:49:53,260 だから、それはさらに簡単です 前の例よりも。 1117 00:49:53,260 --> 00:49:56,100 私は4バイトのメモリを与え、 それは、int型のサイズですが、 1118 00:49:56,100 --> 00:49:58,000 そしてxにそのアドレスを置きます。 1119 00:49:58,000 --> 00:50:01,070 この行は、ここで意味します xのアドレスに移動 1120 00:50:01,070 --> 00:50:05,270 との意味を置きます 人生、そこに数42。 1121 00:50:05,270 --> 00:50:07,710 しかし、この行は私を心配します。 1122 00:50:07,710 --> 00:50:12,620 スターY手段は、yのアドレスに移動 そしてそこに不吉な数13を置きます。 1123 00:50:12,620 --> 00:50:15,780 なぜそれが、この時点で、危険です story--で急速に語ったとはいえ 1124 00:50:15,780 --> 00:50:17,980 私たちの衰退分で here--なぜそれが悪いです 1125 00:50:17,980 --> 00:50:19,660 私が言うの、yのアドレスに行きますか? 1126 00:50:19,660 --> 00:50:21,077 >> 観客:あなたが持っていない[聞こえません]。 1127 00:50:21,077 --> 00:50:22,910 DAVID J.マラン:私はそうではありません Yには何も入れて。 1128 00:50:22,910 --> 00:50:25,520 だから、yの値が何でありますか、 物語の中で、この時点では? 1129 00:50:25,520 --> 00:50:26,570 我々は考えています。 1130 00:50:26,570 --> 00:50:29,190 これは、いくつかのゴミ値です そして、もBinkyは知りません。 1131 00:50:29,190 --> 00:50:32,532 私たちはこのノートに終了することができれば。 1132 00:50:32,532 --> 00:50:34,832 >> [ビデオ再生] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey、Binkyは、目を覚まします。 1134 00:50:36,500 --> 00:50:39,140 これは、ポインタの楽しみのための時間です。 1135 00:50:39,140 --> 00:50:40,210 >> -あれは何でしょう? 1136 00:50:40,210 --> 00:50:41,690 ポインタについては、こちらをご覧ください! 1137 00:50:41,690 --> 00:50:43,570 ああ、グッディ。 1138 00:50:43,570 --> 00:50:46,600 >> 型ウェル、始めるために、私たちは推測しています カップルのポインタが必要になります。 1139 00:50:46,600 --> 00:50:47,380 >> -OK。 1140 00:50:47,380 --> 00:50:51,120 このコードは2つのポインタを割り当て、 これは整数を指すことができます。 1141 00:50:51,120 --> 00:50:53,557 >> -OK、よく私が見ます 二つのポインタが、彼ら 1142 00:50:53,557 --> 00:50:55,140 何を指しているようには見えません。 1143 00:50:55,140 --> 00:50:55,970 >> -そのとおり。 1144 00:50:55,970 --> 00:50:58,100 最初のポインタ 何を指していません。 1145 00:50:58,100 --> 00:51:00,950 彼らが指すものがあります 指示先と呼ばれ、それらを設定します 1146 00:51:00,950 --> 00:51:02,330 別のステップです。 1147 00:51:02,330 --> 00:51:03,210 >> -OH、右、右。 1148 00:51:03,210 --> 00:51:03,940 私はそれを知っていました。 1149 00:51:03,940 --> 00:51:05,730 指示先は別のものです。 1150 00:51:05,730 --> 00:51:08,310 それでは、どのように指示先を割り当てていますか? 1151 00:51:08,310 --> 00:51:11,960 >> -OK、よくこのコード割り当て 新しい整数ポインタの指示、 1152 00:51:11,960 --> 00:51:15,050 この部分集合Xがそれを指すように。 1153 00:51:15,050 --> 00:51:16,240 >> -Hey、それが良く見えます。 1154 00:51:16,240 --> 00:51:17,743 だから、何かを作ります。 1155 00:51:17,743 --> 00:51:23,580 >> -OK、私はよへのポインタのx間接参照 その指示に数42を格納します。 1156 00:51:23,580 --> 00:51:27,130 このトリックのために、私は私が必要となります 逆参照の魔法の杖。 1157 00:51:27,130 --> 00:51:30,200 >> 逆参照の - あなたの魔法の杖? 1158 00:51:30,200 --> 00:51:32,310 ええと、それは、それは素晴らしいことです。 1159 00:51:32,310 --> 00:51:34,270 >> - これは、コードがどのように見えるかです。 1160 00:51:34,270 --> 00:51:35,970 私はちょうど数を設定しますand-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> -Hey、それが行くそこに見えます。 1163 00:51:39,140 --> 00:51:43,980 そこで、X上で間接参照を行うと、以下の 矢印は、その指示にアクセスします。 1164 00:51:43,980 --> 00:51:46,150 この場合には、そこに42を格納します。 1165 00:51:46,150 --> 00:51:50,700 ねえ、番号を格納するためにそれを使用してみてください 他のポインタを介して13、Y。 1166 00:51:50,700 --> 00:51:51,840 >> -OK。 1167 00:51:51,840 --> 00:51:56,270 私はちょうどyにこっちに行きますよ、 その数13セットアップを取得します。 1168 00:51:56,270 --> 00:52:00,380 そしての杖を取ります 逆参照とjust-- 1169 00:52:00,380 --> 00:52:01,646 >> [ブザー音] 1170 00:52:01,646 --> 00:52:04,080 >> -OH、ちょっとそれは動作しませんでした。 1171 00:52:04,080 --> 00:52:06,470 、Binkyええと、私はしない、と言います 逆参照思います 1172 00:52:06,470 --> 00:52:10,850 設定するのでyは、良いアイデアです 指示先までの別のステップです。 1173 00:52:10,850 --> 00:52:12,480 そして、私たちは今までそれをやったとは思いません。 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm、良い点。 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah、我々はポインタ、Yが割り当てられますが、 我々は、指示先を指すように設定することはありません。 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm、非常に注意深いです。 1177 00:52:21,590 --> 00:52:23,215 -Hey、あなたは、そこにBinkyの良い探しています。 1178 00:52:23,215 --> 00:52:26,390 Y指すようにあなたはそれを修正することができます xと同じ指示先へ。 1179 00:52:26,390 --> 00:52:29,290 >> -Sure、私は私の魔法の杖を使用 ポインタ代入の。 1180 00:52:29,290 --> 00:52:31,970 >> なるだろうということ-is 前のような問題は、? 1181 00:52:31,970 --> 00:52:33,790 >> - いいえ、これは指示先に触れていません。 1182 00:52:33,790 --> 00:52:35,840 それはちょうど1ポインタを変更します 同じthing--を指すように 1183 00:52:35,840 --> 00:52:36,465 >> 【ポッピングSOUND] 1184 00:52:36,465 --> 00:52:37,450 別の--as。 1185 00:52:37,450 --> 00:52:38,440 >> -OH、私が参照してください。 1186 00:52:38,440 --> 00:52:41,200 xと同じ場所に今のyポイント。 1187 00:52:41,200 --> 00:52:42,950 だから、今yが固定されている、待ってください。 1188 00:52:42,950 --> 00:52:44,110 これは、指示先があります。 1189 00:52:44,110 --> 00:52:47,779 だから、の杖を試すことができます 13オーバーを送信するために再び逆参照。 1190 00:52:47,779 --> 00:52:51,110 >> -OH、[OK]を、ここに行きます。 1191 00:52:51,110 --> 00:52:52,330 >> -Hey、その見てください。 1192 00:52:52,330 --> 00:52:53,570 今すぐYの作品を参照解除。 1193 00:52:53,570 --> 00:52:57,900 そして、ポインタが共有しているため、 1指示先ことを、彼らは両方の13を参照してください。 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah、共有、ええと、何でも。 1195 00:52:59,952 --> 00:53:01,535 そこで、我々は今の場所を切り替えるするつもりですか? 1196 00:53:01,535 --> 00:53:03,730 >> -OH、我々は時間の外出に見えます。 1197 00:53:03,730 --> 00:53:04,660 >> -だけど - 1198 00:53:04,660 --> 00:53:06,520 >> 3ポインタのルールを覚えて-Just。 1199 00:53:06,520 --> 00:53:09,550 ナンバー1、基本的な構造 あなたはポインタを持っているということです、 1200 00:53:09,550 --> 00:53:11,630 それは指示先にポイント以上。 1201 00:53:11,630 --> 00:53:13,740 しかし、ポインタと 指示先は別のものです。 1202 00:53:13,740 --> 00:53:15,620 そして、一般的なエラー ポインタを設定することです 1203 00:53:15,620 --> 00:53:18,000 しかし、それを指示先を与えることを忘れています。 1204 00:53:18,000 --> 00:53:21,170 >> ナンバー2、ポインタの参照解除 ポインタで始まり、 1205 00:53:21,170 --> 00:53:24,020 オーバーその矢印をたどります その指示にアクセスします。 1206 00:53:24,020 --> 00:53:27,815 我々はすべて知っているように、これだけあった場合に動作します 種類のバックを取得指示先であり、 1207 00:53:27,815 --> 00:53:29,260 番号1を支配します。 1208 00:53:29,260 --> 00:53:31,990 >> ナンバー3、ポインタ 割り当ては1ポインタを取ります 1209 00:53:31,990 --> 00:53:35,330 とを指すように変更 別のポインタと同じ指示先。 1210 00:53:35,330 --> 00:53:37,150 そこで割り当てた後、 二つのポインタ 1211 00:53:37,150 --> 00:53:40,927 同じ指示先を指すようになります、 時にはそれは、共有と呼ばれています。 1212 00:53:40,927 --> 00:53:42,510 そして、それは本当に、これだけです。 1213 00:53:42,510 --> 00:53:43,130 バイバイ今。 1214 00:53:43,130 --> 00:53:43,475 >> [END再生] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J.マラン:それはCS50のためにそれです。 1216 00:53:44,830 --> 00:53:46,246 教授ニックParlanteに感謝します。 1217 00:53:46,246 --> 00:53:47,730 私たちは来週お会いしましょう​​。 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [電子音楽の演奏] 1220 00:53:56,435 --> 00:57:22,775