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 حسنا. 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 >> -Hold ذلك. 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 >> -هناك، وتجميد ذلك. 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 -Vector على ذلك في الرجل من العجلة الخلفية. 31 00:01:16,530 --> 00:01:19,400 -Zoom في الحق هنا على هذه البقعة. 32 00:01:19,400 --> 00:01:22,846 ، مع المعدات المناسبة، وصورة يمكن توسيع وشحذ. 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 هل يمكن كنت واضحا أن ما يصل أي؟ 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 >> -Enhance قسم A6. 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 -انعكاس. 48 00:01:45,495 --> 00:01:47,399 -هناك من انعكاس لوجه الرجل. 49 00:01:47,399 --> 00:01:48,065 انعكاس -THE. 50 00:01:48,065 --> 00:01:48,981 -هناك من انعكاس. 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 هل يمكن أن تعزز صورة من هنا؟ 54 00:01:54,350 --> 00:01:55,370 هل يمكن أن تعزز به هنا؟ 55 00:01:55,370 --> 00:01:56,210 هل يمكن أن تعزز ذلك؟ 56 00:01:56,210 --> 00:01:56,900 يمكنك تعزيز ذلك؟ 57 00:01:56,900 --> 00:01:57,870 >> هل يمكن أن نعزز هذا؟ 58 00:01:57,870 --> 00:01:58,717 >> هل يمكن أن تعزز ذلك؟ 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 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -امضي. 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 -Rotate لنا 75 درجة حول رأسي، من فضلك. 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 >> ، مع الحق مزيج من 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 >> القفل على وتوسيع محور ض. 79 00:02:31,286 --> 00:02:32,560 >> -تحسين. 80 00:02:32,560 --> 00:02:33,100 >> -تحسين. 81 00:02:33,100 --> 00:02:33,600 >> -تحسين. 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 يتوهم أشياء مثل المتجهات الذاتية، ومحور ض، 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 أو تلفزيونات LCD، إذا كنت قد حصلت على واحد في غرفتك أو في المنزل، 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 ذلك لسوء الحظ مع مجرد واحد بت 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 مثل إذا كان العامل المحدد هنا غير أنه مع بت واحد يمكنك فقط 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 أو تحميلها أو ينظر إليها على شيء الفيسبوك أو فليكر، أي عدد 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 اتضح أن أول ثلاثة بايت في image-- JPEG 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 الممثلة هنا إلى ثلاثة بايت أو 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 مع أنماط معينة من 0S و1S، حتى أن ويندوز، وماك OS، ودائرة الرقابة الداخلية، 183 00:07:23,735 --> 00:07:28,272 والروبوت أعرف أي نوع من الملفات التي هي، بالإضافة إلى ما يسمى ملف 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، حيث تمثل ما و رقم عشري، تماما كما التعقل سريعة 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 >> لذلك إذا نظرنا إلى هذا النمط ثلاثة 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 يمكنك التفكير بالتأكيد حول الملفات في 0S، و1S، والعشرية، 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 هي فقط هذه الأنماط من 0S و1S. 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 لقد إعادة كتابة فقط ثلاثة عشري أرقام عن ثلاثة القيم الثنائية. 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 أن إشعار كل مجموعة من ثمانية بت الآن مجموعتين من أربعة أجزاء. 214 00:08:50,380 --> 00:08:54,920 هذا مفيد لأن ست عشري هو المألوف بشكل خاص 215 00:08:54,920 --> 00:09:00,930 لأن كل رقم عشري من 0 إلى و، أو بشكل أكثر تحديدا من 0 إلى 15، 216 00:09:00,930 --> 00:09:03,430 يمكن تمثيل بالضبط مع أربعة بت. 217 00:09:03,430 --> 00:09:07,960 وبعبارة أخرى، إذا كنت في ست عشري تريد أن تمثل 0، انها فقط 0000، 218 00:09:07,960 --> 00:09:08,780 أربعة أصفار. 219 00:09:08,780 --> 00:09:13,997 وإذا كنت ترغب في تمثيل 15، انها 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 لذلك اسمحوا لي أن أقترح أن مجموعة من أربعة بت على اليسار 225 00:09:26,821 --> 00:09:28,070 ما نحن في طريقنا للدعوة و. 226 00:09:28,070 --> 00:09:30,110 انها أكبر الرقم الذي يمكن أن تمثل مع أربعة بت. 227 00:09:30,110 --> 00:09:33,300 ونحن نعرف بالفعل من عشري، و هو أكبر رقم في ست عشرية. 228 00:09:33,300 --> 00:09:36,020 لدينا و آخر هناك، اثنين آخرين هناك. 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 هو نفس الشيء د الست عشري. 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 وrepresents-- 8 هو الحق تحت هذا المكان الثمانيات. 235 00:09:51,670 --> 00:09:56,040 لذلك لدينا واحدة في العمود الثمانيات ولا يوجد في أربع، ثنائي أو تلك. 236 00:09:56,040 --> 00:09:59,830 وحتى الآن أكثر تقليديا، والبشر يميلون لكتابة أرقام ست عشرية مثل هذا، 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 >> وهو ما يعني، في نهاية المطاف، أن نمط الأصفار ومنها، 241 00:10:13,629 --> 00:10:16,170 أو نمط الست عشري أرقام مكافئ أنك 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، يجري لفي كثير من الأحيان تظهر لك القيم الست عشرية 248 00:10:35,440 --> 00:10:39,910 فقط لأنها تميل إلى أن تكون أكثر التقليدية من عشري أو ثنائي 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 ويندوز فيستا، وذلك حتى في وقت سابق من أنه فعل ويندوز XP هذا لاول مرة. 253 00:10:51,240 --> 00:10:52,620 لذلك هذا هو المناظر الطبيعية الجميلة. 254 00:10:52,620 --> 00:10:55,940 وفي الواقع، إذا كنت كزة حول online-- أعتقد أنه من مقال ويكيبيديا، 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-م-ص. 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 في 0S و1S، في نهاية المطاف. 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 انها ليست مجرد ثلاث بايت، بدلا هناك 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 المعلومات المفيدة التي فوتوشوب أو أي برنامج الرسومات الذي تستخدمه 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--، 274 00:11:52,390 --> 00:11:55,820 أرقام الملفات، ملفات اكسل، أي عدد من تنسيقات الملفات 275 00:11:55,820 --> 00:11:57,770 التي قد يكون لها بعض تمديد الملفات المعروفة 276 00:11:57,770 --> 00:12:00,130 هي مجرد 0S و1S تحت غطاء محرك السيارة. 277 00:12:00,130 --> 00:12:02,970 ولقد قرر البشر ما هي الاتفاقيات، 278 00:12:02,970 --> 00:12:08,340 ما أنماط 0S و1S تمثل ملف وورد مقابل ملف إكسل، 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 الحضور: رقم العدد؟ 300 00:12:54,390 --> 00:12:57,460 DAVID J. مالان: لذلك فإن رقم الهوية، وربما رقم هاتف، وربما النوم، أو المنزل، 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 قد يكون لدينا برنامج بحيث له دعنا نقول، كثافة العمليات الرئيسي (الفراغ). 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 ربما عدد صحيح يسمى ID لهذا الطالب. 309 00:13:26,900 --> 00:13:30,840 ولأن أنا باستخدام سلسلة، I بحاجة إلى العودة وطرح 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 حسنا، هذا هو البرنامج الذي يخزن بطريقة أو بأخرى طالب. 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 الباحث ID2. 321 00:14:04,190 --> 00:14:06,540 وفعلناه ذهب هذا الطريق من قبل 322 00:14:06,540 --> 00:14:10,890 وما هو الحل لدينا ما يبدو أن يكون نوع من عجينة نسخة hackish 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 لمجرد وجود ليطلق أسماء سلسلة وربما تعطينا ثلاثة من هؤلاء. 333 00:14:34,300 --> 00:14:36,940 وبعد ذلك ربما لدينا مساكن سلسلة ولها 334 00:14:36,940 --> 00:14:41,900 ثلاثة من هؤلاء، أو مع ثابت، كثافة العمليات هويات ولها ثلاثة من هؤلاء. 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 يقول لدي فئة كاملة من الطلاب، وانها ثلاثة منهم. 343 00:15:09,740 --> 00:15:12,470 وبعبارة أخرى، لماذا لا يمكن أن آتي مع بلدي نوع البيانات الخاصة، ودعا 344 00:15:12,470 --> 00:15:15,641 الطلاب، داخل منها اسم، هو الهوية، هو النوم، 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 اتضح - وهذا واحد حتى أبسط من تلك التي تنطوي على ID 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 وبالإضافة إلى كثافة العمليات، وشار و تطفو وجميع أولئك الآخرين موجودة، 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 في ملف يسمى شيء دوت ساعة، ملف رأس، والتي ليس لدينا 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 لذلك قد نذكر 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 ثم، فجأة على خط الستة أنا باستخدام علامات الاقتباس المزدوجة. 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 شيء # تعريف. 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 ليس لدي مجرد الحصول على الباحث، وشار، وتعويم، وسلسلة، 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، وأنا الجمع بين اثنين الأفكار- واحدة نوع البيانات المخصصة واثنين، 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 وعلى وجه التحديد، أعطني ثلاثة من هؤلاء في مجموعة بي. 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 يعطيك الطالب ط عشر. 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 أن نراه اثنين، ميزة أخرى من 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 انها مثل الرجل سيئة للغاية نسخة من ملف إكسل، 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 لهذه الوظيفة جديدة تسمى و مفتوحة لفتح الملف هو ث. 467 00:20:37,700 --> 00:20:39,430 ما قد دلالة ث؟ 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 وقراءتها في الذاكرة، مجرد استخدام الإقتباس "ص". 474 00:20:50,010 --> 00:20:53,110 إذا كنت تريد أن تكتب ل ملف، يمكنك استخدام الإقتباس "ث". 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. مالان: طباعة تنسيق سلسلة إلى ملف. 490 00:21:29,290 --> 00:21:31,180 هذا ما الإضافي و الوسائل هي الملف. 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 إذا كنت اكتب ليرة سورية في دليل بلدي، لاحظت أنني لا 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 ولكن إذا كنت اكتب ليرة سورية الآن، هناك 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 ولكني اعتمدت مجرد اتفاقية أن لدي اثنين من الصفوف والأعمدة هنا. 514 00:22:49,570 --> 00:22:52,020 العمود الأول هو أسماء الناس الأولى. 515 00:22:52,020 --> 00:22:55,740 العمود الثاني هو الطالب النوم، أو الكلية، أو المنزل، أو غيرها. 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 إذا كان لدي إكسل أو أرقام هنا. 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 فقط حتى أستطيع أن الاستيلاء على هذه واحدة. 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 حسنا، الآن نحن على استعداد لفئة. 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 حسنا، الآن لدينا لتحديث. 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 حسنا، الآن لدينا ملف إكسل. 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 بالطبع كان يمكن أن مثبتة مسبقا إكسل، أو أرقام، أو أي برنامج. 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 في الواقع هو أكثر من ذلك بقليل ودعا التقنية شار *. 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، إذا I إعادة ترجمة البرنامج يوم الاثنين 596 00:26:17,910 --> 00:26:22,670 وتشغيل مقارنة-0 واكتب في أمي في صغيرة، وأمي في صغيرة مرة أخرى. 597 00:26:22,670 --> 00:26:25,320 أصر برنامج I اكتب أشياء مختلفة، 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 يمكن أن يكون الكمبيوتر الذكية و تحقيق هذه السلسلتين، مهلا، 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 في مكانين مختلفين في الذاكرة. 614 00:26:57,670 --> 00:27:01,570 وذلك لتكون أكثر وضوحا، عندما قارنا السلسلتين، 615 00:27:01,570 --> 00:27:03,950 أول كان يسمى الصورة، كان يسمى الثانية 616 00:27:03,950 --> 00:27:08,530 ر، ما كان على وجه التحديد I مقارنة هنا على خط 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 والمثال الآخر من أمي، م، س، م، كان في عنوان 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 أنها لا يصطف شار ل شار، فقط بعبارات عامة، 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 وإذا كنا قد حصلت على سلسلتين مكان ما في الذاكرة، دعونا ننظر في كل ل 641 00:28:08,840 --> 00:28:11,770 الحرف الأول، ثم كل ثاني حرف، ثم الثالث، والرابع، 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 إن لم يكن، عودة كاذبة. 648 00:28:22,990 --> 00:28:24,770 إذا كان الأمر كذلك، العودة الحقيقية. 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 ولكن لنرى بوضوح أن الصورة ور هي عناوين. 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 وأقول شار * ق، 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 أنا فحص للتأكد من أن الصورة ليست لاغية وتي ليست فارغة. 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 كتبته في مثل هذا كلمة طويلة أو الجملة 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 ليس لدينا لتنفيذ هذا مع لحلقة أو حلقة في حين أنفسنا. 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 كنت تعطيه اثنين من المؤشرات، عنوانين، وأنها سوف تذهب إلى تلك العناوين 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 والآن دعونا نمضي قدما والواقع دعونا نفعل this-- مع النسخ 0، 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 ثم أحصل على سلسلة وأنا تخزينها في الصورة. 709 00:31:26,420 --> 00:31:29,810 بعد ذلك معرفة ما اذا كان يساوي الصورة يساوي NULL، والعودة فقط 1. 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 الحضور: هل ر الحصول على عنوان الصورة؟ 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. مالان: بالضبط، ر هو الحصول على عنوان الصورة. 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 هذا هو ما هو حاليا في الصورة. 732 00:32:24,655 --> 00:32:29,220 حتى لو كان على خط 16، وأنا أقول أن تعطيني آخر متغير يسمى ر وتخزين 733 00:32:29,220 --> 00:32:33,590 في في قيمة الصورة، ما يحصل المخزنة هنا سوف لا أمي 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، وأنا الذهاب للاستفادة النسخة ر. 739 00:32:48,170 --> 00:32:51,616 في الخط الأول 19، التعقل سريعة تحقق، الشيكات strlen طول ر. 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 إذا كان المستخدم ضرب فقط أدخل، لا يوجد شيء للاستفادة. 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 >> الحضور: م؟ 746 00:33:06,514 --> 00:33:08,722 DAVID J. مالان: يبدو كما انها نسخ أي واحد؟ 747 00:33:08,722 --> 00:33:09,486 الحضور: م. 748 00:33:09,486 --> 00:33:10,450 DAVID J. مالان: اه، م. 749 00:33:10,450 --> 00:33:12,685 OK، وبالتالي فإن اول م، لاحظ أن أنا 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 تي قوس الصفر يعني إعطاء لي حرف صفر ر. 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 ما يحتاج إلى الحصول على إعادة كتابة أو تغييرها فيما يتعلق الصورة ور وأمي 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. مالان: نعم، لذلك هذا واحد هنا ببساطة 759 00:33:34,030 --> 00:33:40,860 يحتاج إلى الحصول على تغيير to-- إصلاح this-- يحتاج إلى الحصول على تغيير لم رأس المال. 760 00:33:40,860 --> 00:33:44,330 ولكن الآن، أن ننظر في وقت لاحق برنامج، إذا كنت طباعة 761 00:33:44,330 --> 00:33:49,800 الصورة ور وأنا تنظيف هنا، ومشاهدة ما سيحدث طبع الصورة ور. 762 00:33:49,800 --> 00:33:54,310 وهكذا جعل نسخة-0، ./copy-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 حسنا، ق و ر على حد سواء مشيرا إلى، اذا صح التعبير، نفس قطعة من الذاكرة. 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 لا يهمني إذا كان في بايت واحد أو واحدة مليار دولار. 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 بسبب الطريقة أنا خلقت ر، انها اثنين فقط من متغيرات مستقلة 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 ثم عندما أقوم بتغيير نسخة، I لا تريد تغيير هذه النسخة هنا. 797 00:35:19,770 --> 00:35:26,020 I بدلا من ذلك تريد فقط تغيير هذا نسخة بحيث الأصلي هو دون تغيير. 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 والذي يطلق عليه ق. 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، وعلى الجانب الأيسر، شار ر * يعطيني هذا الإطار أكثر من هنا. 809 00:35:59,400 --> 00:36:00,230 هذا هو كل ما يفعل. 810 00:36:00,230 --> 00:36:03,240 على الجهة اليمنى، م الوك، أو 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 حتى ثلاث سنوات فقط، أليس كذلك؟ أمي هي ثلاثة أحرف. 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 لماذا أريد فعلا ل تخصيص 4 بايت وليس مجرد 3؟ 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 لكنه لن يقول لي كم بايت ل شار هو، والتي تبين دائما 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 إلى طول الصورة السلسلة. 847 00:37:31,920 --> 00:37:37,820 وأنا نسخ حرف ط ال في الصورة في حرف ط ال تي في. 848 00:37:37,820 --> 00:37:41,820 ولأنني، مبرمج، أدلى تأكد من تخصيص تماما كما العديد من بايت 849 00:37:41,820 --> 00:37:44,600 وأنا في حاجة، انها مثالية واحد الى واحد العلاقة. 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 وبالتالي فإن تأثير فقط للاستفادة هذه ر هنا. 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 المثال الآخر الذي يكاد متطابقة، فيما عدا هذا واحد 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 تستخدم ليكون هذا طن قوس ط يحصل ق قوس ط. 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 رأينا سابقا شار *، وأنا الآن اراه نجم في البداية، وهذا موافق. 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 ما هو الصورة، على وجه التحديد؟ 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 حسنا، ما هو ر؟ 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 اذا كنت صفرا، مضيفا الصفر إلى شيء يفترض 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 هو dereference المشغل، الذي هو مجرد 891 00:39:33,700 --> 00:39:37,530 طريقة أخرى للقول ذهاب على العنوان التالي. 892 00:39:37,530 --> 00:39:42,080 حتى إذا الصورة هو عنوان أول حرف في هذا قطعة من الذاكرة، 893 00:39:42,080 --> 00:39:43,630 * الصورة سيلة الذهاب إلى هناك. 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 *، * الصورة وكأنه نوع من المزالق وسلالم، 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 >> * تي هو نفس الشيء. 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 * ر يعني أن يذهب هنا. 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 ولكن كيف أفعل ذلك incrementation؟ 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 والصورة هي عنوان وتي هو عنوان، إذا أنا فقط الحفاظ على إضافة 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 >> الحضور: فأين ذلك يقول ر * يساوي toupper * ر، 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 هو وظيفة أن تستفيد شار. 934 00:41:29,770 --> 00:41:30,530 هذا كل شيء. 935 00:41:30,530 --> 00:41:36,740 * ر يعني الذهاب إلى first-- الانتقال إلى العنوان في تي. 936 00:41:36,740 --> 00:41:40,350 لذلك، في الصورة، وإذا كان هذا هو قطعة من الذاكرة نحن المخصصة مع malloc، 937 00:41:40,350 --> 00:41:43,310 وهذا هو ر، ر * يعني تذهب هنا. 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 كتابة الحرف الأول إلا إذا كنت مع تكرار ط أو 943 00:41:58,792 --> 00:42:02,000 لحلقة أو حلقة في حين، فإنه لن لفعل أي شيء أكثر من أن تسأل عليه. 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 >> الحضور: لماذا استخدام dereference طريقة بدلا من 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 لماذا استخدام dereference طريقة بدلا من أسلوب مصفوفة؟ 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 >> انها لا تزال التصميم الجيد، خمسة من أصل خمسة لتصميم، 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 I نفذت logically-- مع لورين هنا على التجريبي وعصير البرتقال 982 00:43:38,830 --> 00:43:43,770 في milk-- وتماما الدالة الصحيح حسابيا 983 00:43:43,770 --> 00:43:47,010 لضخ متغيرين ' القيم، ولكن الشيء اللعين 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 دعا هنا أ و ب. 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 ويوجد لذلك حتى لو الرئيسية متغيرين، 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 >> [فاصلة VOICES] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. مالان: لماذا لا يمكننا فقط تمريرها عناوين، أليس كذلك؟ 1017 00:45:15,244 --> 00:45:17,470 لماذا لا نعطي تبادل ل خريطة الكنز، اذا صح التعبير، 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 >> حتى في أعلى هناك، عندما تغيرت أ و ب 1032 00:45:55,310 --> 00:46:00,470 من يجري في الباحث في سيئة نسخة إلى int النجوم، أ و ب، 1033 00:46:00,470 --> 00:46:01,740 في السابق، كانت صحيحة. 1034 00:46:01,740 --> 00:46:05,752 ما هي أ و ب الآن في حسن، الإصدار الأخضر؟ 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 ذلك أن أنا قائلا سائل نجمة الباحث 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 تمة يبقى على حاله، لأن انها مجرد صحيح مؤقتة، 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 و، في الواقع، كل ذكر الآخر من أ و ب، 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 لأنني لا أريد أن نسخ أ و ب. 1048 00:46:35,750 --> 00:46:40,350 لأنه إذا كان مجرد نسخ أ و ب ومبادلة أ و ب، ما أنا في الواقع مقايضة؟ 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 حسنا، إذا كان بدلا من ذلك أنا المارة في لأ و ب 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 لدي الآن خياران تفعل أمرر س و 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 ذلك أنه عندما يرى وعندما يرى ب، فإنه لا مجرد نسخ وب 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 ولكني في حاجة لجعل تغيير واحد. 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 حتى لو كنت انتقل لأعلى لالرئيسي، I لا يمكن أن يمر في x و y، 1079 00:48:09,985 --> 00:48:12,820 و، وأعدكم، وكان آخر قطعة من جملة جديد اليوم. 1080 00:48:12,820 --> 00:48:17,200 ولست بحاجة لتمرير في عدم x و ذ لكن عنوان 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 هذه أرقام للكم، ما هو عنوان السينية، 1085 00:48:29,570 --> 00:48:31,740 ربما حان 10، ما هو عنوان ذ، ربما هو 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 ولكن دعونا نرى الآن بسرعة في لدينا أربع دقائق المتبقية 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 هذه الصورة سنة أو سنتين مضت. 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 نيشات ميهتا، جلس لي باستمرار في ركن من أركان 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 ونحن في طريقنا لينتهي سريعة ثلاث دقائق من claymation 1111 00:49:35,605 --> 00:49:37,030 التي أدلى بها صديقنا، نيك Parlante. 1112 00:49:37,030 --> 00:49:41,440 وهنا البرنامج، على أن اثنين من كبار خطوط يعلن متغير 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 وتخزين عنوان من تلك الذاكرة في العاشر. 1116 00:49:51,344 --> 00:49:53,260 لذلك، فمن أبسط من المثال السابق. 1117 00:49:53,260 --> 00:49:56,100 أعطني أربعة بايت من الذاكرة، هذا هو حجم وكثافة العمليات، 1118 00:49:56,100 --> 00:49:58,000 ووضع هذا العنوان في العاشر. 1119 00:49:58,000 --> 00:50:01,070 هذا الخط يعني هنا الانتقال إلى العنوان في العاشر 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 نجم ذ يعني الانتقال إلى العنوان في ذ، ووضع عدد غير محظوظ 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 بالنسبة لي أن أقول، انتقل إلى عنوان في ذ؟ 1126 00:50:19,660 --> 00:50:21,077 >> الجمهور: ليس لديك (غير مسموع). 1127 00:50:21,077 --> 00:50:22,910 DAVID J. مالان: ليس لدي تضع أي شيء في ذ. 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 انها بعض القيمة القمامة وكما لا بينكي أعرف. 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، بينكي، يستيقظون. 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 >> -Well، لتبدأ، وأعتقد أننا سوف تحتاج إلى مؤشرات الزوجين. 1139 00:50:46,600 --> 00:50:47,380 >> -حسنا. 1140 00:50:47,380 --> 00:50:51,120 هذا الرمز يخصص اثنين من المؤشرات والتي يمكن أن نشير إلى أعداد صحيحة. 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 الأشياء التي نشير إليها هي دعا pointees وإقامتها 1146 00:51:00,950 --> 00:51:02,330 خطوة منفصلة. 1147 00:51:02,330 --> 00:51:03,210 >> أوه، والحق، والحق. 1148 00:51:03,210 --> 00:51:03,940 علمت ذلك. 1149 00:51:03,940 --> 00:51:05,730 وpointees منفصلة. 1150 00:51:05,730 --> 00:51:08,310 إذا كيف يمكنك تخصيص pointee؟ 1151 00:51:08,310 --> 00:51:11,960 >> -OK، حسنا هذا الرمز يخصص وpointee صحيح الجديدة، 1152 00:51:11,960 --> 00:51:15,050 وهذه مجموعات الجزء العاشر للإشارة إلى ذلك. 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، وسوف أكون dereference المؤشر العاشر ل تخزين رقم 42 في pointee لها. 1156 00:51:23,580 --> 00:51:27,130 لهذه الخدعة، أنا بحاجة بلدي عصا سحرية لdereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Your عصا سحرية من dereferencing؟ 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 لذلك، القيام dereference في العاشر يلي السهم للوصول إلى pointee لها. 1164 00:51:43,980 --> 00:51:46,150 في هذه الحالة، لتخزين 42 في هناك. 1165 00:51:46,150 --> 00:51:50,700 مهلا، حاول استخدامه لتخزين الرقم 13 من خلال مؤشر آخر، ذ. 1166 00:51:50,700 --> 00:51:51,840 >> -حسنا. 1167 00:51:51,840 --> 00:51:56,270 سأذهب فقط أكثر من هنا إلى ص، والحصول على عدد 13 الإعداد. 1168 00:51:56,270 --> 00:52:00,380 ثم أخذ عصا ل dereferencing وjust-- 1169 00:52:00,380 --> 00:52:01,646 >> [صوت الجرس] 1170 00:52:01,646 --> 00:52:04,080 >> أوه، يا التي لا تعمل. 1171 00:52:04,080 --> 00:52:06,470 أقول، اه، بينكي، وأنا لا أعتقد dereferencing 1172 00:52:06,470 --> 00:52:10,850 ذ هو فكرة جيدة، لأن وضع حتى pointee خطوة منفصلة. 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، ونحن تخصيص المؤشر، ص، ولكن نحن أبدا تعيينها للإشارة إلى pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm، ملاحظ جدا. 1177 00:52:21,590 --> 00:52:23,215 -Hey، كنت تبحث جيدة هناك، بينكي. 1178 00:52:23,215 --> 00:52:26,390 يمكنك إصلاحه بحيث نقطة ص لنفس pointee كما السينية. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure، يمكنني استخدام عصا سحرية الإحالة المؤشر. 1180 00:52:29,290 --> 00:52:31,970 >> -هل التي ستكون المشكلة، كما كان من قبل؟ 1181 00:52:31,970 --> 00:52:33,790 >> لا، هذا لا تلمس pointees. 1182 00:52:33,790 --> 00:52:35,840 يتغير فقط مؤشر واحد للإشارة إلى نفس 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 >> أوه، وأرى. 1186 00:52:38,440 --> 00:52:41,200 الآن نقطة Y لنفس المكان السينية. 1187 00:52:41,200 --> 00:52:42,950 لذلك، الانتظار، والآن هو ثابت ذ. 1188 00:52:42,950 --> 00:52:44,110 أنه يحتوي على pointee. 1189 00:52:44,110 --> 00:52:47,779 لذلك يمكنك محاولة عصا من dereferencing مرة أخرى لارسال اكثر من 13. 1190 00:52:47,779 --> 00:52:51,110 >> أوه، حسنا، هنا يذهب. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey، أن ننظر في ذلك. 1192 00:52:52,330 --> 00:52:53,570 dereferencing الآن يعمل على ذ. 1193 00:52:53,570 --> 00:52:57,900 ولأن مؤشرات تتقاسم أن pointee واحد، وكلاهما يرى 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 >> أوه، ننظر نحن من الوقت. 1197 00:53:03,730 --> 00:53:04,660 >> -لكن-- 1198 00:53:04,660 --> 00:53:06,520 >> ، فقط تذكر القواعد رمية ثلاثية. 1199 00:53:06,520 --> 00:53:09,550 عدد 1، والبنية الأساسية هو أن لديك مؤشر، 1200 00:53:09,550 --> 00:53:11,630 ويشير أكثر إلى pointee. 1201 00:53:11,630 --> 00:53:13,740 لكن المؤشر و pointee منفصلة. 1202 00:53:13,740 --> 00:53:15,620 والخطأ الشائع هو وضع مؤشر 1203 00:53:15,620 --> 00:53:18,000 ولكن أن ننسى أن تعطيه pointee. 1204 00:53:18,000 --> 00:53:21,170 >> عدد 2، المؤشر dereferencing يبدأ في مؤشر 1205 00:53:21,170 --> 00:53:24,020 ويلي السهم على مدى للوصول pointee لها. 1206 00:53:24,020 --> 00:53:27,815 كما نعلم جميعا، وهذا يعمل فقط إذا كان هناك هو pointee، أي نوع من يحصل على العودة 1207 00:53:27,815 --> 00:53:29,260 للحكم رقم 1. 1208 00:53:29,260 --> 00:53:31,990 >> عدد 3، مؤشر احالة يأخذ مؤشر واحد 1209 00:53:31,990 --> 00:53:35,330 ويغير ذلك للإشارة إلى نفس pointee كما مؤشر آخر. 1210 00:53:35,330 --> 00:53:37,150 حتى بعد الاحالة، مؤشرات اثنين 1211 00:53:37,150 --> 00:53:40,927 سوف نشير إلى نفس pointee، في بعض الأحيان أن يسمى تبادل. 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