1 00:00:00,000 --> 00:00:01,110 >> [عزف الموسيقى] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 J. DAVID مالان: حسنا. 4 00:00:11,650 --> 00:00:15,610 هذا هو CS50، وهذا هو نهاية الأسبوع الرابع. 5 00:00:15,610 --> 00:00:19,420 وأحد المواضيع اليوم غير أن الطب الشرعي الرقمي، 6 00:00:19,420 --> 00:00:20,989 فن يتعافى من المعلومات. 7 00:00:20,989 --> 00:00:22,780 وبالفعل، على الرغم من كنت في خضم 8 00:00:22,780 --> 00:00:25,070 الحق الآن للسلام في ثلاثة والاختراق، الأسبوع المقبل، 9 00:00:25,070 --> 00:00:27,880 سيكون التركيز على بالضبط هذا المجال. 10 00:00:27,880 --> 00:00:30,686 >> حتى واحد من أروع وظائف في حياتي كان كان يعود في كلية الدراسات العليا، 11 00:00:30,686 --> 00:00:33,560 عندما كنت أعمل للالمحلية ميدلسكس المدعي العام لمقاطعة 12 00:00:33,560 --> 00:00:34,950 مكتب، تعمل الطب الشرعي به. 13 00:00:34,950 --> 00:00:37,450 ذلك أساسا، وماساتشوستس شرطة الدولة، في بعض الأحيان، 14 00:00:37,450 --> 00:00:40,100 عند العمل على حالات شأنه جلب أشياء مثل محركات الأقراص الصلبة 15 00:00:40,100 --> 00:00:42,185 والأقراص المرنة و بطاقات الذاكرة وما شابه ذلك. 16 00:00:42,185 --> 00:00:44,060 وأنها تسليمها لي ومرشدي، 17 00:00:44,060 --> 00:00:48,070 وكان هدفنا هو العثور على أدلة، إذا كان هناك أي، في هذه الوسائط. 18 00:00:48,070 --> 00:00:50,700 لمحات الآن، قد رأيتم هذا العالم من الطب الشرعي 19 00:00:50,700 --> 00:00:53,000 في وسائل الإعلام والتلفزيون والأفلام. 20 00:00:53,000 --> 00:00:55,730 ولكن كان لي وظيفة، و نحسب أن العالم، 21 00:00:55,730 --> 00:00:57,550 ليس تماما كأنك تراه. 22 00:00:57,550 --> 00:01:00,794 دعونا نلقي نظرة على ما ربما كنت قد رأيت. 23 00:01:00,794 --> 00:01:01,460 [VIDEO قراءة] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 الآن، دعونا الحصول على نظرة فاحصة على لك. 26 00:01:05,380 --> 00:01:06,850 >> [عزف الموسيقى] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold ذلك. 29 00:01:12,932 --> 00:01:13,657 تشغيل أن يعود. 30 00:01:13,657 --> 00:01:14,733 >> الإنتظار في الدقيقة. 31 00:01:14,733 --> 00:01:15,233 يسير في الاتجاه الصحيح. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -هناك. 34 00:01:16,870 --> 00:01:17,369 تجميد ذلك. 35 00:01:17,369 --> 00:01:17,930 ، كامل الشاشة. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 تجميد ذلك. 38 00:01:18,875 --> 00:01:20,160 -Tighten حتى على ذلك، سوف؟ 39 00:01:20,160 --> 00:01:22,126 >> في -Vector على ذلك الرجل من العجلة الخلفية. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom في الحق هنا على هذه البقعة. 41 00:01:24,435 --> 00:01:28,580 >> ، مع المعدات المناسبة، و يمكن تكبير الصورة وشحذ. 42 00:01:28,580 --> 00:01:29,330 >> وماذا هذا؟ 43 00:01:29,330 --> 00:01:30,780 >> ، انها برنامج تعزيز. 44 00:01:30,780 --> 00:01:32,170 >> هل بالإمكان كنت واضحا أن ما يصل أي؟ 45 00:01:32,170 --> 00:01:33,070 >> من أنا لا أعرف. 46 00:01:33,070 --> 00:01:34,150 دعونا تعزيزه. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance القسم A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 أنا عزز من التفاصيل، و- 50 00:01:38,562 --> 00:01:40,020 من أنا أعتقد أن هناك ما يكفي لتعزيز. 51 00:01:40,020 --> 00:01:40,976 الافراج عنها لشاشتي. 52 00:01:40,976 --> 00:01:42,559 >> -I تعزيز انعكاس في عينها. 53 00:01:42,559 --> 00:01:44,322 يتم تشغيله من خلال هذا -Let تعزيز الفيديو. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar، يمكنك تعزيز هذا؟ 55 00:01:45,210 --> 00:01:45,710 >> -شنق جرا. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've تم العمل على هذا التفكير. 58 00:01:49,458 --> 00:01:50,402 >> انعكاس شخص -هناك في ل. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -هناك هو انعكاس لوجه الرجل. 61 00:01:52,870 --> 00:01:53,694 >> انعكاس -THE! 62 00:01:53,694 --> 00:01:54,610 -هناك انعكاس. 63 00:01:54,610 --> 00:01:55,880 في -Zoom على المرآة. 64 00:01:55,880 --> 00:01:57,860 يمكنك ان ترى انعكاس. 65 00:01:57,860 --> 00:01:59,630 >> هل يمكن أن تعزز صورة من هنا؟ 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 هل يمكن أن تعزز ذلك؟ 68 00:02:01,210 --> 00:02:02,190 هل يمكن أن تعزز ذلك؟ 69 00:02:02,190 --> 00:02:03,066 هل يمكن أن نعزز هذا؟ 70 00:02:03,066 --> 00:02:03,898 هل يمكن أن تعزز ذلك؟ 71 00:02:03,898 --> 00:02:04,740 -Hold على الثانية. 72 00:02:04,740 --> 00:02:05,281 سوف تعزز. 73 00:02:05,281 --> 00:02:06,470 في -Zoom على الباب. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move في. 77 00:02:08,509 --> 00:02:09,340 -أكثر. 78 00:02:09,340 --> 00:02:10,094 الإنتظار، ووقف. 79 00:02:10,094 --> 00:02:10,750 -stop. 80 00:02:10,750 --> 00:02:11,250 -Pause ذلك. 81 00:02:11,250 --> 00:02:13,542 -Rotate لنا 75 درجة حول رأسي، من فضلك. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -stop. 84 00:02:16,127 --> 00:02:19,330 نعود إلى الجزء حول الباب مرة أخرى. 85 00:02:19,330 --> 00:02:21,420 >> -Got محسن الصورة التي يمكن النقطية؟ 86 00:02:21,420 --> 00:02:24,420 >> لربما يمكننا استخدام براديب سينغ طريقة لمعرفة إلى النوافذ. 87 00:02:24,420 --> 00:02:25,902 >> -THE البرنامج هو حالة من الفن. 88 00:02:25,902 --> 00:02:26,866 >> -THE القيمة الذاتية هو خارج. 89 00:02:26,866 --> 00:02:29,758 >> ، مع الحق مزيج من algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> اتخذت الإضاءة، تتفق و خوارزميات إلى المستوى التالي، 91 00:02:32,168 --> 00:02:34,110 ويمكنني استخدامها ل تعزيز هذه الصورة. 92 00:02:34,110 --> 00:02:36,840 >> القفل على وتوسيع محور ض. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 تعزيز. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze وتعزيز. 97 00:02:40,070 --> 00:02:43,420 [END تشغيل الفيديو] 98 00:02:43,420 --> 00:02:45,830 J. DAVID مالان: حتى تلك هي كل الكلمات، لكنها لم تكن 99 00:02:45,830 --> 00:02:47,870 تستخدم في الجمل بشكل صحيح. 100 00:02:47,870 --> 00:02:52,370 والواقع في المستقبل، في أي وقت، من فضلك، تسمع أحدهم يقول كلمة، 101 00:02:52,370 --> 00:02:54,250 "تعزيز" ضحكة مكتومة قليلا. 102 00:02:54,250 --> 00:02:57,190 لأنه عندما كنت في محاولة لتعزيز، على سبيل المثال، وهذا هو ما يحدث. 103 00:02:57,190 --> 00:02:58,580 >> حتى هنا صورة رائع. 104 00:02:58,580 --> 00:02:59,720 هذا هو الخاص Daven CS50 ل. 105 00:02:59,720 --> 00:03:03,740 ونفترض اننا نريد ل تركيز على وميض في عينه، 106 00:03:03,740 --> 00:03:05,870 أو انعكاس لل الرجل السيئ الذي كان واضحا 107 00:03:05,870 --> 00:03:07,820 التقاطها بواسطة كاميرا أمنية. 108 00:03:07,820 --> 00:03:10,330 هذا هو ما يحدث عندما لك التكبير في الصورة التي 109 00:03:10,330 --> 00:03:14,060 ليس لديها سوى عدد محدود البتات المرتبطة به. 110 00:03:14,060 --> 00:03:15,420 >> هذا هو ما ستحصل عليه. 111 00:03:15,420 --> 00:03:19,190 وبالفعل، في العين Daven ل ما هو إلا أربعة، ربما ستة بكسل 112 00:03:19,190 --> 00:03:22,110 أن يؤلف بالضبط ما كان هناك بريق. 113 00:03:22,110 --> 00:03:25,890 حتى مشكلة تعيين أربعة سيكون لها في نهاية المطاف يمكنك استكشاف هذا العالم، لا سيما 114 00:03:25,890 --> 00:03:28,090 حسب طبيعة شيء نسميه ملف I / O، حيث 115 00:03:28,090 --> 00:03:31,000 I / O هو مجرد وسيلة لنزوة قائلا المدخلات والمخرجات. 116 00:03:31,000 --> 00:03:34,280 >> حتى الآن لذلك، كل من التفاعلات لقد كان لدينا مع جهاز كمبيوتر 117 00:03:34,280 --> 00:03:36,770 كانت إلى حد كبير مع ك لوحة المفاتيح والشاشة، 118 00:03:36,770 --> 00:03:40,770 ولكن ليس كثيرا مع القرص الثابت، أو حفظ الملفات خارج تلك التي 119 00:03:40,770 --> 00:03:41,620 نفسك الكتابة. 120 00:03:41,620 --> 00:03:44,570 برامج لديكم حتى الآن لم يتم خلق، والادخار، 121 00:03:44,570 --> 00:03:46,270 وتحديث الملفات الخاصة بهم. 122 00:03:46,270 --> 00:03:47,150 >> حسنا، ما هو ملف؟ 123 00:03:47,150 --> 00:03:48,105 حسنا، ما يشبه JPEG. 124 00:03:48,105 --> 00:03:50,520 هذه هي الصورة التي قد ديك أو تحميلها على الفيسبوك، 125 00:03:50,520 --> 00:03:51,690 أو رؤية أي مكان على شبكة الإنترنت. 126 00:03:51,690 --> 00:03:54,460 في الواقع، تلك الصورة نحن فقط كان رأى من Daven لJPEG. 127 00:03:54,460 --> 00:03:57,570 وما هو مثير للاهتمام حول الملفات مثل ملفات JPEG 128 00:03:57,570 --> 00:04:02,170 غير أنه يمكن تحديدها، عادة، من خلال أنماط معينة من البتات. 129 00:04:02,170 --> 00:04:05,200 >> وبعبارة أخرى، ما الذي يميز JPEG من GIF 130 00:04:05,200 --> 00:04:08,109 من ping من كلمة مستند من ملف Excel؟ 131 00:04:08,109 --> 00:04:09,900 حسنا، انها مختلفة تماما أنماط من البتات. 132 00:04:09,900 --> 00:04:12,820 وهذه الأنماط المختلفة عادة في بداية هذه الملفات. 133 00:04:12,820 --> 00:04:18,200 >> بحيث عندما يفتح جهاز الكمبيوتر الخاص بك وكلمة وثيقة، أو عندما يفتح الكمبيوتر JPEG، 134 00:04:18,200 --> 00:04:20,940 يبدو عادة في الأولى عدة بت في الملف. 135 00:04:20,940 --> 00:04:24,059 وإذا لم تعترف نمط، تقول، يا، وهذا هو صورة. 136 00:04:24,059 --> 00:04:25,850 اسمحوا لي عرضه ل المستخدم كما رسم. 137 00:04:25,850 --> 00:04:27,870 أو، أوه، هذا يبدو وكأنه وثيقة وورد. 138 00:04:27,870 --> 00:04:30,480 اسمحوا لي أن تظهر إلى المستخدم كما مقال. 139 00:04:30,480 --> 00:04:33,020 >> هكذا على سبيل المثال، ملفات JPEG، كما تبين، هي 140 00:04:33,020 --> 00:04:35,460 متطورة إلى حد ما تحت غطاء محرك السيارة. 141 00:04:35,460 --> 00:04:40,140 لكن البايتات الثلاثة الأولى في معظم كل JPEG تبدأ مع هذه الأرقام الثلاثة. 142 00:04:40,140 --> 00:04:44,680 لذا بايت صفر، واحد، وهما، في معظم كل JPEG، 255، ثم رقم 143 00:04:44,680 --> 00:04:46,675 216، ثم رقم 255. 144 00:04:46,675 --> 00:04:48,990 >> وما عليك أن تكون قادرا لبدء القيام الاسبوع المقبل 145 00:04:48,990 --> 00:04:52,920 هو في الواقع بدس تحت غطاء محرك السيارة من الملفات مثل ملفات JPEG 146 00:04:52,920 --> 00:04:57,210 ومثل ملفات الصور النقطية، ورؤية ما كان دائما هناك لفترة طويلة و 147 00:04:57,210 --> 00:04:58,650 كما كنت قد تم استخدام جهاز كمبيوتر. 148 00:04:58,650 --> 00:05:01,860 >> ولكن ما هو ليس هناك عادة مكتوبة مثل الأرقام العشرية مثل هذا. 149 00:05:01,860 --> 00:05:04,620 علماء الكمبيوتر لا تميل إلى التحدث في العشرية. 150 00:05:04,620 --> 00:05:06,139 أنهم لا يتكلمون حقا في ثنائي. 151 00:05:06,139 --> 00:05:07,930 عادة، عندما نريد للتعبير عن الأرقام، 152 00:05:07,930 --> 00:05:10,710 نحن فعلا استخدام عشري، التي علكم تذكرون 153 00:05:10,710 --> 00:05:13,027 من، مثلا، مشكلة مجموعة واحد، والذي تحدى 154 00:05:13,027 --> 00:05:14,610 لك التفكير في نظام مختلف. 155 00:05:14,610 --> 00:05:17,170 >> ونحن، بالطبع، معتادا مع عشري، الصفر خلال تسعة. 156 00:05:17,170 --> 00:05:18,215 تحدثنا عن ثنائي. 157 00:05:18,215 --> 00:05:20,710 وليس لدينا حقا لاستخدام هذا كثيرا هنا 158 00:05:20,710 --> 00:05:22,470 على الخروج، لأن أجهزة الكمبيوتر التي سوف تستخدم. 159 00:05:22,470 --> 00:05:24,900 ولكن سوف المبرمجين جدا غالبا، لكن ليس دائما، 160 00:05:24,900 --> 00:05:29,360 استخدام عشري، مما يعني فقط لديك 16 رسائل في الأبجدية الخاص بك، 161 00:05:29,360 --> 00:05:31,330 بدلا من اثنين أو 10. 162 00:05:31,330 --> 00:05:34,530 >> إذا كيف يمكنك العد إلى أعلى من تسعة في عشري؟ 163 00:05:34,530 --> 00:05:41,120 تذهب 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، أ، ب، ج، د، ه، و، فقط عن طريق الاتفاقية. 164 00:05:41,120 --> 00:05:43,540 ولكن ما هو المفتاح هو أن كل هذه هو رمز واحد. 165 00:05:43,540 --> 00:05:44,340 لا يوجد 10. 166 00:05:44,340 --> 00:05:48,400 لا يوجد أي 11، في حد ذاته، لأن كل الأرقام الخاصة بك، تماما مثل في العشرية 167 00:05:48,400 --> 00:05:51,940 ومثلما هو الحال في ثنائي، ينبغي فقط يكون حرف واحد، من خلال الاتفاقية. 168 00:05:51,940 --> 00:05:55,280 >> بحيث ثم هي الأبجدية لدينا في حوزتنا للعشري. 169 00:05:55,280 --> 00:05:58,600 فماذا يفعل JPEG تبدو وكأنها إذا كنت كانت لكتابة تلك الثلاثة الأولى 170 00:05:58,600 --> 00:06:01,980 بايت ولكن ليس كما عشري، على سبيل المثال، كما عشري؟ 171 00:06:01,980 --> 00:06:03,640 والسبب هو عرافة حتى كل ما مفيدة؟ 172 00:06:03,640 --> 00:06:05,290 >> حسنا، نظرة سريعة على سبيل المثال. 173 00:06:05,290 --> 00:06:09,030 حتى إذا أنا أكتب من البتات التي تمثل هذه numbers-- عشري 174 00:06:09,030 --> 00:06:12,450 هذا قد يكون قليلا صدئ الآن من بضعة أسابيع إلى الوراء، 175 00:06:12,450 --> 00:06:14,820 لكن اليسار واحد و حق واحد من السهل جدا. 176 00:06:14,820 --> 00:06:17,990 255 وكان أكبر عدد نحن يمكن أن تمثل مع ثمانية بت. 177 00:06:17,990 --> 00:06:18,820 كان كل منها. 178 00:06:18,820 --> 00:06:21,320 لذلك الوحيد الذي هو أقل ما يقال المثير للاهتمام هو واحد الأوسط. 179 00:06:21,320 --> 00:06:24,700 وإذا قمت بذلك نوع من الخروج على الرياضيات، سوف يستنتج أن، في الواقع، 180 00:06:24,700 --> 00:06:27,949 هذا النمط من واحد و الأصفار يمثل 216. 181 00:06:27,949 --> 00:06:30,240 لذلك دعونا تنص فقط ل الآن أن هذه صحيحة. 182 00:06:30,240 --> 00:06:31,730 ولكن لماذا هذا الاهتمام؟ 183 00:06:31,730 --> 00:06:33,970 >> حسنا، بايت، بالطبع، هو ثمانية بت. 184 00:06:33,970 --> 00:06:38,980 واتضح أنه إذا كنت تعتقد من بايت واثنين من أجزاء من أربعة بت، 185 00:06:38,980 --> 00:06:39,500 مثل هذا. 186 00:06:39,500 --> 00:06:41,000 اسمحوا لي أن أضيف بعض المساحة. 187 00:06:41,000 --> 00:06:42,550 قبل ذلك، بعد. 188 00:06:42,550 --> 00:06:46,520 واضاف لقد فقط بعض المساحة البيضاء لمجرد التصور هنا. 189 00:06:46,520 --> 00:06:51,840 كيف يمكن أن نمثلها الآن في، مثلا، عشري كل رباعية البتات، 190 00:06:51,840 --> 00:06:52,880 كل مجموعة من أربعة بت؟ 191 00:06:52,880 --> 00:06:56,420 >> هكذا على سبيل المثال، على اليسار الآن، لدينا 1111 في ثنائي. 192 00:06:56,420 --> 00:07:00,420 ما هو هذا العدد في العشرية، إذا قمت بذلك من الرياضيات؟ 193 00:07:00,420 --> 00:07:03,780 لديك مكان منها، مكان ثنائي، المكان أربع، والمكان أثمان. 194 00:07:03,780 --> 00:07:04,341 >> الجمهور: 15. 195 00:07:04,341 --> 00:07:05,340 J. DAVID مالان: انها 15. 196 00:07:05,340 --> 00:07:08,340 لذلك اذا لم نفعل ثمانية بالإضافة إلى أربعة زائد اثنين زائد واحد، نحصل على 15. 197 00:07:08,340 --> 00:07:11,790 حتى أتمكن من كتابة 15 أدناه 1111 و لكن بيت القصيد هنا 198 00:07:11,790 --> 00:07:13,190 غير عشري، وليس عشري. 199 00:07:13,190 --> 00:07:17,310 وذلك بدلا من تدوين 15، 1-5، أنا أريد أن أكتب ذلك في عرافة، 200 00:07:17,310 --> 00:07:22,311 وإذا كنت تعتقد مرة أخرى، إذا كان لديك الصفر خلال f، ما هو 15 سيكون؟ 201 00:07:22,311 --> 00:07:22,810 الجمهور: و. 202 00:07:22,810 --> 00:07:24,434 J. DAVID مالان: هكذا اتضح انها و. 203 00:07:24,434 --> 00:07:29,140 ويمكنك أن تعمل بها قائلا: حسنا، إذا كان هو 10، ثم موافق، و هي 15. 204 00:07:29,140 --> 00:07:33,250 ذلك في الواقع، يمكننا أن إعادة كتابة هذا نفسه مجموعة من الأرقام وو و. 205 00:07:33,250 --> 00:07:35,750 ثم اذا لم نفعل شيئا من الرياضيات، سنقوم نستنتج أن هذا هو د. 206 00:07:35,750 --> 00:07:38,650 ثمانية من السهل جدا، لأننا ديك واحد في مكان أثمان. 207 00:07:38,650 --> 00:07:40,620 ومن ثم، لدينا أكثر زوجين و و ل. 208 00:07:40,620 --> 00:07:44,669 >> فما البشر يميلون إلى القيام به من خلال اتفاقية عند استخدامهم عشري هو انهم فقط 209 00:07:44,669 --> 00:07:47,710 أكتب هذا قليلا أكثر وضوحا، التخلص من معظم تلك المساحة البيضاء. 210 00:07:47,710 --> 00:07:50,890 ومجرد أن تكون واضحة فائقة ل القراء أن هذا هو عشري، 211 00:07:50,890 --> 00:07:54,670 اتفاقية بين بسيطة البشر وتكتب الصفر 212 00:07:54,670 --> 00:07:58,000 س، الذي ليس له معنى آخر من المعرف البصري، 213 00:07:58,000 --> 00:07:59,590 هنا يأتي عدد عرافة. 214 00:07:59,590 --> 00:08:04,210 >> وبعد ذلك، قمت بوضع رقمين، و و في هذه الحالة، ثم د لذلك، ثم و و. 215 00:08:04,210 --> 00:08:06,700 حتى قصة قصيرة طويلة، عشري يميل فقط 216 00:08:06,700 --> 00:08:11,990 أن تكون مفيدة لأن كل من فيها أرقام، الصفر خلال f، خطوط تماما 217 00:08:11,990 --> 00:08:13,880 حتى مع وجود نمط من أربعة بت. 218 00:08:13,880 --> 00:08:18,080 >> حتى إذا كان لديك اثنين من أرقام ست عشرية، الصفر من خلال F، مرارا وتكرارا، 219 00:08:18,080 --> 00:08:20,256 التي تمنحك تماما ثمانية بت أو بايت واحد. 220 00:08:20,256 --> 00:08:22,380 ولهذا السبب فإنه يميل إلى تكون مفيدة تقليديا. 221 00:08:22,380 --> 00:08:24,990 ليس هناك مثقف المحتوى حقا أبعد من ذلك، 222 00:08:24,990 --> 00:08:27,010 بخلاف فائدتها الفعلية. 223 00:08:27,010 --> 00:08:29,310 >> ملفات JPEG الآن ليست فقط ملف صيغ للرسومات. 224 00:08:29,310 --> 00:08:33,230 تذكرون أن هناك مثل هذه الملفات في العالم، 225 00:08:33,230 --> 00:08:34,830 على الأقل من قبل بضع سنوات. 226 00:08:34,830 --> 00:08:37,580 >> لذلك كان هذا الواقع المثبتة في Windows XP 227 00:08:37,580 --> 00:08:39,960 على الملايين من أجهزة الكمبيوتر في جميع أنحاء العالم. 228 00:08:39,960 --> 00:08:43,000 وكان هذا ملف صورة نقطية، BMP. 229 00:08:43,000 --> 00:08:47,690 وملف صورة نقطية، كما سترى المقبل الاسبوع، يعني مجرد وجود نمط من النقاط، 230 00:08:47,690 --> 00:08:51,710 بكسل كما انهم دعا، خريطة على بت، حقا. 231 00:08:51,710 --> 00:08:55,160 >> فما المثير للاهتمام، على الرغم من حول هذه تنسيق الملف، BMP، هو 232 00:08:55,160 --> 00:08:58,590 أن تحت غطاء محرك السيارة، و لديها أكثر من ثلاثة بايت فقط 233 00:08:58,590 --> 00:09:01,020 التي تشكل رأس، لذلك جاز التعبير، لدغات القليلة الأولى. 234 00:09:01,020 --> 00:09:03,330 يبدو في الواقع قليلا معقدة للوهلة الأولى. 235 00:09:03,330 --> 00:09:04,704 وسترى هذا في مجموعة P. 236 00:09:04,704 --> 00:09:06,810 والحصول على شيء من معين هذا الآن 237 00:09:06,810 --> 00:09:10,720 ليس مهم جدا، ومجرد حقيقة أنه في بداية كل نقطية 238 00:09:10,720 --> 00:09:13,823 ملف، شكل رسوم بيانية، هناك في مجمله مجموعة من الأرقام. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> الآن مايكروسوفت، و صاحب هذا الشكل، 241 00:09:16,720 --> 00:09:18,820 يميل إلى استدعاء هؤلاء أشياء لا [إينتس] وحرف 242 00:09:18,820 --> 00:09:22,259 ويطفو لكن الكلمات ود كلمات وصفقات الشراء وبايت. 243 00:09:22,259 --> 00:09:23,800 حتى انهم أنواع مختلفة من البيانات فقط. 244 00:09:23,800 --> 00:09:25,170 انهم أسماء مختلفة لنفس الشيء. 245 00:09:25,170 --> 00:09:26,740 ولكن سترى أنه في P تعيين أربعة. 246 00:09:26,740 --> 00:09:31,450 >> ولكن هذا هو فقط أن أقول أنه إذا كان الإنسان بالنقر نقرا مزدوجا فوق بعض الملفات. BMP على موقعه 247 00:09:31,450 --> 00:09:35,015 أو القرص الصلب لها، ويفتح نافذة حتى تبين له أو لها تلك الصورة، 248 00:09:35,015 --> 00:09:38,500 حدث ذلك لأن التشغيل نظام احظ يفترض ليس فقط 249 00:09:38,500 --> 00:09:41,460 امتداد الملف BMP. في اسم الملف، 250 00:09:41,460 --> 00:09:45,010 ولكن أيضا حقيقة أن هناك بعض اتفاقية للنمط البتات 251 00:09:45,010 --> 00:09:47,490 في البداية من أن ملف الصورة النقطية. 252 00:09:47,490 --> 00:09:50,270 >> ولكن دعونا نركز الآن على هذا ملف معقد، 253 00:09:50,270 --> 00:09:52,120 ولكن بدلا من ذلك على شيء مثل هذا. 254 00:09:52,120 --> 00:09:55,190 نفترض هنا في GEdit، وأنا يكون مجرد بدايات 255 00:09:55,190 --> 00:09:57,070 برنامج هذا بسيط جدا. 256 00:09:57,070 --> 00:09:58,860 لقد حصلت على بعض يشمل حتى أعلى. 257 00:09:58,860 --> 00:10:02,120 الآن أنا عندي # تشمل "structs.h" لكن سأعود إلى ذلك في لحظة. 258 00:10:02,120 --> 00:10:03,974 ولكن هذا أمر مفيد في الوقت الراهن. 259 00:10:03,974 --> 00:10:05,890 لذلك هذا هو برنامج ما يجري لتنفيذ 260 00:10:05,890 --> 00:10:07,335 مثل قاعدة بيانات المسجل. 261 00:10:07,335 --> 00:10:09,710 لذلك قاعدة بيانات للطلاب، وكل طالب في العالم 262 00:10:09,710 --> 00:10:13,190 له اسم ومنزل وربما بعض الأشياء الأخرى، ولكننا سوف يبقيه بسيط. 263 00:10:13,190 --> 00:10:15,140 كل طالب له اسم ومنزل. 264 00:10:15,140 --> 00:10:17,700 >> لذلك إذا أردت أن إرسال بريد برنامج هدفها في الحياة 265 00:10:17,700 --> 00:10:19,860 كان مجرد تكرار من الصفر على ما يصل إلى ثلاثة، 266 00:10:19,860 --> 00:10:22,070 إذا كان هناك ثلاثة طلاب في جامعة هارفارد. 267 00:10:22,070 --> 00:10:25,350 وأريد فقط أن تحصل، وذلك باستخدام GetString، اسم كل طالب والمنزل، 268 00:10:25,350 --> 00:10:26,600 وبعد ذلك فقط من طباعة تلك. 269 00:10:26,600 --> 00:10:28,630 >> هذا هو نوع من مثل أسبوع واحد الاشياء أسبوعين الآن، 270 00:10:28,630 --> 00:10:30,810 حيث أريد فقط ل حلقة أو شيء من هذا القبيل. 271 00:10:30,810 --> 00:10:34,500 وأريد أن أدعو GetString عدد قليل مرات، ومن ثم طباعة و عدة مرات. 272 00:10:34,500 --> 00:10:37,340 فكيف يمكن أن أفعل هذا، رغم ذلك، عند كل اسم ومنزل 273 00:10:37,340 --> 00:10:39,070 وتشارك لكل طالب؟ 274 00:10:39,070 --> 00:10:42,830 >> لذلك ربما أول غريزة بلدي يكون أن تفعل شيئا من هذا القبيل. 275 00:10:42,830 --> 00:10:49,620 وأود أن أقول أولا، حسنا، أعطني، أقول، صفيف سلاسل دعا الأسماء. 276 00:10:49,620 --> 00:10:51,530 وأنا لا أريد hardcode ثلاثة هنا. 277 00:10:51,530 --> 00:10:53,064 ماذا أريد أن أضع هناك؟ 278 00:10:53,064 --> 00:10:55,730 حتى الطلاب، لأن هذا مجرد ثابت أعلن في القمة، 279 00:10:55,730 --> 00:10:57,860 فقط حتى لا تضطر إلى hardcode ثلاثة في أماكن متعددة. 280 00:10:57,860 --> 00:11:00,859 بهذه الطريقة، لا أستطيع تغييره مكان واحد، ويؤثر تغير في كل مكان. 281 00:11:00,859 --> 00:11:04,470 ثم، وأنا قد تفعل سلسلة يضم طلاب. 282 00:11:04,470 --> 00:11:10,250 >> والآن، وأنا قد تفعل شيئا مثل ل (كثافة العمليات ط = 0، وأنا <الطلاب، وأنا + +. 283 00:11:10,250 --> 00:11:14,390 لذلك أنا كتابة بسرعة، ولكن هذا هو ربما دراية تركيب الآن. 284 00:11:14,390 --> 00:11:17,030 >> والآن، وكان هذا أكثر حداثة. 285 00:11:17,030 --> 00:11:22,890 إذا كنت تريد أن تضع في ال I- اسم الطالب، وأعتقد أن أفعل هذا. 286 00:11:22,890 --> 00:11:26,480 ومن ثم، لا أسماء لكن المنازل قوس ط. 287 00:11:26,480 --> 00:11:29,930 أفعل هذا، GetString، والسماح لي أن أعود وإصلاح هذا الخط. 288 00:11:29,930 --> 00:11:30,430 توافقون على ذلك؟ 289 00:11:30,430 --> 00:11:31,200 نتعارض؟ 290 00:11:31,200 --> 00:11:32,366 انها ليست جدا سهل الاستعمال. 291 00:11:32,366 --> 00:11:33,890 أنا لم أخبر المستخدم ما يجب القيام به. 292 00:11:33,890 --> 00:11:36,520 >> ولكن الآن، إذا أنا أيضا يريد في وقت لاحق، دعونا 293 00:11:36,520 --> 00:11:40,060 مثلا، طباعة هذه الأشياء out-- ذلك في وقت لاحق TODO. 294 00:11:40,060 --> 00:11:42,330 انا ذاهب الى بذل المزيد من الجهد مع this-- هذا القول غير 295 00:11:42,330 --> 00:11:45,970 التنفيذ الصحيح لل الحصول على أسماء والمنازل، ثلاثة 296 00:11:45,970 --> 00:11:48,870 منهم كل مجموعه، من مستخدم. 297 00:11:48,870 --> 00:11:51,280 >> ولكن هذا ليس التصميم الجيد جدا، أليس كذلك؟ 298 00:11:51,280 --> 00:11:55,220 ما إذا كان الطالب لديه ليس مجرد اسم والمنزل، ولكن أيضا رقم الهوية، و 299 00:11:55,220 --> 00:11:57,770 ورقم الهاتف، وعنوان البريد الإلكتروني، 300 00:11:57,770 --> 00:12:00,280 وربما الصفحة الرئيسية، و ربما مقبض تويتر، 301 00:12:00,280 --> 00:12:03,730 وأي عدد من التفاصيل الأخرى المرتبطة طالب أو شخص، 302 00:12:03,730 --> 00:12:04,610 أكثر عموما. 303 00:12:04,610 --> 00:12:07,720 كيف يمكننا أن نبدأ في إضافة وظيفة هذا البرنامج؟ 304 00:12:07,720 --> 00:12:14,080 >> حسنا، أنا أشعر بأن أبسط طريقة قد يكون أن تفعل شيئا مثل، دعنا نقول، 305 00:12:14,080 --> 00:12:16,490 الباحث هويات الطلاب. 306 00:12:16,490 --> 00:12:18,380 حتى أتمكن من وضع كل هوياتهم في هناك. 307 00:12:18,380 --> 00:12:22,240 وبعد ذلك، عن شيء مثل أرقام الهاتف، 308 00:12:22,240 --> 00:12:24,400 لست متأكدا من كيفية تمثل ذلك فقط حتى الآن. 309 00:12:24,400 --> 00:12:30,280 لذلك دعونا نمضي قدما والدعوة فقط هذه التغاريد الطلاب، والتي 310 00:12:30,280 --> 00:12:33,550 قليلا غريب، but-- وحفنة أكثر المجالات. 311 00:12:33,550 --> 00:12:36,360 >> لقد بدأت على نحو فعال نسخ ولصق هنا. 312 00:12:36,360 --> 00:12:39,416 وهذا سوف تنمو جميلة غير عملي بسرعة كبيرة، أليس كذلك؟ 313 00:12:39,416 --> 00:12:42,290 لن يكون ذلك جميلا لو كان هناك في العالم بنية بيانات معروف 314 00:12:42,290 --> 00:12:45,600 ليس عدد صحيح أو سلسلة، ولكن شيئا أعلى المستويات، فكرة مجردة، لذلك 315 00:12:45,600 --> 00:12:47,570 في الكلام، والمعروف باسم طالب؟ 316 00:12:47,570 --> 00:12:50,220 لم C لا يأتي مع المدمج في وظائف للطلاب و 317 00:12:50,220 --> 00:12:52,260 ولكن ماذا لو أردت أن تعطيه هذا؟ 318 00:12:52,260 --> 00:12:55,640 >> حسنا، كما تبين، أنا ذاهب ل فتح ملف يسمى structs.h هنا، 319 00:12:55,640 --> 00:12:57,090 ويمكنك أن تفعل ذلك بالضبط. 320 00:12:57,090 --> 00:12:58,290 ونحن في طريقنا لتبدأ في فعل هذا الآن. 321 00:12:58,290 --> 00:13:01,490 وتحت غطاء محرك السيارة من P تعيين ثلاثة، كنت قد تم بالفعل القيام بذلك الآن. 322 00:13:01,490 --> 00:13:05,920 ليس هناك شيء مثل المستطيل أو ز وز البيضاوي في لغة البرمجة C. 323 00:13:05,920 --> 00:13:10,570 >> الناس في ستانفورد تنفيذ تلك أنواع البيانات باستخدام هذا النهج هنا، 324 00:13:10,570 --> 00:13:13,900 إعلان بيانات جديدة خاصة بهم أنواع باستخدام كلمة رئيسية جديدة 325 00:13:13,900 --> 00:13:16,744 تسمى البنية وآخر دعا أحد الرموز المميزة ل typedef. 326 00:13:16,744 --> 00:13:19,660 وبالفعل، على الرغم من بناء الجملة تبدو مختلفة قليلا عن الاشياء 327 00:13:19,660 --> 00:13:23,550 رأيناه من قبل، في المبدأ، انها فائقة بسيط. 328 00:13:23,550 --> 00:13:25,297 >> هذا يعني فقط "تعريف نوع". 329 00:13:25,297 --> 00:13:27,255 وهذا ما سيكون هيكل، وهيكل 330 00:13:27,255 --> 00:13:29,400 هو تماما مثل وعاء لأشياء متعددة. 331 00:13:29,400 --> 00:13:31,780 وهذا الهيكل هو ذاهب لدينا سلسلة تسمى اسم، 332 00:13:31,780 --> 00:13:33,210 وسلسلة تسمى المنزل. 333 00:13:33,210 --> 00:13:37,520 ودعونا ندعو، فقط للراحة، هذا كله طالب هيكل البيانات. 334 00:13:37,520 --> 00:13:40,320 >> حتى لحظة تحصل على الفاصلة المنقوطة، لديك الآن 335 00:13:40,320 --> 00:13:43,280 خلق البيانات الخاصة بك نوع يسمى طالب 336 00:13:43,280 --> 00:13:46,420 الذي يقف الآن إلى جانب كثافة العمليات، وتعويم، وشار، وسلسلة، 337 00:13:46,420 --> 00:13:50,270 وز المستطيل، وز البيضاوي، وأي عدد من الأشياء الأخرى الناس قد اخترعت. 338 00:13:50,270 --> 00:13:53,340 >> فما هو مفيد حول هذا الآن هو أنه إذا أعود 339 00:13:53,340 --> 00:13:57,430 إلى البنية 0 وإنهاء هذا التنفيذ، التي كتبت 340 00:13:57,430 --> 00:14:02,080 مقدما هنا، لاحظ أن جميع من المحتم أن الفوضى 341 00:14:02,080 --> 00:14:05,490 كان على وشك أن تبدأ يحدث كما أضفت أرقام الهاتف والتغاريد وجميع 342 00:14:05,490 --> 00:14:07,370 هذه أمور أخرى ل تعريف الطالب، 343 00:14:07,370 --> 00:14:11,810 الآن هو ملفوفة بإيجاز عنه ومجموعة واحدة فقط من الطلاب. 344 00:14:11,810 --> 00:14:15,500 >> ولكل من هؤلاء الطلاب الآن لديه أشياء متعددة داخل منه. 345 00:14:15,500 --> 00:14:16,930 بحيث يترك سؤالا واحدا فقط. 346 00:14:16,930 --> 00:14:19,700 كيف يمكن الحصول على اسم، والمنزل، والهوية، 347 00:14:19,700 --> 00:14:21,640 وأي شيء آخر هو داخل الطالب؟ 348 00:14:21,640 --> 00:14:22,930 سوبر بسيطة، كذلك. 349 00:14:22,930 --> 00:14:25,730 تركيب جديد، ولكن فكرة بسيطة. 350 00:14:25,730 --> 00:14:29,239 >> يمكنك ببساطة مؤشر إلى الصفيف، كما فعلنا الأسبوع الماضي وهذا. 351 00:14:29,239 --> 00:14:31,030 وما هو بوضوح قطعة جديدة من جملة؟ 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 فقط، وهو ما يعني "اذهب داخل هيكل والحصول على حقل يسمى 354 00:14:35,880 --> 00:14:39,030 اسم، والحصول على حقل يسمى بيت، الحصول على حقل يسمى طالب ". 355 00:14:39,030 --> 00:14:41,940 >> حتى في تعيين ثلاثة P، إذا كنت لا تزال تعمل على ذلك، 356 00:14:41,940 --> 00:14:44,020 ومعظم الناس لا يزال و، ندرك أن التقدم 357 00:14:44,020 --> 00:14:46,130 البدء في استخدام أشياء مثل ز ز rects والأشكال البيضاوية 358 00:14:46,130 --> 00:14:50,201 وغيرها من الأمور التي لا يبدو أن تأتي من أسبوع صفر، واحد، أو اثنان، 359 00:14:50,201 --> 00:14:52,950 ندرك أن ذلك لأن ستانفورد أعلن بعض أنواع البيانات الجديدة. 360 00:14:52,950 --> 00:14:56,160 >> وبالفعل، هذا هو بالضبط ما سنقوم القيام به، أيضا، في تعيين أربعة P عندما، 361 00:14:56,160 --> 00:14:59,880 نبدأ في التعامل مع الأشياء مثل الصور، الصور النقطية، وأكثر من ذلك. 362 00:14:59,880 --> 00:15:02,882 ذلك أن مجرد دعابة و نموذج العقلي لما هو آت. 363 00:15:02,882 --> 00:15:04,590 الآن، وأنا ماطلت قليلا هذا الصباح. 364 00:15:04,590 --> 00:15:09,560 كنت نوع من الغريب أن نرى ما خلفية مايكروسوفت فعلا 365 00:15:09,560 --> 00:15:10,310 يبدو اليوم. 366 00:15:10,310 --> 00:15:15,200 واتضح شخص في عام 2006 فعلا ذهبت إلى بالضبط تقريبا 367 00:15:15,200 --> 00:15:19,210 نفس المكان لتصوير في الواقع ما يبدو أن هذه الأيام. 368 00:15:19,210 --> 00:15:21,380 الميدان هو الآن متضخمة قليلا. 369 00:15:21,380 --> 00:15:24,850 >> حتى الآن يتحدث من الصور، دعونا نعيد Daven هنا 370 00:15:24,850 --> 00:15:26,890 على الشاشة ونيكولاس، وأذكركم فقط 371 00:15:26,890 --> 00:15:30,540 أنه إذا كنت ترغب في الانضمام إلينا لتناول طعام الغداء يوم الجمعة، توجه إلى URL المعتاد لدينا 372 00:15:30,540 --> 00:15:31,440 هنا. 373 00:15:31,440 --> 00:15:33,530 >> ذلك حيث لم نغادر من يوم الاثنين؟ 374 00:15:33,530 --> 00:15:35,140 قدمنا ​​هذه المشكلة، أليس كذلك؟ 375 00:15:35,140 --> 00:15:37,610 كان هذا على ما يبدو صحيحة تنفيذ المبادلة 376 00:15:37,610 --> 00:15:40,460 حيث يمكنك أخذ اثنان [إينتس]، واحد يسمى، واحدة تسمى ب، 377 00:15:40,460 --> 00:15:44,130 مقايضتهم، مثلما فعلت لورا هنا على خشبة المسرح مع الحليب والماء، 378 00:15:44,130 --> 00:15:46,820 باستخدام مؤقت متغير، أو كوب فارغ، 379 00:15:46,820 --> 00:15:50,540 حتى نتمكن من وضع ب في وفي ب دون فوضى من الأشياء. 380 00:15:50,540 --> 00:15:51,560 استخدمنا متغير. 381 00:15:51,560 --> 00:15:52,870 انه دعا مؤقت. 382 00:15:52,870 --> 00:15:55,520 >> ولكن ما هو أساسي المشكلة مع هذا الرمز يوم الاثنين؟ 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 ما هي المشكلة هنا؟ 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 نعم. 387 00:16:00,605 --> 00:16:01,970 >> الجمهور: يستغرق مساحة أكبر. 388 00:16:01,970 --> 00:16:04,719 >> J. DAVID مالان: يستغرق فترة تصل أكثر الفضاء، لأنني باستخدام متغير، 389 00:16:04,719 --> 00:16:05,400 وهذا موافق. 390 00:16:05,400 --> 00:16:07,300 هذا صحيح، ولكن أنا سأقول هذا موافق. 391 00:16:07,300 --> 00:16:10,030 انها فقط 32 بت في الكبرى نظام الأشياء، حتى لا صفقة كبيرة. 392 00:16:10,030 --> 00:16:10,655 أفكار أخرى؟ 393 00:16:10,655 --> 00:16:12,572 الجمهور: وهو مبادلة فقط المتغيرات محليا. 394 00:16:12,572 --> 00:16:13,571 J. DAVID مالان: بالضبط. 395 00:16:13,571 --> 00:16:15,090 انها مقايضة فقط المتغيرات محليا. 396 00:16:15,090 --> 00:16:18,173 لأن أي وقت استدعاء function-- عندما أتيحت لي الصواني من أننبرغ 397 00:16:18,173 --> 00:16:19,840 آخر مرة، لديك الرئيسي في القاع. 398 00:16:19,840 --> 00:16:23,560 بمجرد استدعاء دالة يسمى المبادلة المبادلة لا تحصل x و y، 399 00:16:23,560 --> 00:16:24,400 القيم الأصلية. 400 00:16:24,400 --> 00:16:26,392 ما لا تحصل المبادلة لم ندعي؟ 401 00:16:26,392 --> 00:16:27,100 الجمهور: نسخ. 402 00:16:27,100 --> 00:16:28,090 J. DAVID مالان: حتى نسخ منها. 403 00:16:28,090 --> 00:16:31,120 لذلك يحصل واحد واثنين، إذا كنت أذكر المثال من آخر مرة، 404 00:16:31,120 --> 00:16:34,730 لكن نسخة من واحد واثنين التي تبادلت بنجاح. 405 00:16:34,730 --> 00:16:38,550 ولكن للأسف في النهاية، هذه القيم لا تزال هي نفسها. 406 00:16:38,550 --> 00:16:41,880 حتى يمكننا أن نرى هذا من خلال صديق جديد، ونأمل GDB، 407 00:16:41,880 --> 00:16:45,180 ان كنت أو TFS وعلى الكالسيوم ديك تم توجيه لكم نحو كالتالي. 408 00:16:45,180 --> 00:16:51,210 >> لذلك لا يبدو استدعاء مبادلة like-- دعونا فتح this-- يبدو مثل هذا. 409 00:16:51,210 --> 00:16:54,160 نحن تهيئة X واحد، ذ إلى اثنين. 410 00:16:54,160 --> 00:16:55,620 وكان مجموعة من طباعة و ل. 411 00:16:55,620 --> 00:16:58,080 ولكن بعد ذلك، والدعوة الرئيسية كان هنا لمبادلة، والتي 412 00:16:58,080 --> 00:17:00,260 هو بالضبط نحن مدونة فقط رأيت قبل لحظة. 413 00:17:00,260 --> 00:17:03,180 أيهما الصحيح في البداية وهلة، لكن وظيفيا، 414 00:17:03,180 --> 00:17:06,800 لا يعمل هذا البرنامج، ل أنه لا مبادلة بشكل دائم x و y. 415 00:17:06,800 --> 00:17:10,190 >> لذلك دعونا نرى هذا، دافئ سريع هنا مع GDB، و./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 حفنة من المعلومات الساحقة التي سوف نتخلص من L مع التحكم في الوقت الراهن. 418 00:17:15,200 --> 00:17:17,516 والآن، أنا ذاهب ل المضي قدما وتشغيله. 419 00:17:17,516 --> 00:17:19,349 ومما يؤسف له، أن لم يكن ذلك مفيدا. 420 00:17:19,349 --> 00:17:22,355 ذلك بتشغيل برنامج داخل هذا دعا برنامج GDB، مصحح، 421 00:17:22,355 --> 00:17:23,730 ولكنه لم يسمحوا لي كزة حولها. 422 00:17:23,730 --> 00:17:26,229 >> فكيف يمكنني قفة الواقع التنفيذ داخل هذا البرنامج؟ 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 حتى كسر. 425 00:17:28,329 --> 00:17:32,340 وأنا لا يمكن كسر على أي عدد، واحد، 10، 15 خط. 426 00:17:32,340 --> 00:17:35,530 ولكن يمكنني أيضا كسر رمزيا بالقول كسر الرئيسي. 427 00:17:35,530 --> 00:17:38,980 وأن يجري وضع فاصل نقطة، على ما يبدو في خط 16 في الرئيسية. 428 00:17:38,980 --> 00:17:40,050 وأين هو خط 16؟ 429 00:17:40,050 --> 00:17:42,960 دعنا نذهب إلى رمز وتصل إلى noswap. 430 00:17:42,960 --> 00:17:46,930 وبالفعل، خط 16 هو أولا جدا في البرنامج. 431 00:17:46,930 --> 00:17:52,130 >> وحتى الآن، إذا كنت المضي قدما ونوع تشغيل هذا الوقت، أدخل، فإنه توقف. 432 00:17:52,130 --> 00:17:53,080 لذلك دعونا كزة حولها. 433 00:17:53,080 --> 00:17:55,716 طباعة x-- لماذا هو العاشر الصفر؟ 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 وتجاهل علامة الدولار. 436 00:17:57,830 --> 00:17:59,725 هذا فقط لمربي الحيوانات استخدام البرنامج. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 لماذا هو العاشر الصفر في الوقت الحالي؟ 439 00:18:03,140 --> 00:18:03,640 نعم. 440 00:18:03,640 --> 00:18:07,061 >> الجمهور: انها توقفت الحق قبل السطر 16، وليس في الواقع على خط 16. 441 00:18:07,061 --> 00:18:08,060 J. DAVID مالان: بالضبط. 442 00:18:08,060 --> 00:18:11,630 GDB، افتراضيا، وقد توقفت التنفيذ قبل خط 16. 443 00:18:11,630 --> 00:18:14,820 لذلك لم تنفذ، والتي يعني x غير ذات قيمة ما غير معروفة. 444 00:18:14,820 --> 00:18:17,150 وصلنا محظوظ أنه شيء نظيف مثل الصفر. 445 00:18:17,150 --> 00:18:20,310 حتى الآن إذا كنت اكتب المقبل، الآن أنه أعدم 16. 446 00:18:20,310 --> 00:18:22,000 انها تنتظرني لتنفيذ 17. 447 00:18:22,000 --> 00:18:23,400 اسمحوا لي المضي قدما والطباعة خ. 448 00:18:23,400 --> 00:18:24,094 انها واحدة. 449 00:18:24,094 --> 00:18:25,260 اسمحوا لي المضي قدما والطباعة ذ. 450 00:18:25,260 --> 00:18:26,176 ماذا يجب أن نرى الآن؟ 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> الجمهور: [غير مسموع] 453 00:18:28,560 --> 00:18:29,165 >> J. DAVID مالان: وبصوت أعلى قليلا. 454 00:18:29,165 --> 00:18:30,040 >> الجمهور: [غير مسموع] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 J. DAVID مالان: ليس تماما توافق في الآراء. 457 00:18:32,120 --> 00:18:34,760 لذلك نعم، ونحن نرى بعض القيمة القمامة. 458 00:18:34,760 --> 00:18:37,862 الآن، هو 134514064 ص هناك. 459 00:18:37,862 --> 00:18:39,320 حسنا، انها مجرد بعض القيمة القمامة. 460 00:18:39,320 --> 00:18:41,350 يستخدم برنامجي RAM لأغراض مختلفة. 461 00:18:41,350 --> 00:18:42,350 هناك وظائف أخرى. 462 00:18:42,350 --> 00:18:44,040 كتب الآخرين داخل جهاز الكمبيوتر الخاص بي. 463 00:18:44,040 --> 00:18:46,789 لذلك استخدمت هذه البتات ل قيم أخرى، وما اراه 464 00:18:46,789 --> 00:18:49,470 هو بقايا بعض استخدام مسبق من تلك الذاكرة. 465 00:18:49,470 --> 00:18:53,350 >> لذلك لا صفقة كبيرة، لأن في أقرب وقت وأنا اكتب التالي ومن ثم طباعة ذ، 466 00:18:53,350 --> 00:18:55,640 انها تهيئة ل القيمة التي أريد. 467 00:18:55,640 --> 00:18:57,400 وحتى الآن، دعونا نمضي قدما أسرع قليلا. 468 00:18:57,400 --> 00:18:58,540 N لالمقبل. 469 00:18:58,540 --> 00:18:59,570 دعونا نفعل ذلك مرة أخرى. 470 00:18:59,570 --> 00:19:00,530 دعونا نفعل ذلك مرة أخرى. 471 00:19:00,530 --> 00:19:02,404 لكنني لا أريد أن ضرب هنا، لأنه إذا أنا 472 00:19:02,404 --> 00:19:05,110 نريد أن نرى ما يحدث داخل المبادلة، ما الأمر؟ 473 00:19:05,110 --> 00:19:05,520 >> الجمهور: الخطوات. 474 00:19:05,520 --> 00:19:06,436 >> J. DAVID مالان: الخطوات. 475 00:19:06,436 --> 00:19:09,800 حتى هذه الخطوات لي في وظيفة، وليس أكثر من ذلك. 476 00:19:09,800 --> 00:19:12,270 والآن، انها خفي قليلا بصراحة، ولكن هذا هو فقط 477 00:19:12,270 --> 00:19:14,581 تقول لي أنا في خط 33 الآن. 478 00:19:14,581 --> 00:19:15,580 ودعونا نفعل ذلك مرة أخرى. 479 00:19:15,580 --> 00:19:16,080 درجة الحرارة الطباعة. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 قيمة القمامة، والسلبي هذه المرة، ولكن هذا مجرد تزال قيمة القمامة. 482 00:19:20,170 --> 00:19:22,810 لذلك دعونا نفعل المقبلة، درجة الحرارة الطباعة. 483 00:19:22,810 --> 00:19:27,130 هو تهيئة إلى 1، والتي كانت قيمة x، الملقب. 484 00:19:27,130 --> 00:19:29,110 >> الآن، أين هي لدينا والأشعة القادمة من؟ 485 00:19:29,110 --> 00:19:32,510 كذلك، لاحظ في الرئيسية، ونحن تسمى هذه القيم x و y. 486 00:19:32,510 --> 00:19:34,740 نحن ثم مرت عليها لمبادلة النحو التالي. 487 00:19:34,740 --> 00:19:37,010 جاء أول X، Y فاصلة. 488 00:19:37,010 --> 00:19:40,020 ومن ثم، يمكن أن تسميها مقايضة x و y. 489 00:19:40,020 --> 00:19:42,630 ولكن من أجل الوضوح، هو دعوتهم أ و ب. 490 00:19:42,630 --> 00:19:45,970 ولكن أ و ب والآن ستكون نسخ من x و y، على التوالي. 491 00:19:45,970 --> 00:19:50,660 >> حتى إذا أعود إلى GDB، درجة الحرارة هو الآن واحد والآن واحدة. 492 00:19:50,660 --> 00:19:56,130 ولكن إذا كنت تفعل المقبل، والآن تفعل الطباعة لذلك، بالفعل تم نقل أكثر من. 493 00:19:56,130 --> 00:20:00,030 تم سكب الحليب في السابق كوب عصير البرتقال، وأو العكس بالعكس. 494 00:20:00,030 --> 00:20:04,750 >> وإذا كنت تفعل مرة أخرى بعد ذلك، والآن إذا كنت طباعة وشيك التعقل، 495 00:20:04,750 --> 00:20:07,687 ومازال اثنين، ولكن ب هي الآن واحدة. 496 00:20:07,687 --> 00:20:08,770 بصراحة، انها لا تزال هناك. 497 00:20:08,770 --> 00:20:10,670 لا يهمني ما هو مؤقت. 498 00:20:10,670 --> 00:20:16,850 ولكن بمجرد أنا اكتب الآن، دعنا نقول، مواصلة نعود، الآن أنا في نهاية 499 00:20:16,850 --> 00:20:17,480 البرنامج. 500 00:20:17,480 --> 00:20:20,730 ولسوء الحظ، x هو لا تزال واحدة و y لا يزال اثنين. 501 00:20:20,730 --> 00:20:22,272 >> وذلك ما كان هناك فائدة GDB؟ 502 00:20:22,272 --> 00:20:23,980 ولم مساعدتي إصلاح مشكلة في حد ذاتها، 503 00:20:23,980 --> 00:20:26,265 ولكنه أمل مساعدتي نفهم ذلك من خلال تحقيق 504 00:20:26,265 --> 00:20:30,000 أن نعم، والمنطق بلدي هو الصحيح، ولكن قانون بلدي هو عدم وجود نهاية المطاف 505 00:20:30,000 --> 00:20:31,450 تأثير دائم. 506 00:20:31,450 --> 00:20:34,570 بحيث مشكلة نحن الذهاب الى حل الآن اليوم. 507 00:20:34,570 --> 00:20:37,870 >> ولكن دعونا نصل الى هناك عن طريق هذا. 508 00:20:37,870 --> 00:20:39,230 سلسلة هي كذبة. 509 00:20:39,230 --> 00:20:41,860 هو، أيضا، ليس نوع البيانات موجود في C. انها 510 00:20:41,860 --> 00:20:44,750 كان مرادفا لبعض الوقت لشيء آخر، 511 00:20:44,750 --> 00:20:47,300 ويمكننا أن تكشف على النحو التالي. 512 00:20:47,300 --> 00:20:53,282 >> اسمحوا لي المضي قدما وفتح برنامج يسمى مقارنة-0. 513 00:20:53,282 --> 00:20:56,240 وبدلا من أن اكتب هذا واحد، سنبدأ على المشي من خلال رمز 514 00:20:56,240 --> 00:20:58,040 سبق لي أن كتبت، ولكن انها فقط بضعة أسطر. 515 00:20:58,040 --> 00:20:59,570 بحيث يتم مقارنة-0 هذا. 516 00:20:59,570 --> 00:21:02,380 وأول شيء أنا به هو الحصول على سطر من النص. 517 00:21:02,380 --> 00:21:05,610 >> لكن لاحظ ما أنا به للمرة الأولى. 518 00:21:05,610 --> 00:21:07,910 ما يختلف بوضوح عن خط 21؟ 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 في الواقع، انتظر لحظة. 521 00:21:11,402 --> 00:21:12,110 هذا هو نسخة اثنين. 522 00:21:12,110 --> 00:21:13,568 هذا هو ولا حتى الحق في البرنامج. 523 00:21:13,568 --> 00:21:14,780 كل الحق، في حالة تأهب المفسد. 524 00:21:14,780 --> 00:21:16,890 كل الحق، لذلك لم تمانع ذلك. 525 00:21:16,890 --> 00:21:18,520 هذا هو الجواب على سؤال المستقبل. 526 00:21:18,520 --> 00:21:21,450 >> هنا مقارنة-0، وأنا على وشك الحصول على سطر من النص. 527 00:21:21,450 --> 00:21:22,435 في برنامج أبسط من ذلك بكثير. 528 00:21:22,435 --> 00:21:23,560 لذلك هذا واضح ومباشر. 529 00:21:23,560 --> 00:21:28,070 هذا هو مثل أسبوع واحد، الاشياء أسبوعين في هذه اللحظة. سلسلة ق = GetString. 530 00:21:28,070 --> 00:21:29,700 الآن، وأنا أقول ذلك مرة أخرى هنا. 531 00:21:29,700 --> 00:21:31,830 سلسلة T = GetString. 532 00:21:31,830 --> 00:21:35,300 ومن ثم، فإن آخر شيء في هذا البرنامج، كما يوحي اسمها، 533 00:21:35,300 --> 00:21:37,090 وانا ذاهب الى محاولة مقارنتها. 534 00:21:37,090 --> 00:21:40,709 >> حتى إذا ق، السلسلة الأولى، يساوي = ر، ثم أنا 535 00:21:40,709 --> 00:21:42,250 سأقول لك اكتب نفس الشيء. 536 00:21:42,250 --> 00:21:44,291 آخر، انا ذاهب الى القول قمت بكتابة أشياء مختلفة. 537 00:21:44,291 --> 00:21:45,880 لذلك دعونا ترجمة وتشغيل هذا البرنامج. 538 00:21:45,880 --> 00:21:48,481 لذا تأكد مقارنة الصفر. 539 00:21:48,481 --> 00:21:48,980 تبدو جيدة. 540 00:21:48,980 --> 00:21:50,490 عدم وجود أخطاء الترجمة. 541 00:21:50,490 --> 00:21:52,386 >> اسمحوا لي المضي قدما الآن واكتب ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 اسمحوا لي المضي قدما وأقول شيئا : Daven وشيء: روب. 544 00:21:59,220 --> 00:22:00,450 وأنا اكتب أشياء مختلفة. 545 00:22:00,450 --> 00:22:01,250 حتى الان جيدة جدا. 546 00:22:01,250 --> 00:22:02,680 يبدو البرنامج ليكون صحيحا. 547 00:22:02,680 --> 00:22:03,880 >> ولكن دعونا تشغيله مرة أخرى. 548 00:22:03,880 --> 00:22:05,800 أقول شيئا: غابي. 549 00:22:05,800 --> 00:22:07,140 أقول شيئا: غابي. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 كل الحق. 552 00:22:09,020 --> 00:22:10,851 ربما أنا ضرب شريط الفضاء أو شيء غير تقليدي. 553 00:22:10,851 --> 00:22:11,600 دعونا نفعل ذلك مرة أخرى. 554 00:22:11,600 --> 00:22:13,020 حتى Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 أشياء مختلفة. 559 00:22:17,330 --> 00:22:19,430 فما الذي يجري؟ 560 00:22:19,430 --> 00:22:23,200 >> لذلك لدينا هذين الخطين من رمز، GetString استدعائه مرتين. 561 00:22:23,200 --> 00:22:25,760 ومن ثم، أنا ببساطة في محاولة لمقارنة ق و ر. 562 00:22:25,760 --> 00:22:28,370 ولكن ما حقا ثم يجري؟ 563 00:22:28,370 --> 00:22:31,180 حسنا، عن بلدي الكتابة اليدوية ل جزار هذا المثال إلى حد ما. 564 00:22:31,180 --> 00:22:34,630 ودعونا رمي الواقع هذا الأمر أكثر من هنا، أيضا. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> لذلك لدينا خط مثل سلسلة ق = GetString. 567 00:22:45,712 --> 00:22:48,295 ولهذا ببساطة أول خط للاهتمام من هذا البرنامج. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 ولكن ماذا كان كل هذا الوقت يجري تحت غطاء محرك السيارة؟ 570 00:22:52,974 --> 00:22:55,890 حسنا، من ناحية الجانب الأيسر هو سلسلة، وهو نوع من متغير، 571 00:22:55,890 --> 00:22:56,785 وهذا يدعى ق. 572 00:22:56,785 --> 00:23:00,019 إذا كنت لا تعرف أن هذا الأمر باستخدام الذاكرة، أو RAM، في جهاز الكمبيوتر الخاص بي بطريقة أو بأخرى. 573 00:23:00,019 --> 00:23:02,060 لذلك أنا ذاهب الى تجريدي كما أن رسم مربع. 574 00:23:02,060 --> 00:23:04,820 32 بت، كما تبين، ولكن أكثر على ذلك في المستقبل. 575 00:23:04,820 --> 00:23:06,410 ثم، ما الذي يحدث هنا؟ 576 00:23:06,410 --> 00:23:08,700 >> حسنا، من الواضح GetString يحصل على سلسلة من المستخدم. 577 00:23:08,700 --> 00:23:11,360 وحصلت GetString Zamyla أو غابي أو Daven. 578 00:23:11,360 --> 00:23:14,640 لذلك دعونا اختيار أولا تلك التي كانت Daven. 579 00:23:14,640 --> 00:23:19,174 بذلك على نحو فعال، حصل ما GetString لي في أن الحالة الأولى كانت D-A-V-E-N. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 ثم، ماذا فعل انها تعطيني سرا؟ 582 00:23:25,045 --> 00:23:25,920 الجمهور: [غير مسموع] 583 00:23:25,920 --> 00:23:28,720 J. DAVID مالان: نعم، و/ 0 أو باطل الحرف. 584 00:23:28,720 --> 00:23:30,550 لذلك أعطى فعال لي سلسلة. 585 00:23:30,550 --> 00:23:34,550 ولكننا نعرف بالفعل سابقة يبدو أن سلسلة هو مجرد مجموعة 586 00:23:34,550 --> 00:23:37,895 من الشخصيات، وانها انتهت من قبل هذه الشخصية الحارس خاص، / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> ولكن إذا كان هذا صحيحا وهذا هو مربع، 589 00:23:42,310 --> 00:23:44,160 هذا هو واضح مستطيل أكبر من ذلك بكثير. 590 00:23:44,160 --> 00:23:46,830 وبالفعل، وهذا هو، أزعم، 32 بت فقط. 591 00:23:46,830 --> 00:23:49,500 وهذا هو بوضوح أكثر من 32 بت، لأن هذا هو الأرجح 592 00:23:49,500 --> 00:23:51,583 ثمانية بالإضافة إلى ثمانية بالإضافة إلى ثمانية بالإضافة إلى ثمانية بالإضافة إلى ثمانية، 593 00:23:51,583 --> 00:23:53,320 لمجرد وحدات البايت في ASCII. 594 00:23:53,320 --> 00:23:57,030 كيف هيك نحن ذاهبون لتناسب Daven في هذا الصندوق الصغير هنا؟ 595 00:23:57,030 --> 00:23:59,880 >> حسنا، ما هو في الواقع GetString تفعل؟ 596 00:23:59,880 --> 00:24:03,680 حسنا، هذه الشبكة هنا يمثل ذاكرة الكمبيوتر أو ذاكرة الوصول العشوائي. 597 00:24:03,680 --> 00:24:07,564 لذلك دعونا نقول انه اذا تعسفا كل من هذه يمثل بايت، 598 00:24:07,564 --> 00:24:09,730 ثم يمكن أن نفكر في كل البايت وجود عنوان، 599 00:24:09,730 --> 00:24:13,830 33 مثل شارع أكسفورد، أو 34 شارع أكسفورد، أو 35 شارع أكسفورد. 600 00:24:13,830 --> 00:24:16,700 >> لذلك تماما مثل المنازل وعناوين والمباني لها عناوين، 601 00:24:16,700 --> 00:24:19,810 لذا قم بايت الفردية الذاكرة لها عناوين أو أرقام 602 00:24:19,810 --> 00:24:21,042 أن التعرف عليهم بشكل فريد. 603 00:24:21,042 --> 00:24:22,000 الآن، وهذا هو التعسفي. 604 00:24:22,000 --> 00:24:25,370 ولكن أن يبقيه بسيط، انا ذاهب الى استخدام عشري فقط من خلال اتفاقية، 605 00:24:25,370 --> 00:24:28,200 لكن 0X يعني شيئا آخر من "هذا هو عشري". 606 00:24:28,200 --> 00:24:31,030 وانا ذاهب الى الادعاء بأن "D" ينتهي في بايت واحد في الذاكرة. 607 00:24:31,030 --> 00:24:34,210 >> حصلت على شيء آخر يحدث في الذاكرة، لذلك Daven حصلت على المركز الأول 608 00:24:34,210 --> 00:24:35,509 في بايت واحد. 609 00:24:35,509 --> 00:24:36,800 هذه، إذن، ستكون 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 هذا هو الذهاب الى 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 هذا سيكون 0x4. 614 00:24:41,800 --> 00:24:43,025 هذا هو الذهاب الى 0x5. 615 00:24:43,025 --> 00:24:44,025 هذا سيكون 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> ولكن بمجرد البدء في التفكير حول ما يفعله الكمبيوتر 618 00:24:48,290 --> 00:24:50,710 تحت غطاء محرك السيارة، يمكنك البدء في استنتاج 619 00:24:50,710 --> 00:24:54,960 كيف، قبل بضع سنوات، من شأنه نفذت C نفسها. 620 00:24:54,960 --> 00:24:58,360 ما هو GetString ربما لأنه returning-- 621 00:24:58,360 --> 00:25:00,946 كأنه ليس العودة Daven، في حد ذاته، 622 00:25:00,946 --> 00:25:03,320 لانه بالتأكيد لن لتناسب في هذا box-- قليلا 623 00:25:03,320 --> 00:25:05,090 ذلك ما GetString ربما يعود؟ 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> الجمهور: [غير مسموع] 626 00:25:08,920 --> 00:25:10,540 >> J. DAVID مالان: موقع Daven. 627 00:25:10,540 --> 00:25:12,770 وانه تم القيام بذلك منذ أسبوع واحد. 628 00:25:12,770 --> 00:25:16,150 ما هو حقا GetString العودة ليست سلسلة، في حد ذاتها. 629 00:25:16,150 --> 00:25:17,780 أن واحدة من أكاذيب بيضاء صغيرة. 630 00:25:17,780 --> 00:25:22,520 انها عودة عنوان سلسلة في الذاكرة، وعنوان فريد. 631 00:25:22,520 --> 00:25:24,820 Daven يعيش في 33 شارع أكسفورد. 632 00:25:24,820 --> 00:25:29,310 ولكن أكثر وضوحا، يعيش جافين في 0x1، على العنوان ورقم واحد. 633 00:25:29,310 --> 00:25:32,280 >> فما يحصل في وضع هذه الصندوق الصغير ثم، أن تكون واضحة، 634 00:25:32,280 --> 00:25:35,930 هو مجرد عنوان هذه السلسلة. 635 00:25:35,930 --> 00:25:38,110 لذلك كل هذا الوقت، وهذا وقد استمر الحال على. 636 00:25:38,110 --> 00:25:41,650 ولكن ما يلمح في هذا الآن هو أنه إذا كان كل S قد 637 00:25:41,650 --> 00:25:44,710 هو رقم داخل منه، الذي هو لوقف لكم، مبرمج، 638 00:25:44,710 --> 00:25:47,970 من وضع أي رقم في أي متغير ومجرد القفز 639 00:25:47,970 --> 00:25:49,080 إلى أن جزءا من الذاكرة؟ 640 00:25:49,080 --> 00:25:51,320 وبالفعل، سنرى هذا هو التهديد في المرة القادمة. 641 00:25:51,320 --> 00:25:53,500 >> ولكن الآن، وهذا يشعر غير كافية. 642 00:25:53,500 --> 00:25:55,630 إذا قلت، يحصل لي سلسلة، وكنت تعطيني Daven. 643 00:25:55,630 --> 00:25:57,230 لكنك لا تعطي حقا لي Daven. 644 00:25:57,230 --> 00:25:59,310 كل ما تعطيني هو عنوان Daven ل. 645 00:25:59,310 --> 00:26:04,310 كيف يمكنني ثم نعرف على وجه اليقين حيث يبدأ Daven وends-- 646 00:26:04,310 --> 00:26:07,140 القصة الحصول weird-- حيث يبدأ وينتهي Daven، 647 00:26:07,140 --> 00:26:10,435 ومن ثم، فإن القادم سلسلة تبدأ في الذاكرة؟ 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> حسنا، إذا كنت تسليم لي بداية Daven، 650 00:26:13,620 --> 00:26:17,230 أساسا، كيف أعرف حيث نهاية اسمه؟ 651 00:26:17,230 --> 00:26:20,550 أن حرف خالية خاص، والتي هو كل شيء أكثر أهمية الآن 652 00:26:20,550 --> 00:26:23,040 إذا سلاسل تحت وحددت غطاء محرك السيارة ببساطة 653 00:26:23,040 --> 00:26:25,820 فريد من موقعها في الذاكرة. 654 00:26:25,820 --> 00:26:28,130 لذلك كل هذا الوقت، وهذا ما كان يحدث. 655 00:26:28,130 --> 00:26:32,470 >> لذلك عندما ننظر الآن في رمز هنا، شرح 656 00:26:32,470 --> 00:26:35,790 لو تفضلتم علة في خط 26. 657 00:26:35,790 --> 00:26:39,560 لماذا هو Zamyla وZamyla مختلفة؟ 658 00:26:39,560 --> 00:26:41,330 لماذا هو وغابي غابي مختلفة؟ 659 00:26:41,330 --> 00:26:42,154 نعم، في الظهر. 660 00:26:42,154 --> 00:26:43,390 >> الجمهور: لديهم عناوين مختلفة. 661 00:26:43,390 --> 00:26:45,931 >> J. DAVID مالان: ببساطة لأن لديهم عناوين مختلفة. 662 00:26:45,931 --> 00:26:48,820 لأنه عند استدعاء GetString مرة أخرى، والذي سأفعل بسرعة هنا، 663 00:26:48,820 --> 00:26:52,870 إذا كان هذا هو السطر الثاني، سلسلة ر، كما فعلت في هذا البرنامج، 664 00:26:52,870 --> 00:26:55,030 يساوي مكالمة أخرى إلى GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 في المرة القادمة أسميه GetString، انا ذاهب 667 00:26:58,670 --> 00:27:00,190 للحصول على قطعة مختلفة من الذاكرة. 668 00:27:00,190 --> 00:27:02,220 >> يسمح GetString أن تطلب من التشغيل 669 00:27:02,220 --> 00:27:03,800 نظام للمزيد والمزيد من الذاكرة. 670 00:27:03,800 --> 00:27:07,894 انها لن إعادة استخدام نفس ستة بايت في كل مرة. 671 00:27:07,894 --> 00:27:09,810 انه ذاهب للحصول على جديد جزء من الذاكرة، التي 672 00:27:09,810 --> 00:27:12,780 ر يعني هو الذهاب الى الحصول بعض قيمة أخرى أكثر من هنا. 673 00:27:12,780 --> 00:27:15,380 >> لذلك عندما أفعل ق يساوي = ر، وكنت لا يقارن 674 00:27:15,380 --> 00:27:17,880 D و A ضد هذا ضد هذا وV ضد هذا. 675 00:27:17,880 --> 00:27:19,588 كنت مقارنة هذه ضد هذا الذي 676 00:27:19,588 --> 00:27:24,020 هي بصراحة useless-- useful-- جدا جميلة لا طائل منه، لأن الذين حقا 677 00:27:24,020 --> 00:27:25,830 حيث يهتم سلاسل هي في الذاكرة؟ 678 00:27:25,830 --> 00:27:26,850 >> وبالفعل، ليس لدينا. 679 00:27:26,850 --> 00:27:28,980 ونحن لن بدء رعاية خاصة. 680 00:27:28,980 --> 00:27:34,180 فقط لدرجة أن الحشرات يمكن أن تنشأ والتهديدات الأمنية يمكن أن تنشأ الإرادة 681 00:27:34,180 --> 00:27:36,100 نبدأ فعلا أن نهتم بذلك. 682 00:27:36,100 --> 00:27:37,230 لذلك دعونا إصلاح هذه المشكلة. 683 00:27:37,230 --> 00:27:39,650 تبين، يمكنك إصلاحه السوبر ببساطة. 684 00:27:39,650 --> 00:27:42,600 >> ودعونا في الواقع، قبل أن كشف ذلك مرة أخرى، ما من شأنه 685 00:27:42,600 --> 00:27:47,170 اذا في في فئة CS50، وكان لديك لتنفيذ 686 00:27:47,170 --> 00:27:48,600 مقارنة ضد سلسلتين. 687 00:27:48,600 --> 00:27:51,440 لك بوضوح لا يمكن فقط استخدام ق يساوي = ر. 688 00:27:51,440 --> 00:27:54,090 ولكن فقط منطقيا، كيف يمكن مقارنة هذه السلسلة 689 00:27:54,090 --> 00:27:56,370 ضد هذه السلسلة باستخدام رمز C؟ 690 00:27:56,370 --> 00:27:56,880 نعم. 691 00:27:56,880 --> 00:27:58,780 >> الجمهور: فقط تفعل لحلقة [غير مسموع] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 J. DAVID مالان: الكمال. 694 00:28:01,670 --> 00:28:02,900 الجمهور: [غير مسموع] 695 00:28:02,900 --> 00:28:03,310 J. DAVID مالان: نعم. 696 00:28:03,310 --> 00:28:05,390 مجرد استخدام للحلقة أو في حين حلقة أو أيا كان. 697 00:28:05,390 --> 00:28:08,710 ولكن مجرد تطبيق الفكرة الأساسية أنه إذا هذا هو جزء من الذاكرة أو صفيف 698 00:28:08,710 --> 00:28:11,590 وهذا هو، تكرار عبر سواء في نفس الوقت. 699 00:28:11,590 --> 00:28:12,960 ومجرد المقارنة بين الحروف. 700 00:28:12,960 --> 00:28:14,260 >> وكنت قد حصلت على أن يكون الحذر قليلا، لأنك 701 00:28:14,260 --> 00:28:16,247 لا أريد إصبع واحد للذهاب الماضي الآخر 702 00:28:16,247 --> 00:28:18,080 لأن سلسلة واحدة هي أطول من الآخر. 703 00:28:18,080 --> 00:28:21,380 لذلك كنت تريد الذهاب الى التحقق من و هذه القيمة خاصة في النهاية، لاغية. 704 00:28:21,380 --> 00:28:24,017 ولكنه في الواقع، في نهاية، بهذه البساطة. 705 00:28:24,017 --> 00:28:26,100 وبصراحة، نحن لسنا بحاجة لإعادة اختراع العجلة أن. 706 00:28:26,100 --> 00:28:27,960 هنا هو النسخة الثانية. 707 00:28:27,960 --> 00:28:32,910 وما انا ذاهب الى القول هنا هو أن بدلا من مقارنة يساوي = ق ر، 708 00:28:32,910 --> 00:28:38,964 أنا بدلا سأقول، إذا سلسلة مقارنة فاصلة ر ق يساوي = 0. 709 00:28:38,964 --> 00:28:40,130 الآن، ما هو سلسلة مقارنة؟ 710 00:28:40,130 --> 00:28:43,046 >> اتضح، انها الوظيفة التي يأتي مع C، هدفها في الحياة 711 00:28:43,046 --> 00:28:44,650 هو مقارنة سلسلتين. 712 00:28:44,650 --> 00:28:48,300 ويحرك مقارنة، اذا قرأنا لها الصفحة رجل أو وثائق أو CS50 713 00:28:48,300 --> 00:28:50,630 المرجعية، وسوف ببساطة اقول لكم ان ضجة 714 00:28:50,630 --> 00:28:55,730 مقارنة عوائد إما السلبية عدد أو رقم موجب أو صفر، 715 00:28:55,730 --> 00:28:57,660 حيث يعني الصفر انهم المساواة. 716 00:28:57,660 --> 00:28:58,570 >> حتى مجرد التخمين. 717 00:28:58,570 --> 00:29:00,390 ما قد يعني أنه إذا إثارة العوائد مقارنة 718 00:29:00,390 --> 00:29:02,110 قيمة سالبة أو قيمة إيجابية؟ 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 الجمهور: أكبر من أو أقل من. 721 00:29:04,285 --> 00:29:05,570 J. DAVID مالان: نعم، أكبر من أو أقل من. 722 00:29:05,570 --> 00:29:08,640 حتى إذا كنت تريد فرز ككل مجموعة من السلاسل في dictionary-- 723 00:29:08,640 --> 00:29:12,975 ونحن في نهاية المطاف إلى أسفل road-- وظيفة مثالية للاستخدام المحتمل، 724 00:29:12,975 --> 00:29:15,850 لأنه ذاهب للقيام بذلك المقارنة بين السلاسل بالنسبة لك، ونقول 725 00:29:15,850 --> 00:29:20,060 هل يقوم يأتي قبل ب، أو لا ب تأتي قبل أبجديا. 726 00:29:20,060 --> 00:29:21,490 يمكننا أن نفعل ذلك بالضبط. 727 00:29:21,490 --> 00:29:23,620 >> ولاحظ فعلت الآخر شيء في هذا المثال. 728 00:29:23,620 --> 00:29:26,870 ماذا تغيرت أعلى حتى في هذه الوظيفة الرئيسية؟ 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 شار *. 731 00:29:29,350 --> 00:29:31,150 وهذا هو كذبة بيضاء أخرى. 732 00:29:31,150 --> 00:29:33,750 كل هذا الوقت، وعندما قمت تم كتابة سلسلة، 733 00:29:33,750 --> 00:29:38,350 لقد تم إعادة كتابة سرا كما تشار * سلسلة بحيث رنة الواقع 734 00:29:38,350 --> 00:29:39,270 يفهم لك. 735 00:29:39,270 --> 00:29:42,450 >> وبعبارة أخرى، في CS50.h وكما سنرى في نهاية المطاف، 736 00:29:42,450 --> 00:29:45,950 قدمنا ​​سلسلة مرادف يسمى هذا هو نفس الشيء كما شار *. 737 00:29:45,950 --> 00:29:49,910 والآن، لا يعرفون سوى أن * في هذا السياق، على الأقل، 738 00:29:49,910 --> 00:29:51,286 يعني العنوان. 739 00:29:51,286 --> 00:29:52,210 >> عنوان ماذا؟ 740 00:29:52,210 --> 00:29:56,390 كذلك، فإن حقيقة أن قلت شار * وليس كثافة العمليات * أو تطفو *، 741 00:29:56,390 --> 00:30:00,820 يعني أن تشار * هو عنوان شار. 742 00:30:00,820 --> 00:30:06,770 لذلك هذا الصندوق الصغير هنا، الملقب سلسلة، هو في الحقيقة من نوع شار *، 743 00:30:06,770 --> 00:30:10,490 الذي هو مجرد طريقة أخرى للقول، في هذا المربع سوف تذهب عنوان. 744 00:30:10,490 --> 00:30:12,430 وماذا يعني هذا العنوان إشارة إلى؟ 745 00:30:12,430 --> 00:30:13,780 على ما يبدو، على شار. 746 00:30:13,780 --> 00:30:16,410 >> لكننا يمكن على الاطلاق * لدينا كثافة العمليات وغيرها من الامور. 747 00:30:16,410 --> 00:30:20,790 لكنه الآن، تشار * هو في الواقع أكثر واضحة واحدة من الفائدة. 748 00:30:20,790 --> 00:30:23,310 حتى هذه المشكلة سوف في الارتفاع، رغم ذلك، مرة أخرى. 749 00:30:23,310 --> 00:30:24,830 >> افترض فتح هذا البرنامج. 750 00:30:24,830 --> 00:30:27,670 دعونا نرى ما اذا كان يمكننا التنبؤ الآن ما هو الخطأ في هذا الرمز. 751 00:30:27,670 --> 00:30:31,140 حتى في هذا البرنامج، نسخ-0، وأنا الذهاب الى المضي قدما وندعو مرة أخرى 752 00:30:31,140 --> 00:30:34,190 GetString وتخزين القيمة في ق. 753 00:30:34,190 --> 00:30:38,800 >> ثم، لماذا أفعل هذا، فقط للتذكير أسابيع من الماضي؟ 754 00:30:38,800 --> 00:30:40,960 فعلنا القول بأن GetString يعود أحيانا لاغية. 755 00:30:40,960 --> 00:30:42,793 ماذا يعني إذا GetString يعود لاغية؟ 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 ذهب شيئا خاطئا. 758 00:30:46,034 --> 00:30:48,950 يعني على الارجح السلسلة جدا كبيرة، خارج الكمبيوتر من الذاكرة. 759 00:30:48,950 --> 00:30:51,724 يحدث السوبر، والسوبر، والسوبر نادرا، لكنه يمكن أن يحدث. 760 00:30:51,724 --> 00:30:53,890 نحن نريد للتحقق من ذلك، وهذا كل ما نقوم به. 761 00:30:53,890 --> 00:30:57,910 >> لأننا سوف نرى الآن، إذا كنت لا بدء التحقق عادة للأشياء 762 00:30:57,910 --> 00:31:00,870 مثل لاغية، وكنت قد بدء فعلا للذهاب 763 00:31:00,870 --> 00:31:03,106 إلى عناوين في الذاكرة التي هي غير صالحة. 764 00:31:03,106 --> 00:31:05,980 وأنت تسير لبدء حمل المزيد والمزيد من تجزئة أخطاء. 765 00:31:05,980 --> 00:31:08,360 أو في ماك أو جهاز كمبيوتر، فقط مما تسبب في الكمبيوتر معطلا 766 00:31:08,360 --> 00:31:10,340 أو برنامج لتجميد، يحتمل. 767 00:31:10,340 --> 00:31:14,930 >> حتى الآن، أنا أطالب في النسخ 0.c، وأنني ذاهب لنسخ هذه السلاسل عن طريق 768 00:31:14,930 --> 00:31:15,685 خط 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 وبعد ذلك، انا ذاهب المطالبة في أسفل 771 00:31:18,750 --> 00:31:21,430 هنا أنني ذاهب لتغيير واحد منهم. 772 00:31:21,430 --> 00:31:22,330 >> لذلك تلاحظ هذا. 773 00:31:22,330 --> 00:31:24,370 ادعو لدينا القديم صديق strlen. 774 00:31:24,370 --> 00:31:28,960 وشرح فقط باللغة الإنجليزية ما هذا السطر 34 يقوم به؟ 775 00:31:28,960 --> 00:31:32,480 ماذا ر 0 قوس تمثل على اليسار. 776 00:31:32,480 --> 00:31:32,980 نعم. 777 00:31:32,980 --> 00:31:34,339 >> الجمهور: أول حرف من ر؟ 778 00:31:34,339 --> 00:31:35,880 J. DAVID مالان: الحرف الأول من ر. 779 00:31:35,880 --> 00:31:36,379 هذا كل شيء. 780 00:31:36,379 --> 00:31:40,024 الحرف الأول من ر، أريد لتعيين النسخة الكبيرة 781 00:31:40,024 --> 00:31:41,190 من الحرف الأول في ر. 782 00:31:41,190 --> 00:31:43,200 لذلك هذا هو الاستفادة الحرف الأول. 783 00:31:43,200 --> 00:31:46,340 ومن ثم، فإن آخر شيء أفعله جدا في هذا البرنامج هو أزعم هنا 784 00:31:46,340 --> 00:31:50,340 الأصلي، S، وهنا هو نسخة، ر. 785 00:31:50,340 --> 00:31:54,610 >> ولكن على أساس القصة ونحن فقط وقال حول ما هي سلاسل حقا، 786 00:31:54,610 --> 00:31:57,520 ما هو خط 28 حقا به، وما هو 787 00:31:57,520 --> 00:31:59,405 علة الناتجة الذهاب أن تكون على الشاشة؟ 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> ذلك أولا، السؤال الأول، 28. 790 00:32:03,500 --> 00:32:09,040 ما هو سلسلة ر = ق تفعل حقا؟ 791 00:32:09,040 --> 00:32:16,430 اذا كان لدينا من جهة اليسار الجانب هنا سلسلة T = ثانية؛ 792 00:32:16,430 --> 00:32:19,400 أن يعطيني مربع واحد هنا ومربع واحد هنا. 793 00:32:19,400 --> 00:32:25,530 ويفترض هذا العنوان هو 0X، دعنا نقول، 50 هذه المرة، بشكل تعسفي. 794 00:32:25,530 --> 00:32:28,847 ماذا سلسلة T = ق القيام تحت غطاء محرك السيارة؟ 795 00:32:28,847 --> 00:32:30,340 >> الجمهور: [غير مسموع] 796 00:32:30,340 --> 00:32:34,100 >> J. DAVID مالان: لأنه يخزن الذاكرة معالجة هناك، لذلك 0x50 يذهب هناك. 797 00:32:34,100 --> 00:32:37,980 حتى إذا الآن، وأنا أذهب إلى الأول حرف في ر وأحرف كبيرة عليه، 798 00:32:37,980 --> 00:32:39,535 ماذا أفعل فعال لق؟ 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 أفعله حقا نفس الشيء، أليس كذلك؟ 801 00:32:43,450 --> 00:32:47,680 لأنه إذا كان عنوان 0x50-- وفقط، وأنا لم يكن لديك متسع على اللوحة هنا، 802 00:32:47,680 --> 00:32:51,750 ولكن نفترض أن هذا هو 0x50 إلى هنا، في مكان ما في ذاكرة جهاز الكمبيوتر الخاص بي. 803 00:32:51,750 --> 00:32:55,825 >> ولقد، على سبيل المثال، غابي في أحرف صغيرة هنا، من هذا القبيل. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 ولقد قال ر قوس 0 يحصل رسملتها. 806 00:33:01,980 --> 00:33:04,860 حسنا، ر 0 قوس هو الحرف الأول في ر. 807 00:33:04,860 --> 00:33:07,840 حتى القليل ز سوف تصبح كبيرة G. ولكن المشكلة 808 00:33:07,840 --> 00:33:09,410 هو، ماذا ق يشيرون أيضا إلى؟ 809 00:33:09,410 --> 00:33:10,300 >> الجمهور: نفس. 810 00:33:10,300 --> 00:33:11,841 >> J. DAVID مالان: نفس الشيء بالضبط. 811 00:33:11,841 --> 00:33:16,342 حتى تفسير بسيط ربما، حتى لو كانت الجملة هو غريب قليلا. 812 00:33:16,342 --> 00:33:17,050 لذلك دعونا نفعل ذلك. 813 00:33:17,050 --> 00:33:20,210 جعل نسخة-0 ثم ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 أقول شيئا: غابي. 816 00:33:24,110 --> 00:33:26,760 وللأسف، كل من منهم الآن تم رسملتها، 817 00:33:26,760 --> 00:33:29,500 ولكن لأنه الكامنة السبب أننا ببساطة 818 00:33:29,500 --> 00:33:32,350 الآن نتعامل مع العناوين. 819 00:33:32,350 --> 00:33:36,470 >> كيف لنا إذن أن نبدأ في address-- لا تورية intended-- 820 00:33:36,470 --> 00:33:39,270 كيف نبدأ في معالجة هذه المشكلة بالذات؟ 821 00:33:39,270 --> 00:33:44,400 حسنا، في copy1.c، تسير الامور للحصول قليلا أكثر تعقيدا. 822 00:33:44,400 --> 00:33:49,310 ولكن أود أن المطالبة حل بسيط من الناحية النظرية. 823 00:33:49,310 --> 00:33:50,852 >> من الصعب جدا الحصول على أول وهلة. 824 00:33:50,852 --> 00:33:53,560 لن يكون من السهل للمرة الأولى مرة كنت اكتب بها، ربما، 825 00:33:53,560 --> 00:33:57,440 ولكن إذا كانت المشكلة هي أن ببساطة القيام ر = ق فقط 826 00:33:57,440 --> 00:33:59,694 نسخ عنوان، ما، مرة أخرى ما اذا كان يمكنني اختيار عليك، 827 00:33:59,694 --> 00:34:02,110 سيكون الحل لنسخ الواقع سلسلة؟ 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> الجمهور: سنقوم على الأرجح استخدام حلقة مرة أخرى. 830 00:34:06,770 --> 00:34:06,890 >> J. DAVID مالان: نعم. 831 00:34:06,890 --> 00:34:08,390 لذلك نحن سنحتاج الى حلقة مرة أخرى. 832 00:34:08,390 --> 00:34:11,800 وأنه إذا كنا نريد نسخ وق سلسلة إلى سلسلة أخرى، 833 00:34:11,800 --> 00:34:14,120 ربما نحن نريد أن نفعل ذلك حرف بحرف. 834 00:34:14,120 --> 00:34:17,199 ولكن المشكلة هي، إذا هذا هو في الأصل ق، 835 00:34:17,199 --> 00:34:22,159 الآن نحن بحاجة للبدء بشكل واضح تخصيص الذاكرة لر. 836 00:34:22,159 --> 00:34:24,320 >> وبعبارة أخرى، دعونا رسم هذا للمرة الأخيرة. 837 00:34:24,320 --> 00:34:28,659 إذا كانت هذه هي سلسلة ق = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 ودعونا نضع هذا الأمر هنا، أيضا. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 هذا هو GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 ومن ثم، فإن الصورة عن شيء من هذا القبيل سيكون كما كان من قبل، 844 00:34:43,860 --> 00:34:44,360 ز-A-B-الإلكترونية / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 يبدو أن شيئا قليلا من هذا القبيل. 847 00:34:48,960 --> 00:34:53,650 ق وبالتالي، فإننا ندعو هذه 0x50، والتي ستكون 51 و 52. 848 00:34:53,650 --> 00:34:54,409 >> لذلك هذا هو 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 وبعد ذلك، أفعل سلسلة ر. 851 00:34:59,690 --> 00:35:02,450 في الذاكرة، وهذا مجرد الذهاب ل أعطني مربع صغير مثل هذا. 852 00:35:02,450 --> 00:35:04,080 فما هي الخطوة الرئيسية الآن؟ 853 00:35:04,080 --> 00:35:09,870 إذا كنت تريد نسخ ق في ر، ما فارغة نحتاج لملء هنا؟ 854 00:35:09,870 --> 00:35:12,050 أو ماذا نحتاج ل القيام على مستوى عال؟ 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 نعم؟ 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 شخص ما؟ 859 00:35:17,020 --> 00:35:17,690 نعم. 860 00:35:17,690 --> 00:35:19,214 >> الجمهور: نحن بحاجة إلى [غير مسموع]. 861 00:35:19,214 --> 00:35:21,380 J. DAVID مالان: نعم، نحن تحتاج إلى ملء هذا الفراغ. 862 00:35:21,380 --> 00:35:24,340 لا أستطيع نسخ ثم استغلال اسم غابي 863 00:35:24,340 --> 00:35:28,120 حتى أطلب من نظام التشغيل لجزء آخر من الذاكرة 864 00:35:28,120 --> 00:35:30,640 هذا هو على الأقل كبير مثل الأصلي. 865 00:35:30,640 --> 00:35:32,130 بحيث يترك لنا السؤال. 866 00:35:32,130 --> 00:35:36,080 >> كيف أطلب من نظام التشغيل لا فقط لpointer-- قليلا بسيطة 867 00:35:36,080 --> 00:35:38,530 وهذا ما يسمى، و العنوان، لا pointer-- 868 00:35:38,530 --> 00:35:40,980 لمربع صغير بسيط مثل هذا يسمى سلسلة؟ 869 00:35:40,980 --> 00:35:44,200 كيف أطلب من التشغيل نظام لجزء كبير من الذاكرة؟ 870 00:35:44,200 --> 00:35:48,430 حتى الآن، لقد حصلت فقط أن يعود بشكل غير مباشر عن طريق الاتصال GetString. 871 00:35:48,430 --> 00:35:50,740 فكيف يتم GetString حتى الحصول على ذاكرته؟ 872 00:35:50,740 --> 00:35:53,430 >> حسنا، اتضح أن هناك هذه وظيفة أخرى هنا 873 00:35:53,430 --> 00:35:55,160 أننا سوف الآن البدء في استخدام. 874 00:35:55,160 --> 00:35:59,780 الآن، وهذا يبدو than-- بطريقة أكثر خفي وأنا الوحيد الذي يمكن أن نرى it-- 875 00:35:59,780 --> 00:36:03,150 هذا الخط يبدو الطريق أكثر خفي ثم ينبغي له للوهلة الأولى. 876 00:36:03,150 --> 00:36:04,650 ولكن دعونا ندف إربا. 877 00:36:04,650 --> 00:36:07,950 >> على الجانب الأيسر، ولدي شار * ر. 878 00:36:07,950 --> 00:36:13,280 حتى في اللغة الإنجليزية، لنبدأ في صياغة الجمل المناسبة في المصطلحات التقنية. 879 00:36:13,280 --> 00:36:19,757 لذلك هذا هو تخصيص متغير نوع شار * دعا ر. 880 00:36:19,757 --> 00:36:21,090 الآن، ماذا يعني ذلك حقا؟ 881 00:36:21,090 --> 00:36:23,881 >> حسنا، وهذا يعني، ما أنا ذاهب لوضع هذا المتغير يسمى ر؟ 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 عنوان إحدى شار. 884 00:36:26,402 --> 00:36:28,360 ذلك أن مجرد بساطة، أكثر طريقة معقولة 885 00:36:28,360 --> 00:36:29,930 لوصف الجانب الأيسر. 886 00:36:29,930 --> 00:36:32,890 بحيث يخلق هذا الإطار هنا فقط. 887 00:36:32,890 --> 00:36:34,760 وبالتالي فإن الجانب الأيمن، يفترض، يجري 888 00:36:34,760 --> 00:36:37,170 تخصيص أن أكبر جزء من الذاكرة كيف؟ 889 00:36:37,170 --> 00:36:38,340 لذلك دعونا ندف هذا عدا. 890 00:36:38,340 --> 00:36:41,131 >> انها الساحقة للوهلة الأولى، ولكن ما يحدث داخل هنا؟ 891 00:36:41,131 --> 00:36:43,740 أولا، هناك malloc، التي على ما يبدو صديقنا الجديد، 892 00:36:43,740 --> 00:36:45,450 "الذاكرة تخصص". 893 00:36:45,450 --> 00:36:49,560 لذلك هذا هو حجة يتم تمريرها في ذلك، لذلك هو حجة كبيرة جدا. 894 00:36:49,560 --> 00:36:50,970 لذلك دعونا ندف هذا عدا. 895 00:36:50,970 --> 00:36:53,410 >> strlen من ليالي بالطبع، يمثل، the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 الجمهور: عدد الأحرف. 898 00:36:55,600 --> 00:36:56,710 J. DAVID مالان: مجرد عدد الأحرف في ق. 899 00:36:56,710 --> 00:36:59,040 حتى طول ق، السلسلة الأصلية. 900 00:36:59,040 --> 00:37:00,350 حتى G-A-B-E. 901 00:37:00,350 --> 00:37:02,320 لذلك فمن المحتمل أربعة في هذه الحالة. 902 00:37:02,320 --> 00:37:05,485 ماذا أفعل بعد +1 داعيا strlen من ليالي؟ 903 00:37:05,485 --> 00:37:06,360 الجمهور: [غير مسموع] 904 00:37:06,360 --> 00:37:07,590 J. DAVID مالان: ولهذا الطابع الخاص لاغية. 905 00:37:07,590 --> 00:37:11,260 اذا سألتني ما هو طول اسم غابي، وانا ذاهب الى القول الأربعة. 906 00:37:11,260 --> 00:37:14,480 تحت غطاء محرك السيارة، رغم ذلك، أحتاج أن البايت الخامس للحرف فارغة. 907 00:37:14,480 --> 00:37:16,100 ولهذا السبب أنا القيام +1. 908 00:37:16,100 --> 00:37:21,730 >> الآن فقط في حال كنت تقوم بتشغيل هذا برنامج على جهاز كمبيوتر آخر غير ويقول، 909 00:37:21,730 --> 00:37:24,610 الأجهزة CS50، حيث حجم شار 910 00:37:24,610 --> 00:37:26,350 قد يكون مختلفا من وجهة نظري الخاصة computer-- 911 00:37:26,350 --> 00:37:30,590 تبين أن أستطيع أن أسمي هذا مشغل sizeof، فقط أسأل الكمبيوتر، 912 00:37:30,590 --> 00:37:32,870 ما هو حجم شار على هذا الكمبيوتر؟ 913 00:37:32,870 --> 00:37:37,400 >> وبضرب خمسة في هذا مثلا عن طريق حجم شار، التي 914 00:37:37,400 --> 00:37:40,440 على معظم أجهزة الكمبيوتر سوف يكون واحد فقط، malloc 915 00:37:40,440 --> 00:37:44,830 يجري تخصيص بالنسبة لي هذا كبير جزء من الذاكرة أكثر من هنا على اليمين. 916 00:37:44,830 --> 00:37:47,140 وانها سوف return-- وهو function-- لذلك فمن 917 00:37:47,140 --> 00:37:48,265 سوف تعود لي ماذا؟ 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 الجمهور: عنوان؟ 920 00:37:51,830 --> 00:37:53,709 J. DAVID مالان: عنوان ماذا؟ 921 00:37:53,709 --> 00:37:55,250 الجمهور: من الذاكرة فإنه المخصصة؟ 922 00:37:55,250 --> 00:37:56,450 J. DAVID مالان: من الذاكرة التي خصصت. 923 00:37:56,450 --> 00:37:59,189 لذلك ليس لدي أي فكرة، وبصراحة، أين يحدث هذا في نهاية المطاف. 924 00:37:59,189 --> 00:38:01,480 انا ذاهب الى أقترح أن انها سوف ينتهي في 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 تعسفية تماما، ولكن في مكان آخر غير 0x50، 927 00:38:06,009 --> 00:38:08,800 لأن نظام التشغيل، ما ويندوز وماك OS تفعل بالنسبة لي، هو 928 00:38:08,800 --> 00:38:11,230 تأكد من أنه هو إعطاء لي أجزاء مختلفة من ذاكرة الوصول العشوائي. 929 00:38:11,230 --> 00:38:14,210 >> لذلك هذا هو القيمة التي يكون فيها ذلك جزء من الذاكرة قد ينتهي. 930 00:38:14,210 --> 00:38:16,060 لذلك هذا هو ما ينتهي هنا، 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 حتى الآن بوضوح، أستطيع أن أفهم أن هذا ليس نفس هذا، 933 00:38:21,570 --> 00:38:23,960 لأنهم لافتا في أجزاء مختلفة من الذاكرة. 934 00:38:23,960 --> 00:38:29,980 لذلك إن أنا الآن فعلا تريد نسخ هذا في، دعونا نفعل الحل المقترح. 935 00:38:29,980 --> 00:38:36,870 >> دعنا نذهب فقط، إنشاء لحلقة، والقيام قوس ط ر ق يحصل قوس ط. 936 00:38:36,870 --> 00:38:39,760 لأنني الآن يمكن استخدام هذا مثل صفيف التدوين، 937 00:38:39,760 --> 00:38:43,390 لأنه حتى وإن malloc جدا تخصص بشكل عام لي الذاكرة، 938 00:38:43,390 --> 00:38:45,290 الذاكرة بايت فقط متجاورة. 939 00:38:45,290 --> 00:38:47,240 بايت، بايت، البايت، والعودة إلى العودة إلى الوراء. 940 00:38:47,240 --> 00:38:50,030 >> يمكنني بالتأكيد كمبرمج التعامل معها على أنها صفيف، التي 941 00:38:50,030 --> 00:38:55,090 يعني أنا يمكن استخدام هذه مألوفة أخيرا التدوين من مجرد بعض أقواس معقوفة. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> لذلك اسمحوا لي وقفة هناك، ل هذا هو الكثير في كل مرة، حتى 944 00:39:00,020 --> 00:39:03,530 على الرغم من أن الفكرة الأساسية لخلاصة هي أن سلسلة، كل هذا الوقت، 945 00:39:03,530 --> 00:39:05,550 ليس من نوع بيانات جديدة في حد ذاتها. 946 00:39:05,550 --> 00:39:10,150 انها مجرد مؤشر يسمى، عنوان إحدى الطابع، 947 00:39:10,150 --> 00:39:12,650 وهو ما يعني مجرد انها عددا أنه من خلال اتفاقية الإنسان 948 00:39:12,650 --> 00:39:15,350 نحن نميل الى الكتابة كما 0X شيء. 949 00:39:15,350 --> 00:39:18,590 >> ولكن هذا مجرد رقم، 33 مثل شارع أكسفورد، 950 00:39:18,590 --> 00:39:20,530 الذي صادف أن يكون عنوان بناء CS ل. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 أي أسئلة حول هذه التفاصيل؟ 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 نعم؟ 955 00:39:25,289 --> 00:39:28,530 >> الجمهور: لماذا نحن تحقق لر يساوي فارغة؟ 956 00:39:28,530 --> 00:39:30,740 >> J. DAVID مالان: لماذا نحن تحقق لر يساوي فارغة؟ 957 00:39:30,740 --> 00:39:33,250 إذا قرأنا documentation-- question-- كبيرة لmalloc، 958 00:39:33,250 --> 00:39:37,020 انها ستقول في غرامة المطبوعة، أحيانا malloc قد تعود فارغة 959 00:39:37,020 --> 00:39:38,080 تماما مثل GetString. 960 00:39:38,080 --> 00:39:41,820 وبالفعل، GetString يعود لاغية إذا، في المقابل، malloc ترجع خالي، 961 00:39:41,820 --> 00:39:43,130 لأن يستخدم GetString malloc. 962 00:39:43,130 --> 00:39:46,400 >> وهذا يمكن أن يحدث إذا كان نظام التشغيل، نظام التشغيل ماك، ويندوز، أيا كان، هو ببساطة 963 00:39:46,400 --> 00:39:48,130 من ذاكرة لك. 964 00:39:48,130 --> 00:39:49,820 وهذا ما حدث هناك. 965 00:39:49,820 --> 00:39:52,910 >> واسمحوا لي أن تكشف عن شيء واحد الآخر قد مجرد ضربة عقلك 966 00:39:52,910 --> 00:39:55,100 أو أن يكون تماما بعيدا جدا تجاوزت خط المرمى. 967 00:39:55,100 --> 00:39:59,770 ولكن اسمحوا لي سحب ما يصل نفسه بالنسبة لحلقة النسخ، 968 00:39:59,770 --> 00:40:05,480 وقبل لحظة، واستدعاء هذا. قوس ط ر ق يحصل قوس ط. 969 00:40:05,480 --> 00:40:06,740 >> لطيفة وسهلة الاستخدام. 970 00:40:06,740 --> 00:40:09,330 كأنه أسبوعين مرة أخرى. 971 00:40:09,330 --> 00:40:14,920 ولكن هذا الإصدار في الواقع يمكن أن يكون إعادة كتابة عن هذا، الذي يبدو خفي. 972 00:40:14,920 --> 00:40:18,280 انها مؤشر تقنية تسمى الحساب وعنوان الحساب. 973 00:40:18,280 --> 00:40:19,600 ولكن لماذا هذا العمل؟ 974 00:40:19,600 --> 00:40:22,220 >> الآن بشكل مزعج، و مؤلفو C قرر استخدام 975 00:40:22,220 --> 00:40:25,070 و* رمز لأغراض مختلفة. 976 00:40:25,070 --> 00:40:29,020 لقد رأينا ذلك تستخدم مرة واحدة بالفعل، * شار، التي تعني "أعطني متغير 977 00:40:29,020 --> 00:40:31,210 ما يجري لاحتواء عنوان شار ". 978 00:40:31,210 --> 00:40:33,990 * شار جدا في هذا السياق يعني "أعطني متغير". 979 00:40:33,990 --> 00:40:40,050 >> لسوء الحظ، إذا كنت تستخدم دون * كلمة أمامه، مثل شار، 980 00:40:40,050 --> 00:40:41,905 انه دعا الآن مشغل إلغاء مرجعية. 981 00:40:41,905 --> 00:40:43,530 وسنرى المزيد من هذا قبل وقت طويل. 982 00:40:43,530 --> 00:40:44,930 ولكنه يعني فقط "الذهاب إلى هناك". 983 00:40:44,930 --> 00:40:49,070 انها مثل القول، إذا كان شخص سلمني على قطعة من الورق "33 شارع أكسفورد" 984 00:40:49,070 --> 00:40:53,830 إذا كنت تفعل "* 33 شارع أكسفورد،" وهذا يعني "السير في الطريق إلى بناء CS". 985 00:40:53,830 --> 00:40:57,220 >> * يعني ذلك فقط الذهاب إلى هناك إذا ليس هناك كلمة أمامه. 986 00:40:57,220 --> 00:40:59,100 فما هو ر، أن تكون واضحة؟ 987 00:40:59,100 --> 00:41:03,250 ر هو عنوان قطعة من الذاكرة التي أعطيت back to ي. 988 00:41:03,250 --> 00:41:06,650 ق هو عنوان ما، أن تكون واضحة، في المثال كنا نناقش، 989 00:41:06,650 --> 00:41:07,500 من غابي صغيرة؟ 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 ق هو عنوان of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 الحضور: السلسلة. 994 00:41:12,460 --> 00:41:14,126 J. DAVID مالان: من اسم غابي الأصلي. 995 00:41:14,126 --> 00:41:16,660 لذلك فمن عنوان هذا جزء من الذاكرة. 996 00:41:16,660 --> 00:41:22,220 لذلك إذا قلت ر + i-- ط، اشعار، هو مجرد صديقنا القديم. 997 00:41:22,220 --> 00:41:24,770 انها مجرد متغير مؤشر هذا ما بالتكرار من الصفر على ما يصل 998 00:41:24,770 --> 00:41:26,960 على طول سلسلة ق. 999 00:41:26,960 --> 00:41:30,367 لذلك سيكون من الصفر، ثم واحدة، ثم اثنين، ثم ثلاثة، ثم أربعة. 1000 00:41:30,367 --> 00:41:33,200 لذلك دعونا تجميع هذه جديدة مثل الصفر قطع اللغز، اذا صح التعبير، 1001 00:41:33,200 --> 00:41:36,140 على الرغم من ذلك، مرة أخرى، بناء الجملة هو أكثر بكثير غامضة من خدش. 1002 00:41:36,140 --> 00:41:39,522 حتى ر هو عنوان + ط سوف تعطيني 1003 00:41:39,522 --> 00:41:42,480 عدد، لأن هذه كلها الأرقام التي كنا الرسم على النحو عرافة. 1004 00:41:42,480 --> 00:41:43,560 ولكنهم مجرد أرقام. 1005 00:41:43,560 --> 00:41:49,960 >> حتى إذا كان عنوان ر قلنا كان 0x88، 0x88 بالإضافة إلى ما هو الصفر. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 حتى لو كنت غير مريح مع عرافة بعد، واتخاذ تخمين. 1008 00:41:53,980 --> 00:41:54,410 >> الحضور: الأصلي. 1009 00:41:54,410 --> 00:41:55,850 >> J. DAVID مالان: لا يزال 0x88. 1010 00:41:55,850 --> 00:41:58,910 فماذا * 0x88 تعني؟ 1011 00:41:58,910 --> 00:42:02,670 وهو ما يعني، "الذهاب إلى هناك" وهو ما يعني على نحو فعال، "وضعت إصبعك هنا." 1012 00:42:02,670 --> 00:42:06,930 والآن على الجانب الأيمن من هذا التعبير، * ثم في parens، 1013 00:42:06,930 --> 00:42:11,586 ق + ط يعني، والذي هو معالجة هنا للز قليلا. 1014 00:42:11,586 --> 00:42:16,220 ق + 0 هي، بطبيعة الحال، S، كل ما هو ق. 1015 00:42:16,220 --> 00:42:21,230 >> وحتى الآن، فإنه من S *، الذي مثل * 33 شارع أكسفورد يعني الانتقال إلى العنوان 1016 00:42:21,230 --> 00:42:22,010 ق. 1017 00:42:22,010 --> 00:42:24,170 حتى هنا هذا الاصبع، اليد اليمنى. 1018 00:42:24,170 --> 00:42:26,050 فما أنا ذاهب إلى نسخ إلى ماذا؟ 1019 00:42:26,050 --> 00:42:30,260 الشيء على الحق، الذي هو غابي، والقليل ز هنا، إلى هنا. 1020 00:42:30,260 --> 00:42:32,750 >> وبالتالي فإن تأثير ذلك التكرار الأول من الحلقة، 1021 00:42:32,750 --> 00:42:36,200 كما يمكنك المقترحة، على الرغم من أنها تبدو مجنون أكثر تعقيدا من أي شيء 1022 00:42:36,200 --> 00:42:42,110 رأيناه من قبل، هو ببساطة قائلا تذهب هنا ونسخ تلك الشخصية هنا. 1023 00:42:42,110 --> 00:42:44,700 انها تعطيك الخريطة لكلا الموقعين. 1024 00:42:44,700 --> 00:42:46,130 >> وسنرى أكثر بكثير من هذا. 1025 00:42:46,130 --> 00:42:50,600 لكنه الآن، والأمل هو فقط ل إدخال بعض من هذه الأفكار الأساسية. 1026 00:42:50,600 --> 00:42:53,550 وبالفعل، دعونا ننظر في واحد البرنامج النهائي هنا، 1027 00:42:53,550 --> 00:42:57,480 ثم claymation وعدت، الأمر الذي سيجعل كل شيء بخير. 1028 00:42:57,480 --> 00:42:57,980 كل الحق. 1029 00:42:57,980 --> 00:43:01,680 لذلك اسمحوا لي فتح up-- هناك نذهب. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 لذلك دعونا me-- سنعود لهذه الصورة قبل فترة طويلة. 1032 00:43:05,440 --> 00:43:08,360 اسمحوا لي أن فتح هذا المثال النهائي هنا. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> حتى هنا هو السوبر، والسوبر البرنامج الذي يحقق 1035 00:43:12,710 --> 00:43:15,050 لا شيء في الحياة أن يفعل ما يلي. 1036 00:43:15,050 --> 00:43:18,740 لأول مرة يعلن متغيرين، س و y، التي لا الأعداد هذه المرة، 1037 00:43:18,740 --> 00:43:19,240 في حد ذاتها. 1038 00:43:19,240 --> 00:43:20,448 انهم ليسوا الأعداد الصحيحة، في حد ذاتها. 1039 00:43:20,448 --> 00:43:22,899 هم على ما يبدو كثافة العمليات *. 1040 00:43:22,899 --> 00:43:25,690 حتى مجرد أي شخص، ماذا يعني إذا كان نوع البيانات الخاصة بك، متغير الخاص بك، 1041 00:43:25,690 --> 00:43:26,860 هو من نوع int * نجمة؟ 1042 00:43:26,860 --> 00:43:30,240 هذا هو عنوان لكثافة العمليات. 1043 00:43:30,240 --> 00:43:31,990 >> لذلك ليس لدي فكرة أين هو حتى الان. 1044 00:43:31,990 --> 00:43:35,150 هو فقط يعني "وضع، في نهاية المطاف، عنوان لكثافة العمليات هنا ". 1045 00:43:35,150 --> 00:43:38,340 0x50، 0x88، أينما كان في الذاكرة، عنوان يجري هناك. 1046 00:43:38,340 --> 00:43:40,200 وهذا ما هو ذ ستكون كذلك. 1047 00:43:40,200 --> 00:43:44,920 >> إذا أنا الآن أقول س = malloc (sizeof (دولي))، هذا هو وسيلة للقول، 1048 00:43:44,920 --> 00:43:49,000 يا نظام التشغيل، عبر malloc، أعطني ذاكرة كافية لحجم 1049 00:43:49,000 --> 00:43:52,370 لكثافة العمليات، والتي ربما سيكون 32 بت أو أربعة بايت. 1050 00:43:52,370 --> 00:43:53,680 >> فماذا malloc العودة؟ 1051 00:43:53,680 --> 00:43:55,250 Malloc بإرجاع العنوان. 1052 00:43:55,250 --> 00:43:57,020 ذلك ما سوف تحصل المخزنة في العاشر؟ 1053 00:43:57,020 --> 00:44:00,600 عنوان قطعة من الذاكرة، وحدات البايت الأربع، التي malloc 1054 00:44:00,600 --> 00:44:03,360 وجدت فقط بالنسبة لي بسؤال نظام التشغيل. 1055 00:44:03,360 --> 00:44:08,240 >> الآن وفي الوقت نفسه، خط أربعة هنا، و* س = 42. 1056 00:44:08,240 --> 00:44:09,990 مجرد أن تكون واضحة، ماذا يجري هناك؟ 1057 00:44:09,990 --> 00:44:11,530 على الجانب الأيسر، * س. 1058 00:44:11,530 --> 00:44:13,610 هذا مثل * 33 شارع أكسفورد. 1059 00:44:13,610 --> 00:44:15,523 * حتى العاشر يعني ماذا؟ 1060 00:44:15,523 --> 00:44:16,450 >> الجمهور: الذهاب إلى. 1061 00:44:16,450 --> 00:44:17,908 >> J. DAVID مالان: اذهب إلى هذا العنوان. 1062 00:44:17,908 --> 00:44:20,466 أينما ان قسما من الذاكرة، انتقل إلى ذلك. 1063 00:44:20,466 --> 00:44:21,979 ووضع ما هناك، من الواضح؟ 1064 00:44:21,979 --> 00:44:22,520 الجمهور: 42. 1065 00:44:22,520 --> 00:44:23,580 J. DAVID مالان: 42. 1066 00:44:23,580 --> 00:44:25,650 كل الحق، * ذ، نفس الفكرة. 1067 00:44:25,650 --> 00:44:26,860 الانتقال إلى العنوان في ص. 1068 00:44:26,860 --> 00:44:31,740 وضع عدد 13 هناك، ولكن ما هو y في هذه اللحظة؟ 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 الجمهور: لا يوجد الذاكرة لذ. 1071 00:44:34,630 --> 00:44:35,710 J. DAVID مالان: لا لا يوجد الذاكرة لذ. 1072 00:44:35,710 --> 00:44:38,215 فماذا يفعل ذ ربما تحتوي، كما كنا نقوله؟ 1073 00:44:38,215 --> 00:44:38,520 >> الجمهور: القمامة. 1074 00:44:38,520 --> 00:44:39,480 >> J. DAVID مالان: بعض القيمة القمامة. 1075 00:44:39,480 --> 00:44:41,320 الآن، قيمة القمامة لا تزال عددا. 1076 00:44:41,320 --> 00:44:43,160 يمكن أن يكون لا يزال مخطئا لعنوان. 1077 00:44:43,160 --> 00:44:45,160 فهو كما لو أن شخص ما خربش شيء إلى أسفل، 1078 00:44:45,160 --> 00:44:48,002 وأنا يساء فهمها على أنها معنى بعض المباني في الشارع. 1079 00:44:48,002 --> 00:44:50,460 وإذا كنت مجرد محاولة للذهاب الى بناء بعض كنت لا تملك، 1080 00:44:50,460 --> 00:44:53,710 أو بعض جزء من الذاكرة لديك لا كانت معينة، أشياء سيئة قد يحدث. 1081 00:44:53,710 --> 00:44:57,740 الكمبيوتر قد تحطم، أو بعض الدول الاخرى قد يحدث السلوك غير محدد. 1082 00:44:57,740 --> 00:45:01,310 >> ذلك مقدمة، ثم، لبينكي هو هذا. 1083 00:45:01,310 --> 00:45:04,290 ما زلت أتذكر، 20 بعد بضع سنوات ونيف، 1084 00:45:04,290 --> 00:45:07,200 أين كنت عندما كنت أخيرا فهم المؤشرات. 1085 00:45:07,200 --> 00:45:09,520 >> وهو ما يعني، إذا كنت ترك هنا في ثلاث دقائق 1086 00:45:09,520 --> 00:45:12,170 وأعتقد أنني لا فهم المؤشرات، وتحقيق 1087 00:45:12,170 --> 00:45:14,410 لقد تذكرت ل20 سنوات لسبب مجنون 1088 00:45:14,410 --> 00:45:17,140 عندما ولماذا غرقت أخيرا في، ويجلس مع تدريسي 1089 00:45:17,140 --> 00:45:19,501 زميل، نيشات ميهتا في ظهر إليوت قاعة الطعام. 1090 00:45:19,501 --> 00:45:21,250 الآن، لقد تذكرت هذا لأن هذا كان 1091 00:45:21,250 --> 00:45:23,920 أحد المواضيع الأول، في على وجه الخصوص، كافح مع. 1092 00:45:23,920 --> 00:45:26,470 وبعد ذلك، لمعت أخيرا، مثل أجرؤ على القول الكثير من المواضيع 1093 00:45:26,470 --> 00:45:27,460 في نهاية المطاف. 1094 00:45:27,460 --> 00:45:32,590 والآن، لجعل هذا يشعر كل سعادة وجميع أكثر إقناعا، 1095 00:45:32,590 --> 00:45:35,360 دعونا نلقي نظرة النهائي في منطقتنا مشاركة ثلاث دقائق هنا في بينكي، 1096 00:45:35,360 --> 00:45:37,675 من صديقنا، نيك Parlante من جامعة ستانفورد. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO قراءة] 1099 00:45:41,580 --> 00:45:42,750 >> يا، بينكي. 1100 00:45:42,750 --> 00:45:43,500 استيقظ! 1101 00:45:43,500 --> 00:45:45,960 حان الوقت لمؤشر المرح. 1102 00:45:45,960 --> 00:45:47,012 >> وماذا هذا؟ 1103 00:45:47,012 --> 00:45:48,723 تعرف على المؤشرات؟ 1104 00:45:48,723 --> 00:45:50,580 أوه، جودي! 1105 00:45:50,580 --> 00:45:53,563 >> حسنا، للبدء، أعتقد أننا تسير في حاجة إلى مؤشرات الزوجين. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 هذا الرمز يخصص اثنين من المؤشرات، والتي يمكن أن نشير إلى أعداد صحيحة. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 حسنا، أرى مؤشرات اثنين، لكنها لا يبدو أن تشير إلى أي شيء. 1110 00:46:02,140 --> 00:46:02,980 >> المفتى صحيح. 1111 00:46:02,980 --> 00:46:05,100 في البداية، مؤشرات لا تشير إلى أي شيء. 1112 00:46:05,100 --> 00:46:08,030 الأشياء التي نشير مدعوون ل pointees، وإقامتها ل 1113 00:46:08,030 --> 00:46:09,370 خطوة منفصلة. 1114 00:46:09,370 --> 00:46:10,220 >> أوه، الحق، الحق. 1115 00:46:10,220 --> 00:46:10,950 كنت أعرف ذلك. 1116 00:46:10,950 --> 00:46:12,385 وpointees منفصلة. 1117 00:46:12,385 --> 00:46:14,315 إيه، لذلك كيف يمكنك تخصيص pointee؟ 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 حسنا، يخصص هذا الرمز وpointee عدد صحيح جديدة، 1121 00:46:18,970 --> 00:46:20,950 وهذا الجزء العاشر مجموعات للإشارة إلى ذلك. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> يا، التي تبدو أفضل. 1124 00:46:23,230 --> 00:46:25,060 حتى جعله يفعل شيئا. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 وسوف أكون dereference المؤشر X ل تخزين رقم 42 في pointee لها. 1127 00:46:30,455 --> 00:46:32,830 لهذه الخدعة، أنا بحاجة بلدي العصا السحرية من يعتبر إلغاء مرجعية. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Your العصا السحرية من يعتبر إلغاء مرجعية؟ 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- هذا أمر عظيم. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> ، هذا هو ما يبدو رمز مثل. 1134 00:46:41,080 --> 00:46:44,110 أنا تأسيسها لأول مرة في العدد، و[POP] 1135 00:46:44,110 --> 00:46:44,700 >> يا، نظرة. 1136 00:46:44,700 --> 00:46:46,140 هناك تذهب. 1137 00:46:46,140 --> 00:46:50,980 >> -حتى القيام على إلغاء مرجعية س يتبع السهم للوصول pointee لها. 1138 00:46:50,980 --> 00:46:53,160 في هذه الحالة، مخزن 42 في هناك. 1139 00:46:53,160 --> 00:46:57,710 مهلا محاولة استخدامه لتخزين عدد 13 عن طريق مؤشر آخر، ذ. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 سأذهب فقط أكثر من هنا إلى ص، والحصول على رقم 13 الإعداد. 1142 00:47:03,270 --> 00:47:07,930 ثم، واتخاذ العصا من ويعتبر إلغاء مرجعية فقط [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> أوه! 1144 00:47:08,960 --> 00:47:09,500 >> أوه، مهلا! 1145 00:47:09,500 --> 00:47:11,090 ان لم ينجح. 1146 00:47:11,090 --> 00:47:15,630 أقول، بينكي، وأنا لا أعتقد يعتبر إلغاء مرجعية ذ هو فكرة جيدة، لأنك تعرف، 1147 00:47:15,630 --> 00:47:17,850 إنشاء pointee خطوة منفصلة. 1148 00:47:17,850 --> 00:47:20,450 وأنا لا أعتقد أننا فعلنا ذلك من أي وقت مضى. 1149 00:47:20,450 --> 00:47:21,480 >> نقطة الخير. 1150 00:47:21,480 --> 00:47:21,980 -Yeah. 1151 00:47:21,980 --> 00:47:25,680 نحن تخصيص ذ المؤشر، ولكننا أبدا تعيينها للإشارة إلى pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> ملاحظ -جدا. 1154 00:47:28,616 --> 00:47:30,240 يا، كنت تبحث جيدة هناك، بينكي. 1155 00:47:30,240 --> 00:47:33,400 يمكنك إصلاحه بحيث نقاط ذ لنفس pointee والعاشر؟ 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 سوف تستخدم بلدي العصا السحرية من مؤشر الواجب. 1158 00:47:36,780 --> 00:47:38,740 >> * هل هذا سيكون مشكلة مثل قبل؟ 1159 00:47:38,740 --> 00:47:39,240 -No. 1160 00:47:39,240 --> 00:47:40,660 هذا لا تلمس pointees. 1161 00:47:40,660 --> 00:47:44,450 يتغير مؤشر واحد فقط ل تشير إلى الشيء نفسه آخر. 1162 00:47:44,450 --> 00:47:45,450 >> أوه، أرى. 1163 00:47:45,450 --> 00:47:48,200 الآن نقطة Y لنفس المكان س. 1164 00:47:48,200 --> 00:47:48,910 حتى الانتظار. 1165 00:47:48,910 --> 00:47:49,950 الآن، هو ثابت ذ. 1166 00:47:49,950 --> 00:47:51,120 أنه يحتوي على pointee. 1167 00:47:51,120 --> 00:47:54,510 لذلك يمكنك محاولة العصا من يعتبر إلغاء مرجعية مرة أخرى لإرسال أكثر من 13. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh، موافق. 1169 00:47:56,510 --> 00:47:58,160 هنا يذهب. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> يا، أن ننظر في ذلك. 1171 00:47:59,340 --> 00:48:00,750 يعتبر إلغاء مرجعية الآن يعمل على ذ. 1172 00:48:00,750 --> 00:48:04,991 ولأن مؤشرات وتقاسم أن pointee واحد، وكلاهما يرى 13. 1173 00:48:04,991 --> 00:48:05,490 -Yeah. 1174 00:48:05,490 --> 00:48:06,870 تقاسم، أيا كان. 1175 00:48:06,870 --> 00:48:08,820 لذلك نحن ذاهبون للتبديل الأماكن الآن؟ 1176 00:48:08,820 --> 00:48:09,440 >> أوه، تنظر. 1177 00:48:09,440 --> 00:48:10,830 نحن من الوقت. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> ، فقط تذكر القواعد رمية ثلاثية. 1180 00:48:13,530 --> 00:48:16,560 رقم واحد، والهيكل الأساسي هو أن لديك مؤشر، 1181 00:48:16,560 --> 00:48:18,680 ويشير على إلى pointee. 1182 00:48:18,680 --> 00:48:20,640 لكن المؤشر و pointee منفصلة، 1183 00:48:20,640 --> 00:48:22,610 والخطأ الشائع هو وضع مؤشر، 1184 00:48:22,610 --> 00:48:25,000 ولكن أن ننسى أن تعطيه pointee. 1185 00:48:25,000 --> 00:48:28,170 >> عدد اثنين، مؤشر يعتبر إلغاء مرجعية يبدأ في المؤشر 1186 00:48:28,170 --> 00:48:31,050 ويتبع السهم على مدى للوصول pointee لها. 1187 00:48:31,050 --> 00:48:33,400 كما نعلم جميعا، وهذا يعمل فقط إذا كان هناك 1188 00:48:33,400 --> 00:48:36,270 وpointee، أي نوع من يعود للمادة رقم واحد. 1189 00:48:36,270 --> 00:48:39,000 >> رقم ثلاثة، مؤشر احالة يأخذ مؤشر واحد 1190 00:48:39,000 --> 00:48:42,320 وتغيير ذلك للإشارة إلى نفس pointee كما مؤشر آخر. 1191 00:48:42,320 --> 00:48:44,160 حتى بعد الاحالة، المؤشرات اثنين 1192 00:48:44,160 --> 00:48:45,910 سوف نشير إلى نفس pointee. 1193 00:48:45,910 --> 00:48:47,990 في بعض الأحيان، وهذا ما يسمى تقاسم. 1194 00:48:47,990 --> 00:48:49,740 وهذا كل ما في الامر، حقا. 1195 00:48:49,740 --> 00:48:50,277 وداعا الآن. 1196 00:48:50,277 --> 00:48:51,110 [END تشغيل الفيديو] 1197 00:48:51,110 --> 00:48:52,568 J. DAVID مالان: هذا كل شيء لCS50. 1198 00:48:52,568 --> 00:48:55,110 سنرى في الأسبوع القادم. 1199 00:48:55,110 --> 00:48:56,064