1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [الأسبوع 4، تابع] 2 00:00:02,310 --> 00:00:04,240 [ديفيد J. مالان - جامعة هارفارد] 3 00:00:04,240 --> 00:00:07,290 [هذا CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> هذا هو CS50، وهذا هو نهاية الأسبوع 4. 5 00:00:11,290 --> 00:00:14,030 حتى بعض الأخبار الجيدة وبعض الأخبار السيئة. 6 00:00:14,030 --> 00:00:26,240 تعيين أي مشكلة لا محاضرة يوم الاثنين الأسبوع المقبل. [الطلاب الهتاف] 7 00:00:26,240 --> 00:00:28,680 كنت لن تحب هذا حيث هو ذاهب. 8 00:00:28,680 --> 00:00:31,590 ولكننا بدلا من ذلك يكون هذا الأربعاء المقبل، 9 00:00:31,590 --> 00:00:37,740 وهناك أيضا في المحاضرة المنهج الجمعة 1 يوم الجمعة المقبل حتى نتمكن من البقاء على المسار الصحيح. 10 00:00:37,740 --> 00:00:40,580 ولكن كل شيء يتم تصويره كما هو معتاد، لذلك لا داعي للقلق. 11 00:00:40,580 --> 00:00:44,100 >> وفيما يتعلق مسابقة 0 ما سنفعل نحو نهاية الأسبوع 12 00:00:44,100 --> 00:00:47,140 وظيفة على موقع cs50.net في سياق تفسير 13 00:00:47,140 --> 00:00:50,160 من أي نوع من التوقعات يجب أن يكون عندما يتعلق الأمر هذه المسابقة الأولى. 14 00:00:50,160 --> 00:00:55,100 بشكل عام، سيكون من الاختيار من متعدد، الصواب والخطأ، الجواب القصير، القصير مشاكل الترميز. 15 00:00:55,100 --> 00:00:57,360 كنت لن يكون من المتوقع أن تنفذ ما يعادل 16 00:00:57,360 --> 00:01:00,030 مشكلة ان تشهدوا على pset، والتي لديك جهاز كمبيوتر 17 00:01:00,030 --> 00:01:03,240 ومصحح وما شابه ذلك، ولكن سيكون هناك مشاكل صغيرة الترميز. 18 00:01:03,240 --> 00:01:06,900 >> وبالفعل، فإن أفضل دليل للحصول على شعور ما CS50 مسابقات مثل 19 00:01:06,900 --> 00:01:09,180 هو الذهاب إلى cs50.net، انتقل إلى الارتباط مسابقات، 20 00:01:09,180 --> 00:01:11,920 وتستطيع أن ترى في السنوات الماضية العديد من المسابقات قيمتها. 21 00:01:11,920 --> 00:01:16,600 أدرك تماما أن المناهج الدراسية لم تكن دائما كما هي على مدى سنوات. 22 00:01:16,600 --> 00:01:18,510 في بعض الأحيان نضيف، طرح بعض الأحيان، 23 00:01:18,510 --> 00:01:20,670 لذلك إذا كنت ترى بعض الموضوع على واحدة من تلك القديمة المسابقات 24 00:01:20,670 --> 00:01:25,380 أن يكون لديك أي فكرة ما يتحدث عن، انها إما أننا لم تغطية ذلك 25 00:01:25,380 --> 00:01:27,210 أو أننا لا يغطي ذلك. 26 00:01:27,210 --> 00:01:31,110 ولكن في شكل استعراض، هذا الأحد، الاثنين، والثلاثاء 27 00:01:31,110 --> 00:01:34,770 وكذلك دورة على نطاق دورة الاستعراض ليلة الاحد - 28 00:01:34,770 --> 00:01:37,500 الوقت والمكان ليتم الإعلان على الصفحة الرئيسية لمسار - 29 00:01:37,500 --> 00:01:40,120 لديك كل فرصة لاستعراض مع الزملاء في تدريس هذه المادة 30 00:01:40,120 --> 00:01:44,830 المواد لهذا العام، سواء في القسم وكفئة كامل، 31 00:01:44,830 --> 00:01:48,400 وسيتم تصوير تلك كالعادة أيضا. 32 00:01:48,400 --> 00:01:53,380 >> حسنا. ذلك دون مزيد من اللغط، تعليق واحد على النجاح / الفشل وإضافة / إسقاط. 33 00:01:53,380 --> 00:01:57,980 قد رأيتم ملاحظاتي الليلة الماضية، وهذا هو في الحقيقة مجرد بعض الطمأنينة إضافية 34 00:01:57,980 --> 00:02:01,250 أنه إذا كنت من بين أولئك الذين لا سيما أقل راحة أو في مكان ما بين 35 00:02:01,250 --> 00:02:04,870 وكنت تشعر قليلا في فوق رأسك، 36 00:02:04,870 --> 00:02:08,430 ندرك أن الواقع هو طبيعي جدا، وهناك هيكل الدعم الكافي في المكان، 37 00:02:08,430 --> 00:02:13,530 واحدة منها كانت ساعات العمل عازمة على تحسين كل من في بلدي الليلة الماضية البريد الإلكتروني، 38 00:02:13,530 --> 00:02:16,520 وندرك أيضا أن خيار مثل النجاح / الفشل لفئة مثل هذه 39 00:02:16,520 --> 00:02:21,540 حقا هو المقصود كآلية لاتخاذ حافة الخروج من دورة من هذا القبيل، 40 00:02:21,540 --> 00:02:24,200 مرة أخرى بحيث إذا كنت تنفق هذه 10، 15، 20 ساعة 41 00:02:24,200 --> 00:02:28,160 مجرد محاولة للحصول على بعض pset للعمل وأنت تعرف أنك 90-95٪ من الطريق إلى هناك 42 00:02:28,160 --> 00:02:32,100 ولكن لا يمكنك العثور على بعض الشوائب لعنة، في النجاح / الفشل نموذج هذا النوع من حسنا. 43 00:02:32,100 --> 00:02:36,230 >> والفكرة هي أنه مع أن آلية يمكنك الذهاب ثم التركيز على psets الأخرى الخاصة بك 44 00:02:36,230 --> 00:02:39,530 أو النوم أو كل ما هو الذي تريد التركيز على 45 00:02:39,530 --> 00:02:43,390 ندرك بحيث يكون لديك حتى يوم الثلاثاء القادم هذا - من الناحية الفنية يوم الاثنين 5، 46 00:02:43,390 --> 00:02:50,840 ولكن هذا العيد، لذلك هذا الثلاثاء القادم - للتبديل من النجاح / الفشل إلى العكس متدرج أو بالعكس. 47 00:02:50,840 --> 00:02:54,450 وإذا كنت حقا على الهاوية وتفكر في اسقاط تماما، 48 00:02:54,450 --> 00:02:56,440 يرجى التقاط لي بعد المحاضرة أو قطرة لي ملاحظة. 49 00:02:56,440 --> 00:02:59,990 كنا نحب أن ما لا يقل عن دردشة قبل المناقصة داعا. 50 00:02:59,990 --> 00:03:03,470 حسنا. بدأ ذلك نحن اتخاذ قبالة عجلات التدريب في المرة السابقة. 51 00:03:03,470 --> 00:03:06,030 على وجه الخصوص، ركزنا على السلسلة. 52 00:03:06,030 --> 00:03:09,740 سلسلة هو امر أعلن في مكتبة CS50، 53 00:03:09,740 --> 00:03:14,340 على وجه التحديد في هذا الملف الذي دعا cs50.h سوف نبدأ في النظر في هذا الأسبوع والذي يليه. 54 00:03:14,340 --> 00:03:17,250 ولكن سلسلة حقا هو مجرد تبسيط شيء 55 00:03:17,250 --> 00:03:20,980 وهذا أكثر من ذلك بقليل arcanely كما هو موضح * شار. 56 00:03:20,980 --> 00:03:24,090 شار نحن على دراية. انها مجرد حرف واحد. 57 00:03:24,090 --> 00:03:28,010 ولكن تدل * اعتبارا من يوم الاثنين ماذا؟ >> [طالب] مؤشر. 58 00:03:28,010 --> 00:03:31,290 A المؤشر. وما هو المؤشر؟ >> [طالب] عنوان. 59 00:03:31,290 --> 00:03:33,420 >> انها مثل عنوان، أو موقع في الذاكرة. 60 00:03:33,420 --> 00:03:35,910 ما هو عنوان أو موقع أو الذاكرة؟ 61 00:03:35,910 --> 00:03:40,290 مرة أخرى، كل منا لديه كمبيوتر محمول مع أزعج أو 2 غيغابايت من ذاكرة الوصول العشوائي على الأرجح في هذه الأيام، 62 00:03:40,290 --> 00:03:44,160 وهذا يعني لديك مليار أو 2 مليار بايت من الذاكرة قيمتها. 63 00:03:44,160 --> 00:03:46,240 وأنه لا يهم حقا ما يبدو جسديا مثل، 64 00:03:46,240 --> 00:03:51,220 ولكن تأخذ على الإيمان التي يمكنك ترقيم كل بايت الفردية التي لديها الكمبيوتر المحمول الخاص بك - 65 00:03:51,220 --> 00:03:54,580 هذا هو 0 بايت، وهذا هو 1 بايت، وهذا هو البايت 2 مليار - 66 00:03:54,580 --> 00:03:56,100 وهذا هو بالضبط ما يفعله جهاز كمبيوتر. 67 00:03:56,100 --> 00:04:00,030 عند تخصيص مساحة لحرف واحد، على سبيل المثال، 68 00:04:00,030 --> 00:04:02,480 من الواضح لديه أن يعيش في مكان ما في ذاكرة الكمبيوتر الخاص بك، 69 00:04:02,480 --> 00:04:05,860 وربما انها في عدد البايت 12345، 70 00:04:05,860 --> 00:04:08,470 وهذا في مكان ما هنا حتى في ذاكرة الكمبيوتر الخاص بك. 71 00:04:08,470 --> 00:04:12,630 وعنوان تلك الشخصية ثم هو 12345. 72 00:04:12,630 --> 00:04:16,140 >> الآن، في الأسبوع 0 إلى الآن حتى الآن، ونحن لم تهتم حقا 73 00:04:16,140 --> 00:04:19,170 حيث الأشياء في الذاكرة يتم تخزين لأننا عادة استخدام الرموز، 74 00:04:19,170 --> 00:04:22,540 المتغيرات، والمصفوفات في الواقع للحصول على البيانات المتوفرة لدينا في. 75 00:04:22,540 --> 00:04:24,950 ولكن اعتبارا من الاثنين وأكثر كل اليوم، وأنت تسير أن يكون الآن 76 00:04:24,950 --> 00:04:27,710 كل الامكانات أكثر تعبيرا مع برامج الكتابة 77 00:04:27,710 --> 00:04:31,330 حقا لمعالجة الذاكرة للكمبيوتر ولكن هل تراه مناسبا، 78 00:04:31,330 --> 00:04:33,720 للأغراض الخير والشر، 79 00:04:33,720 --> 00:04:39,620 البق كونه نتيجة شائعة جدا في هذه المرحلة من تعلم هذه الاشياء. 80 00:04:39,620 --> 00:04:42,460 ولكن ما الذي يعنيه حقا أن تكون * شار؟ 81 00:04:42,460 --> 00:04:46,140 دعونا نمضي قدما إلى - ونحن سوف نعود إلى Binky كما وعدت اليوم. 82 00:04:46,140 --> 00:04:48,670 دعونا نذهب لمثال بسيط هنا. 83 00:04:48,670 --> 00:04:53,060 اسمحوا لي أن حفظ هذا الملف ك compare.c، واسمحوا لي أن مجرد الحصول على بعض التعليمات البرمجية قالب هنا 84 00:04:53,060 --> 00:05:00,490 وتشمل ذلك stdio.h، اسمحوا لي أن أقدم نفسي كما تشمل cs50.h. أنا تكبير تصل هناك. 85 00:05:00,490 --> 00:05:05,850 اسمحوا لي أن أبدأ كتابة الباحث، الرئيسية الرئيسي (الفراغ)، والآن أريد أن أفعل شيئا من هذا القبيل: 86 00:05:05,850 --> 00:05:13,520 printf ("أعطني سلسلة:") وبعد ذلك سوف تستخدم سلسلة ليالي يحصل GetString 87 00:05:13,520 --> 00:05:16,750 للحصول على سلسلة من المستخدم، ثم سأذهب لتطلب من المستخدم لآخر. 88 00:05:16,750 --> 00:05:21,870 ("أعطني سلسلة أخرى:") وانا ذاهب ليطلب منهم عبر GetString للحصول على ذلك. 89 00:05:21,870 --> 00:05:27,020 سوف أسميها ر ر لأن يأتي بعد ق وق هو اسم لطيفة عن سلسلة ما اذا كان عام جدا. 90 00:05:27,020 --> 00:05:30,030 GetString ذلك، والآن أريد فقط أن تفعل الاختيار التعقل وانا ذاهب الى القول 91 00:05:30,030 --> 00:05:39,770 إذا كان (ق == ر) ثم انا فقط ان نقول للمستخدم printf ("قمت بكتابة نفس الشيء \ N!")؛ 92 00:05:39,770 --> 00:05:45,520 آخر أنا ذاهب لطباعة شيء من هذا القبيل ("أنت شيء مختلف المكتوبة N \"!) 93 00:05:45,520 --> 00:05:48,460 أو أيا كان سوف يكون الحكم. حتى شيء من هذا القبيل. 94 00:05:48,460 --> 00:05:52,200 ثم كالعادة، أنا التي تدل بإرجاع 0 فقط أن شيئا لم يحدث سيئة، 95 00:05:52,200 --> 00:05:54,400 وانا ذاهب الى المضي قدما وترجمة وتشغيل هذا البرنامج. 96 00:05:54,400 --> 00:05:56,540 >> ولكن يوم الاثنين ركضنا هذا البرنامج، 97 00:05:56,540 --> 00:06:00,420 والواقع أن قيل مرحبا مرحبا وليس وداعا ليس وداعا. 98 00:06:00,420 --> 00:06:03,140 كان سلوك رأينا أكثر من ذلك بقليل من هذا القبيل. 99 00:06:03,140 --> 00:06:11,450 اسمحوا لي ان اذهب الى بلدي الدليل المصدر، والتكبير في هنا، ودعونا لا تجعل المقارنة. 100 00:06:11,450 --> 00:06:14,570 جمعت بخير. اسمحوا لي أن تشغيل المقارنة. أعطني سلسلة: HELLO. 101 00:06:14,570 --> 00:06:16,300 أعطني سلسلة أخرى: HELLO. 102 00:06:16,300 --> 00:06:18,000 كتبته شيئا مختلفا! 103 00:06:18,000 --> 00:06:22,650 حسنا، اسمحوا لي أن أحاول شيئا أبسط مثل 50، 50. كتبته شيئا مختلفا! 104 00:06:22,650 --> 00:06:25,740 مرحبا، مرحبا. بكل وضوح، شيئا ما يجري هنا. 105 00:06:25,740 --> 00:06:28,440 ولكن ما هو تفسير لماذا؟ 106 00:06:28,440 --> 00:06:33,850 على ما يبدو، هو السطر 12 مختلة تماما. 107 00:06:34,300 --> 00:06:39,430 ما هي المشكلة الأساسية هنا؟ نعم. >> [طالب] انها مقارنة العناوين. 108 00:06:39,430 --> 00:06:41,850 نعم، بالضبط. انها في الواقع مقارنة عناوين 109 00:06:41,850 --> 00:06:44,580 حيث يتم تخزين أهلا ومرحبا. 110 00:06:44,580 --> 00:06:48,290 انها ليست مقارنة الحروف مرحبا مرة أخرى ومرة ​​أخرى، 111 00:06:48,290 --> 00:06:52,370 لأن ما حدث حقا، كل هذا الوقت كنا باستخدام GetString - 112 00:06:52,370 --> 00:06:56,130 هذا هو مرة أخرى السبورة ذاكرة الكمبيوتر لدينا، 113 00:06:56,130 --> 00:07:00,100 ودعونا نقول أدعو GetString بعد اعلان ق متغير. 114 00:07:00,100 --> 00:07:01,930 ماذا ذاكرتي تبدو وكأنها؟ 115 00:07:01,930 --> 00:07:07,070 دعنا نقول أن ليالي تعسفا يشبه هذا. انها مربع. 116 00:07:07,070 --> 00:07:09,040 والى حد كبير أي وقت قد وجهت قطعة من الذاكرة على الشاشة 117 00:07:09,040 --> 00:07:12,860 اذا كان 32 بت لقد تم رسم المربعات مثل هذا لأن الواقع في الجهاز، 118 00:07:12,860 --> 00:07:17,380 مؤشر، عنوان، هو 32 بت. انها نفس عدد صحيح. 119 00:07:17,380 --> 00:07:19,420 يمكن أن تختلف بناء على نظام الكمبيوتر. 120 00:07:19,420 --> 00:07:24,630 أولئك منكم الذين هم على دراية غامضة مع حقيقة أن جهاز Mac أو PC هو 64 بت، 121 00:07:24,630 --> 00:07:28,120 التي تدل فعلا أن الكمبيوتر يستخدم 64-بت المؤشرات، 122 00:07:28,120 --> 00:07:33,730 64-بت عناوين، وبين الإيجابيات لذلك هو أجهزة الكمبيوتر 123 00:07:33,730 --> 00:07:35,560 يمكن أن يكون أكثر بكثير من RAM الأمس. 124 00:07:35,560 --> 00:07:39,240 قصة قصيرة طويلة، مرة في اليوم عندما أجهزة الكمبيوتر تستخدم فقط 32 بت 125 00:07:39,240 --> 00:07:42,740 لتمثيل عناوين، أكبر عدد من وحدات البايت يمكن أن تمثل 126 00:07:42,740 --> 00:07:46,280 في هذه الحالة هو ما إذا كان لديك 32 بت؟ 127 00:07:46,280 --> 00:07:49,590 SO 4 مليار الحق، لأن 2 إلى ال 32 هو 4 مليار دولار. 128 00:07:49,590 --> 00:07:51,370 وقد تم تكرار هذا الرقم في الدورة. 129 00:07:51,370 --> 00:07:55,240 >> إذا كان الأمر كذلك لديك فقط 32 بت، وهو أكبر عدد يمكنك الاعتماد على ما يقرب من 4 مليارات. 130 00:07:55,240 --> 00:07:58,750 لكن ذلك كان وجود قيود الأساسية من أجهزة الكمبيوتر حتى قبل بضع سنوات 131 00:07:58,750 --> 00:08:01,180 لأنه إذا كان يمكنك الاعتماد فقط تصل إلى 4 مليارات دولار. 132 00:08:01,180 --> 00:08:05,270 لا يهم إذا كنت تشتري 8 غيغابايت من ذاكرة الوصول العشوائي أو حتى 5 غيغابايت من ذاكرة الوصول العشوائي؛ 133 00:08:05,270 --> 00:08:07,780 لا يمكنك الاعتماد التي عالية، لذلك كان عديم الفائدة. 134 00:08:07,780 --> 00:08:11,430 هل يمكن فقط الوصول إلى أول 3 أو 4 غيغابايت من ذاكرة الكمبيوتر الخاص بك. 135 00:08:11,430 --> 00:08:14,410 وهذا أقل من قضية الآن، ويمكنك شراء ماك بوك الايجابيات والوديان 136 00:08:14,410 --> 00:08:17,680 مع 8 غيغابايت من ذاكرة الوصول العشوائي أو أكثر في هذه الأيام. 137 00:08:17,680 --> 00:08:24,100 ولكن إذا كنت تخصيص بكل بساطة في هذا البرنامج مؤشر، ودعا مؤشر ثانية، 138 00:08:24,100 --> 00:08:28,370 قد تبدو هذه على الشاشة لأن الواقع نحن بحاجة إلى العودة قشر هذه الطبقة. 139 00:08:28,370 --> 00:08:33,520 وأظل سلسلة قائلا: ولكن اعتبارا من الاثنين، هو في الحقيقة سلسلة * شار، 140 00:08:33,520 --> 00:08:35,590 عنوان بعض الحرف. 141 00:08:35,590 --> 00:08:39,280 لذلك دعونا نلقي أن عجلة التدريب قبالة على الرغم من أننا سوف تستمر في استخدام GetString في الوقت الراهن. 142 00:08:39,280 --> 00:08:42,600 حتى لقد أعلن I ثانية، وهذا هو جزء من الذاكرة و 32 بت. 143 00:08:42,600 --> 00:08:47,370 ما في هنا في الذاكرة بشكل افتراضي؟ >> [استجابة الطالب غير مسموع] 144 00:08:47,370 --> 00:08:50,040 ما هذا؟ >> [طالب] القمامة. >> القمامة. بالضبط. 145 00:08:50,040 --> 00:08:54,610 إذا كنت مبرمج لا تضع قيمة في متغير، من يدري ما هو عليه؟ 146 00:08:54,610 --> 00:08:57,990 في بعض الأحيان كنت محظوظا وانها 0، والذي هو نوع من لطيفة، نظيفة القيمة الافتراضية، 147 00:08:57,990 --> 00:09:00,310 ولكن كما رأينا الاثنين، في بعض الأحيان انها محض هراء، 148 00:09:00,310 --> 00:09:04,130 بعض عدد كبير حقا إيجابية أو سلبية التي جاءت من أين؟ 149 00:09:05,350 --> 00:09:07,010 نعم. >> [طالب] وظيفة من قبل. نعم >>. 150 00:09:07,010 --> 00:09:10,170 >> في كثير من الأحيان وظيفة التي حصلت من قبل بسبب دعا تذكر، 151 00:09:10,170 --> 00:09:13,920 كما تسمونه وظائف في الذاكرة، وأنها تأخذ مساحة أكثر وأكثر من الأسفل إلى الأعلى، 152 00:09:13,920 --> 00:09:17,040 وبمجرد أن ترجع الدالة، ويحصل على إعادة استخدام تلك الذاكرة 153 00:09:17,040 --> 00:09:20,890 بواسطة الرجل القادم أن يحصل على استدعاء، الذي يستخدم شريحة ك نفسه من الذاكرة. 154 00:09:20,890 --> 00:09:23,450 وإذا كنت قد القمامة اليسار هناك، والقيم السابقة، 155 00:09:23,450 --> 00:09:28,190 ونحن قد يخطئ ليالي وجود بعض القيمة عند حقا أننا لم تضع أي شيء هناك. 156 00:09:28,190 --> 00:09:30,960 لذلك لدينا RAM عند هذه النقطة يبدو مثل هذا. 157 00:09:30,960 --> 00:09:36,030 الآن على الجانب الأيمن من السطر 7 فنحن نطالب GetString، 158 00:09:36,030 --> 00:09:40,150 الذي كنا به الآن لأسابيع، ولكن ما GetString به حقا؟ 159 00:09:40,150 --> 00:09:43,350 GetString كتبها الموظفين CS50 قليلا ذكي 160 00:09:43,350 --> 00:09:46,500 في هذا بمجرد أن يبدأ المستخدم بكتابة مفاتيح ويضرب أدخل، 161 00:09:46,500 --> 00:09:50,010 أرقام GetString من عدد ضربات المفاتيح فعلت ضرب المستخدم، 162 00:09:50,010 --> 00:09:53,360 عدد الأحرف أحتاج إلى تخصيص RAM ل. 163 00:09:53,360 --> 00:09:55,660 وحيث أن يأتي من RAM، من يدري؟ 164 00:09:55,660 --> 00:09:58,930 انها في مكان ما في جهاز الكمبيوتر الخاص بك 2 غيغا بايت أو whatnot من الذاكرة. 165 00:09:58,930 --> 00:10:05,200 ولكن دعونا نفترض أن الكمبيوتر وجد مساحة لكلمة الترحيب هنا. 166 00:10:05,200 --> 00:10:08,710 كانت كلمة كتبت H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 وإذا وضعنا هذا على أنه سلسلة من الأحرف، قد وضعنا على هذا النحو. 168 00:10:13,510 --> 00:10:17,860 ولكن يجب أن أفعل شيء 1 إضافية. ما ينتمي في نهاية السلسلة في أي C؟ 169 00:10:17,860 --> 00:10:20,710 الحرف فارغة، التي نكتب ك \ 0. 170 00:10:20,710 --> 00:10:23,980 انها من الناحية الفنية 0 عدد، ولكن مائل يجعل جميع ضوحا 171 00:10:23,980 --> 00:10:28,150 أن هذا هو حرفيا الرقم 0، عدد صحيح من 0؛ 172 00:10:28,150 --> 00:10:32,440 انها ليست، ل 0 اقتباس سبيل المثال، نهاية الاقتباس، التي قد اكتب على لوحة المفاتيح. 173 00:10:32,440 --> 00:10:33,940 لذلك هذا هو الترحيب. 174 00:10:33,940 --> 00:10:36,350 >> وماذا نقول يوم الاثنين ان وظيفة مثل GetString 175 00:10:36,350 --> 00:10:39,580 تعود في الواقع كل هذه الأسابيع؟ 176 00:10:39,580 --> 00:10:43,960 انها ليست عودة سلسلة في حد ذاته لأن ذلك لا حقا لها معنى 177 00:10:43,960 --> 00:10:47,710 لأن سلاسل لا وجود لها. انهم نوع من التلفيق في مكتبة CS50. 178 00:10:47,710 --> 00:10:51,300 ما هو في الحقيقة سلسلة، وأكثر من الناحية الفنية؟ >> [طالب] انها الحرف الأول. 179 00:10:51,300 --> 00:10:55,950 بالضبط. انها بكل بساطة عنوان الحرف الأول أن المستخدم بكتابتها فيها 180 00:10:55,950 --> 00:11:02,810 حتى إذا كلامي مرحبا ينتهي الامر في 123 عدد البايت، ثم في عدد البايت 124، 181 00:11:02,810 --> 00:11:08,320 125، 126، وهكذا دواليك، إذا كنت مجرد رقم من 0 بايت بلدي على ما يصل، 182 00:11:08,320 --> 00:11:12,650 ما حقا GetString يعود هو حرفيا 123 عدد. 183 00:11:12,650 --> 00:11:19,270 وذلك ما يحصل في وضع s هو 123 عدد، وليس H الرسالة، وليس كلمة HELLO، 184 00:11:19,270 --> 00:11:23,130 ببساطة والعنوان الذي يمكن أن أجد الحرف الأول من الترحيب. 185 00:11:23,130 --> 00:11:26,500 ولكن هذا لا يبدو وكأنه بما فيه الكفاية. طلبت منكم عن سلسلة، وليس حرف. 186 00:11:26,500 --> 00:11:32,970 كيف لنا إذن أن نعرف أو الكمبيوتر التي إلو نوع من يأتي جنبا إلى جنب مع H؟ 187 00:11:35,760 --> 00:11:37,460 ما هو نوع من الاتفاق لدينا؟ نعم. 188 00:11:37,460 --> 00:11:40,100 [طالب] يقول إنها تحافظ نفسها لايجاد حرف بعض أكثر. بالضبط >>. 189 00:11:40,100 --> 00:11:44,570 >> هناك هذه الاتفاقية بين الإنسان والحاسوب حيث عندما كنت تتعامل مع السلاسل، 190 00:11:44,570 --> 00:11:49,410 والمعروف الآن باسم نجوم شار، لديك ببساطة لمعرفة 191 00:11:49,410 --> 00:11:54,350 حيث نهاية كل سلسلة في الحياة هو حقا من بالتكرار فقط أكثر من ذلك مع لحلقة، 192 00:11:54,350 --> 00:11:57,820 حلقة حين، أيا كان، حتى عندما تجد نهاية السلسلة 193 00:11:57,820 --> 00:12:02,160 الآن يمكنك نستنتج من ذلك، أوه، كانت كلمة مرحبا كله. 194 00:12:02,160 --> 00:12:04,820 قد أولئك منكم مع خبرة في البرمجة بلغة جافا قبل معرفة 195 00:12:04,820 --> 00:12:09,880 يمكنك الاتصال فقط. طول وبلغات أخرى يمكنك الاتصال طول أو ما شابه ذلك. 196 00:12:09,880 --> 00:12:14,060 وهذا لأنه في الكثير من اللغات، وخاصة الأشياء دعا وجوه المنحى اللغات، 197 00:12:14,060 --> 00:12:18,580 طول ما هو نوع من تغليف من داخل قطعة من البيانات نفسها، 198 00:12:18,580 --> 00:12:24,000 مثل الكثير ونحن معرفات وأسماء ومغلفة داخل المنازل لطالب يوم الاثنين. 199 00:12:24,000 --> 00:12:28,700 ولكن C هو مستوى أقل من ذلك بكثير. هناك أية كائنات أو فئات، إذا كنت قد سمعت هذه المصطلحات من قبل. 200 00:12:28,700 --> 00:12:31,490 كل ما عليك هو حقا عناوين الذاكرة. 201 00:12:31,490 --> 00:12:35,540 لذلك هذا هو نوع من الطريقة القديمة الطراز من اهتمام تمثل هياكل البيانات. 202 00:12:35,540 --> 00:12:38,760 لديك قيمة بدء مثل عنوان الحرف الأول 203 00:12:38,760 --> 00:12:42,340 وبعد ذلك فقط بعض الاتفاقية التعسفية التي يتفق الجميع على أن يتبع. 204 00:12:42,340 --> 00:12:46,420 لذلك لم كيفية تنفيذها طول السلسلة، نقترح؟ 205 00:12:46,420 --> 00:12:51,360 التوابع strlen، التوابع strlen، والتي البعض منكم قد استخدمت عدة مرات الآن. انها بسيطة جدا، أليس كذلك؟ 206 00:12:51,360 --> 00:12:53,060 انها مثل خطوط 2 من التعليمات البرمجية. 207 00:12:53,060 --> 00:12:56,140 انها الى حد كبير لحلقة من نوع ما، ربما مع متغير محلي إضافية. 208 00:12:56,140 --> 00:13:00,540 ولكن التوابع strlen فقط أن تأخذ مؤشر ومن ثم البدء في البحث عن \ 0. 209 00:13:00,540 --> 00:13:05,190 >> وبمجرد أن يرى ذلك، فإنه يمكن إرجاع العدد الإجمالي من الخطوات التي اتخذتها في انه هذه السلسلة. 210 00:13:05,190 --> 00:13:07,150 لذلك يمكننا أن نستنتج من هذا ما يدور المقبل. 211 00:13:07,150 --> 00:13:11,850 لنفترض ثم أعلن ر كما فعلت في السطر 10. 212 00:13:11,850 --> 00:13:14,280 هذا هو بعض القيمة القمامة. الذي يعرف في البداية؟ 213 00:13:14,280 --> 00:13:18,490 ولكن على الجانب الأيمن من خط من 10 ادعو GetString مرة أخرى. 214 00:13:18,490 --> 00:13:20,050 الذي يعرف أين ينتهي هذا؟ 215 00:13:20,050 --> 00:13:23,830 دعنا نقول بشكل تعسفي أن نظام التشغيل وجدت مجالا لذلك الطريق أكثر من هنا. 216 00:13:23,830 --> 00:13:28,610 يحدث لي للكتابة من قبيل الصدفة H-E-L-L-O مرة أخرى، 217 00:13:28,610 --> 00:13:31,260 وحتى نتمكن من رسم نفس النوع من الصورة. 218 00:13:31,260 --> 00:13:34,290 ولكن الحقيقة أن لدي رسم هذه الصورة هو متعمد 219 00:13:34,290 --> 00:13:37,720 لأن هذا هو. مرحبا مختلفة من هذا واحد 220 00:13:37,720 --> 00:13:43,920 حتى هنا هذا قد يكون موقع 456، وهذا هو 457، وهكذا دواليك. 221 00:13:43,920 --> 00:13:47,170 وذلك ما يحصل على وضع علامة استفهام حيث كان مرة واحدة؟ 222 00:13:47,170 --> 00:13:50,190 في هذه الحالة 456. 223 00:13:50,190 --> 00:13:53,540 نحن التقاط هذه الأرقام بشكل تعسفي بسبب حقا بعد اليوم 224 00:13:53,540 --> 00:13:57,110 نحن لن نهتم كثيرا عن ما هو عنوان من أي شيء. 225 00:13:57,110 --> 00:14:02,690 كل ما يهمني هو أن نتمكن من معرفة عنوان قطعة من بعض البيانات مثل مرحبا. 226 00:14:02,690 --> 00:14:07,100 >> حقا فما يفعل معظم الناس في علوم الكمبيوتر عندما نتحدث عن عناوين الذاكرة 227 00:14:07,100 --> 00:14:10,210 ويتحدث عن مؤشرات على وجه التحديد، 228 00:14:10,210 --> 00:14:14,220 بدلا من عناء معرفة 123 - من يهتم فيها هذه الاشياء هو في الواقع، 229 00:14:14,220 --> 00:14:17,440 نحن نعرف فقط أنه في بعض عنوان رقمي - 230 00:14:17,440 --> 00:14:22,180 نحن تبسيط العالم، وأقول أن هذا يشير إلى أن الطابع 231 00:14:22,180 --> 00:14:25,080 ويتم الإشارة إلى T هذا الحرف. 232 00:14:25,080 --> 00:14:27,430 وحقيقة أنه هو المقصود سهم جدا 233 00:14:27,430 --> 00:14:31,610 لأن حرفيا S هو الآن مشيرا في الوقت ذاته H و T يشير في H أخرى 234 00:14:31,610 --> 00:14:34,720 لأنه في نهاية اليوم، لا يهم ما هو عنوان، 235 00:14:34,720 --> 00:14:40,240 ولكن لا يهم ان لدينا القدرة على التعبير عن هذا العنوان مع بعض قطعة من التعليمات البرمجية. 236 00:14:40,240 --> 00:14:42,730 نحن لم التلاعب حقا هذه العناوين فقط حتى الآن 237 00:14:42,730 --> 00:14:47,770 وهكذا لن نرى أين نحن يمكن أن تقحم ونوع من فعل الأشياء مع مؤشرات، 238 00:14:47,770 --> 00:14:52,030 لكن في الوقت الراهن في السطر 12 حرفيا ما هي القيم نحن مقارنة 239 00:14:52,030 --> 00:14:55,500 وفقا لهذه القصة في السطر 12؟ 240 00:14:56,570 --> 00:15:01,290 نقوله هو 123 إلى 456 قدم المساواة على قدم المساواة؟ وهذا بالتأكيد ليس هو الحال. 241 00:15:01,290 --> 00:15:05,320 وحتى من الناحية المفاهيمية، وهذا مؤشر هي بالتأكيد ليست نفس هذا 242 00:15:05,320 --> 00:15:09,500 لأن دعاكم GetString مرتين، وGetString لا تحاول أن تكون ذكية فائقة، 243 00:15:09,500 --> 00:15:12,470 إلا أنها لا تحاول أن ندرك، أوه، مرحبا كتبته قبل 5 دقائق؛ 244 00:15:12,470 --> 00:15:15,090 اسمحوا لي أن أقدم لكم المؤشر نفس أعطيتك من قبل، 245 00:15:15,090 --> 00:15:18,450 فإنه يخصص قسما جديدا فقط من الذاكرة في كل مرة كنت اسميها. 246 00:15:18,450 --> 00:15:20,350 >> فكيف يمكن لنا إصلاح هذه المشكلة؟ 247 00:15:20,350 --> 00:15:24,270 إذا أريد مستوى أعلى لمقارنة السلاسل أهلا ومرحبا - 248 00:15:24,270 --> 00:15:28,680 لا يهمني حول المؤشرات - كيف يمكنني التوجه نحو الإجابة على السؤال، 249 00:15:28,680 --> 00:15:31,980 لم المستخدم اكتب نفس الشيء؟ ما هو ضروري هنا؟ نعم. 250 00:15:31,980 --> 00:15:35,200 [طالب] استخدام وظيفة. >> يمكنني استخدام وظيفة من خارج منطقة الجزاء. 251 00:15:35,200 --> 00:15:38,170 يمكنني استخدام دالة يسمى strcmp، S-T-R-C-M-P، 252 00:15:38,170 --> 00:15:41,190 مجرد نسخة مختصرة من سلسلة قائلا مقارنة. 253 00:15:41,190 --> 00:15:45,070 وإذا دخلنا في، على سبيل المثال، قارن 2، التي هي من بين الصدقات اليوم، 254 00:15:45,070 --> 00:15:46,690 أفعل بالضبط. 255 00:15:46,690 --> 00:15:51,750 ظللت كل شيء آخر من نفس السطر 1 إلى 26 نزولا أو نحو ذلك، 256 00:15:51,750 --> 00:15:54,360 وتلاحظ الآن تغير هذا الجزء قليلا. 257 00:15:54,360 --> 00:15:57,690 دعونا نتجاهل خط 28 لحظة والتركيز فقط على هذا واحد. 258 00:15:57,690 --> 00:16:00,410 ماذا نقول الاثنين ان المقارنة لا شارع؟ 259 00:16:00,410 --> 00:16:05,200 يتعامل بها عملية اتخاذ 2 المؤشرات وقاف وراء في هذه الحالة، 260 00:16:05,200 --> 00:16:08,480 نوع من وضع الاصبع تقريبا على تلك الرسائل 2، 261 00:16:08,480 --> 00:16:11,530 وما يجب القيام به هو شيء من هذا القبيل في حين حلقة أو حلقة For، 262 00:16:11,530 --> 00:16:16,050 وتقول انها نفس هذه؟ إذا كان الأمر كذلك، فإنه يتحرك الأصابع أو مؤشرات إلى الأمام. 263 00:16:16,050 --> 00:16:17,970 هل هذه هي نفس، وهذه نفس، وهذه، وهو نفس 264 00:16:17,970 --> 00:16:22,710 هذه نفس، نفس هذه؟ وأوه، أنا في نهاية السلسلة في كل من العلم والتكنولوجيا. 265 00:16:22,710 --> 00:16:26,780 أنا لم يتم العثور على أي تناقضات. نعم، هذه السلاسل هي نفسها. 266 00:16:26,780 --> 00:16:31,940 وماذا المقارنة شارع العودة إذا كان 2 سلاسل هي نفسها، على ما يبدو؟ صفر. 267 00:16:31,940 --> 00:16:35,900 0 حتى هو جيد في هذه الحالة لأنه إذا فإنها ترجع -1 أو +1، 268 00:16:35,900 --> 00:16:40,560 وهذا يعني أن ليالي يحدث لمجرد أن تأتي قبل أو بعد أبجديا ر ر. 269 00:16:40,560 --> 00:16:43,760 لماذا وأن من المفيد الحصول على وظيفة تخبرك التي تأتي قبل سلسلة 270 00:16:43,760 --> 00:16:46,720 أو بعد في القاموس؟ 271 00:16:46,720 --> 00:16:48,740 [طالب] البحث. البحث >> والفرز. 272 00:16:48,740 --> 00:16:51,730 >> لذلك يمكنك أن تفعل أشياء مثل البحث الثنائي أو فرز أو دمج النوع فقاعة 273 00:16:51,730 --> 00:16:53,230 حيث لديك لمقارنة الأشياء. 274 00:16:53,230 --> 00:16:56,420 حتى الآن قمنا نوع من قطع بعض زوايا وتحدث فقط عن الفرز 275 00:16:56,420 --> 00:16:59,430 في سياق الأرقام لأنها لطيفة وسهلة للحديث عن، 276 00:16:59,430 --> 00:17:02,430 ولكن بالتأكيد يمكنك مقارنة السلاسل والتفاح والموز، 277 00:17:02,430 --> 00:17:05,349 لأنه إذا كان من المعروف أن التفاح يأتي قبل الموز، وبالمثل، 278 00:17:05,349 --> 00:17:09,319 يمكنك نقل سلاسل في الذاكرة حول مثل روب فعل مع نوع الدمج في الفيديو 279 00:17:09,319 --> 00:17:15,880 وفعلنا هنا على خشبة المسرح مع اختيار نوع، نوع الإدراج، وفرز الفقاعة. 280 00:17:15,880 --> 00:17:18,710 لذلك يمكن في أي مكان آخر ونحن نغتنم هذه؟ دعونا نحاول ذلك. 281 00:17:18,710 --> 00:17:23,980 نوع دعونا ننسى أن من الدرس للحظة وحاول الآن ونسخ 1.C للقيام بما يلي. 282 00:17:23,980 --> 00:17:26,800 في البند 21 أنا أقول شيئا الطباعة، 283 00:17:26,800 --> 00:17:28,520 ثم انني اتلقى سلسلة من المستخدم، 284 00:17:28,520 --> 00:17:30,690 ثم أنا التحقق من هذا. 285 00:17:30,690 --> 00:17:33,620 ونحن لم نصل فعلا الى هذه العادة حتى الآن، ولكن دعونا نفعل هذا الآن. 286 00:17:33,620 --> 00:17:40,990 دعونا فعلا قشر طبقة هذا مرة أخرى. هذا هو حقا * شار. هذا الرجل هو حقا * شار. 287 00:17:40,990 --> 00:17:45,690 فماذا يعني ان تكون التحقق إذا ق == NULL؟ 288 00:17:45,690 --> 00:17:48,380 تبين أنه عند استدعاء دالة مثل GetString 289 00:17:48,380 --> 00:17:51,540 أو أكثر عموما اسألوا جهاز كمبيوتر أن أقدم لكم بعض الذاكرة، 290 00:17:51,540 --> 00:17:53,030 يمكن شيء على غير ما يرام. 291 00:17:53,030 --> 00:17:56,630 هل يمكن أن يكون مجنون ونطلب من الكمبيوتر لتيرابايت من الذاكرة 292 00:17:56,630 --> 00:18:01,780 بطلب تريليونات بايت من الذاكرة التي لا وجود لها فقط في الكمبيوتر، 293 00:18:01,780 --> 00:18:05,130 ولكن وظائف GetString وغيرها بحاجة إلى طريقة من الصراخ عليك 294 00:18:05,130 --> 00:18:06,820 إذا كنت قد طلبت لأكثر من اللازم. 295 00:18:06,820 --> 00:18:10,450 والطريقة GetString هل هذا هو إذا كان لديك طلب لمزيد من الذاكرة 296 00:18:10,450 --> 00:18:14,250 مما هو متوفر في الكمبيوتر، حتى لو كان هذا هو سوبر سوبر احتمال ضعيف 297 00:18:14,250 --> 00:18:17,730 لأن لا أحد منا سوف اكتب الأحرف تريليون ثم اضغط Enter، 298 00:18:17,730 --> 00:18:21,980 ولكن احتمال ضعيف على الرغم من أنه قد يكون، ما زلت أريد للتحقق من ذلك فقط في حالة، 299 00:18:21,980 --> 00:18:26,120 والقيمة الخاصة التي GetString، الجواب، وغيرها من المهام العوائد 300 00:18:26,120 --> 00:18:30,630 إذا كان هناك شيء قد حصل من خطأ غير NULL في كل مباراة دولية. 301 00:18:30,630 --> 00:18:36,520 >> وما هو NULL؟ NULL فقط يحدث ذلك لتمثيل مؤشر. انها الذاكرة 0 العنوان. 302 00:18:36,520 --> 00:18:40,800 قرر العالم أن تعسفا، إذا كان هذا هو ذاكرة الكمبيوتر الخاص بي - أنت تعرف لماذا؟ - 303 00:18:40,800 --> 00:18:46,260 ونحن في طريقنا لسرقة فقط 1 بايت من الذاكرة كل جهاز كمبيوتر، وهذا هو الموقع 0. 304 00:18:46,260 --> 00:18:49,560 ونحن في طريقنا لإعطائها لقب NULL، ونحن ذاهبون الى وعد 305 00:18:49,560 --> 00:18:52,660 التي من شأنها أن لم نكن فعلا وضع بيانات حقيقية هناك 306 00:18:52,660 --> 00:18:56,770 لأننا فقط بحاجة تعسفا قيمة خاصة، 0، الملقب NULL، 307 00:18:56,770 --> 00:19:00,230 حتى نتمكن من الصراخ المستخدمين إذا سارت الامور بشكل خاطئ. 308 00:19:00,230 --> 00:19:03,590 وإلا قد لا تعرف لا يعني 0 وضع شيء هنا 309 00:19:03,590 --> 00:19:05,490 أو أنها لا تعني شيئا الخطأ الذي حدث؟ 310 00:19:05,490 --> 00:19:09,190 علينا أن نتفق جميعا على أن أعيد لا يعني شيئا NULL، 311 00:19:09,190 --> 00:19:11,700 تم إرجاع أي عنوان الفعلي. 312 00:19:11,700 --> 00:19:15,210 الآن، أنا هنا فقط اعتماد اتفاقية بلدي أعود الإنسان لل1 من الرئيسي 313 00:19:15,210 --> 00:19:17,040 إذا حدث خطأ ما. 314 00:19:17,040 --> 00:19:20,650 ذلك لأن الاتفاقية الرئيسية للعودة هو العودة 0 إذا جيدة، 315 00:19:20,650 --> 00:19:22,990 1 أو بعض قيمة أخرى إذا سيئة. 316 00:19:22,990 --> 00:19:28,200 ولكن أي وظيفة GetString والتي تتعامل في الذاكرة تعود NULL اذا سارت الامور بشكل سيء. 317 00:19:28,200 --> 00:19:33,480 >> حسنا. للأسف كان الأمر كذلك، خط 27، سوبر بسيطة على الرغم من أنه هو، فشل تماما لنسخ السلسلة. 318 00:19:33,480 --> 00:19:35,740 لماذا؟ يمكننا أن نرى هذا على النحو التالي. 319 00:19:35,740 --> 00:19:40,120 أنا مدعيا في خط 27 إلى أن تقديم نسخة من ليالي واصفا اياه ر. 320 00:19:40,120 --> 00:19:45,790 لذلك أنا لا يطلب المستخدم لمدة 2 سلاسل هذا الوقت؛ أنا فقط أقول القيمة في ق 321 00:19:45,790 --> 00:19:47,870 ينبغي أن توضع في ر أيضا. 322 00:19:47,870 --> 00:19:52,890 حتى الآن فقط لشرح كيفية تقسيم هذا هو، في خط 29 فصاعدا ماذا أفعل؟ 323 00:19:52,890 --> 00:19:56,980 أولا أنا التحقق إذا كان طول ر أكبر من 0. 324 00:19:56,980 --> 00:19:59,330 هناك بعض سلسلة هناك. للمستخدم كتابة شيء فيه. 325 00:19:59,330 --> 00:20:03,410 ما هو السطر 32 القيام، على ما يبدو؟ 326 00:20:03,410 --> 00:20:08,910 [رد الطالب غير مسموع] الحق >>. يمكنك استنتاج ذلك النوع من من ما قلته تقوم به. 327 00:20:08,910 --> 00:20:13,200 لكن من الناحية الفنية، ما هو هذا العمل؟ ر [0] يمثل ما؟ 328 00:20:13,200 --> 00:20:15,140 [طالب] الحرف 0. >> [مالان] الحرف 0. 329 00:20:15,140 --> 00:20:19,620 أو، أكثر إنسانية، مثل الحرف الأول في ر، أيا كان ذلك، ربما H في هذه الحالة. 330 00:20:19,620 --> 00:20:24,990 وtoupper تفعل ما تقول. انها تستفيد من الطابع 0 ر ويتغير ذلك. 331 00:20:24,990 --> 00:20:28,430 لذلك هذا يعني أن الطابع 0 ر، تجعل من أحرف كبيرة، 332 00:20:28,430 --> 00:20:30,320 ويضعها من جديد في ذلك الموقع نفسه. 333 00:20:30,320 --> 00:20:35,540 حتى لو كنت اكتب في صغيرة مرحبا، وهذا ينبغي تغيير ح الصغيرة إلى العاصمة H. 334 00:20:35,540 --> 00:20:41,400 ولكن المشكلة هي أنه في خطوط 35 و 36 ما أنا على وشك القيام به هو طباعة بالنسبة لنا العلم والتكنولوجيا. 335 00:20:41,400 --> 00:20:43,120 وما هو حدس بك؟ 336 00:20:43,120 --> 00:20:47,250 ما أنا ذاهب في الواقع لمعرفة ما إذا كنت كتبته في مرحبا في جميع صغيرة؟ 337 00:20:47,250 --> 00:20:52,280 ما يحدث في الحصول على المطبوعة؟ >> [استجابة الطالب غير مسموع] >> ما هذا؟ 338 00:20:52,280 --> 00:20:58,360 [طالب] الكبير H والباقي صغيرة. و>> H كبيرة والباقي صغير الذي، ق أو ر؟ 339 00:20:58,360 --> 00:21:03,170 [طالب] كلا. كلا >>. بالضبط. لذلك دعونا نرى ما يجري هنا. 340 00:21:03,170 --> 00:21:08,380 >> اسمحوا لي أن تمضي قدما وتجميع هذه. هذا هو copy1، لذلك copy1. حسنا. 341 00:21:08,380 --> 00:21:14,840 تكبير. اسمحوا لي المضي قدما وتشغيل copy1، أدخل، قل شيئا: مرحبا في صغيرة. 342 00:21:14,840 --> 00:21:19,570 رسملة انها النسخة، لكنها على ما يبدو رسملة الأصلي أيضا، 343 00:21:19,570 --> 00:21:22,070 لأن ما يحدث الآن في هذه القصة؟ 344 00:21:22,070 --> 00:21:27,030 في خط 27 أنا لا يبدو في الواقع أن نسخ السلسلة، 345 00:21:27,030 --> 00:21:30,450 ولكن على الرغم من قد يكون حدسي يرجو منك أن يكون الأمر كذلك، 346 00:21:30,450 --> 00:21:33,680 إذا كنت تفكر في هذه الصورة، حقيقة ما الذي قمت به؟ 347 00:21:33,680 --> 00:21:35,410 نصف من الصورة هو نفسه. 348 00:21:35,410 --> 00:21:39,390 لذلك دعونا لفة العودة في الوقت المناسب بحيث ر غير موجود بعد في القصة. 349 00:21:39,390 --> 00:21:43,160 يمكن S موجودة في القصة، ولكن دعونا هذه المرة مرحبا صغيرة. 350 00:21:43,160 --> 00:21:46,710 لذلك اسمحوا لي إصلاح ما كتبته أنا في الواقع فيها 351 00:21:46,710 --> 00:21:51,280 في هذه الحالة لدينا هنا H-E-L-L-O. 352 00:21:51,280 --> 00:21:58,050 سوف نستخلص أنها تتابع من الأحرف، وضعت خطوط فاصل بلدي بلدي هنا و 0 \. 353 00:21:58,050 --> 00:22:05,980 لذلك هذا هو ما نحن فيه في أقرب وقت خط من 1 إلى العش-24، يعطي أو يأخذ، نفذت و. 354 00:22:05,980 --> 00:22:07,800 هذه هي الصورة من ذاكرتي. 355 00:22:07,800 --> 00:22:10,800 عندما أحصل على خط 27، ماذا يحدث؟ 356 00:22:10,800 --> 00:22:14,730 تماما مثل من قبل، يمكنني الحصول على المؤشر، الذي سوف يوجه هذا النحو مربع. 357 00:22:14,730 --> 00:22:19,740 انه دعا ر. وما هو قيمته بشكل افتراضي؟ من يدري؟ بعض القمامة القيمة. 358 00:22:19,740 --> 00:22:22,060 >> لذلك أنا سوف مجردة بعيدا عن علامة استفهام. 359 00:22:22,060 --> 00:22:27,670 وبمجرد أن الجانب الأيمن من خط 27 ينفذ، ما أنا وضع داخل ر؟ 360 00:22:27,670 --> 00:22:30,770 نفس الشيء هذا في ليالي. 361 00:22:30,770 --> 00:22:34,120 إذا كان الأمر كذلك فإننا لحظة إزالة هذا التجريد من السهم ونقول، 362 00:22:34,120 --> 00:22:40,330 أوه، هذا هو عنوان الذاكرة تحميل 123، عندما تقول ر ق يحصل، منقوطة، 363 00:22:40,330 --> 00:22:42,700 أنك تضع حرفيا 123 هنا. 364 00:22:42,700 --> 00:22:45,200 إذا نحن الآن نوع من تبسيط عالمنا مرة أخرى مع الصور، 365 00:22:45,200 --> 00:22:48,750 ما قمت به حقا هو مجرد أضاف السهم إلى عالمك 366 00:22:48,750 --> 00:22:52,910 هذا ما يشير إلى سلسلة من ر بالضبط نفس. 367 00:22:52,910 --> 00:22:59,730 حتى عندما تكون في خط 31 و 32 أذهب حول تغيير الواقع ر [0]، 368 00:22:59,730 --> 00:23:05,580 ما هو ر [0] مرادفة مع ما يبدو الآن؟ ق [0] 369 00:23:05,580 --> 00:23:07,030 ذلك أن كل ما يحدث. 370 00:23:07,030 --> 00:23:09,900 وعلى الرغم من هذا النوع من يشعر مستوى منخفض قليلا وغامضة 371 00:23:09,900 --> 00:23:12,760 وهذا النوع من يشعر مثل هذا حدسي ربما كان يجب أن يعمل فقط - 372 00:23:12,760 --> 00:23:15,410 لقد قدمت نسخ من الاشياء من قبل وانها عملت فقط - 373 00:23:15,410 --> 00:23:18,590 إذا كنت تعتقد فعلا عن ما هو في الحقيقة سلسلة، انها تشار *. 374 00:23:18,590 --> 00:23:21,700 حسنا، ما هي؟ انها عنوان لبعض الحرف. 375 00:23:21,700 --> 00:23:24,930 ثم ربما أكثر منطقية أنه عند محاولة القيام بشيء 376 00:23:24,930 --> 00:23:29,220 السوبر التي تبدو بسيطة مثل هذا، كل ما نقوم به هو نسخ عنوان الذاكرة. 377 00:23:29,220 --> 00:23:32,530 أنت لا تفعل اي شيء في الواقع مع السلسلة نفسها. 378 00:23:32,530 --> 00:23:37,500 وحتى اذا كان لديك أي فكرة كيف يمكنك حل هذه المشكلة في التعليمات البرمجية، 379 00:23:37,500 --> 00:23:45,080 مستوى عال، من الناحية النظرية، ماذا علينا أن نفعل من أجل جعل تا نسخة طبق الأصل من ليالي، على ما يبدو؟ 380 00:23:46,670 --> 00:23:48,820 نعم. >> [طالب] إعطائها الموقع الجديد؟ بالضبط >>. 381 00:23:48,820 --> 00:23:50,800 >> نحن بحاجة إلى إعطاء ر موقع العلامة التجارية الجديدة. 382 00:23:50,800 --> 00:23:55,230 نحن بحاجة إلى إنشاء نحو ما العالم الذي نحصل على قطعة جديدة من الذاكرة، 383 00:23:55,230 --> 00:24:00,090 الذي فقط من أجل الوضوح سوف أود أن ألفت الحق أدناه هذا واحد، ولكن لا يجب أن تكون هناك. 384 00:24:00,090 --> 00:24:04,880 ولكنه يجب أن يكون نفس الحجم، ولذا فإنني سوف يوجه هذه الخطوط العمودية في نفس المكان. 385 00:24:04,880 --> 00:24:09,720 أنه بخير إذا كان هذا هو كل القمامة في البداية. من يدري ما كان هناك؟ 386 00:24:09,720 --> 00:24:13,850 ولكن الخطوة 1 وستكون لدينا أن تعطيني مساحة كبيرة من الذاكرة وأنا في حاجة 387 00:24:13,850 --> 00:24:18,630 لتناسب نسخة من مرحبا، ثم معرفة كيفية نسخ ساعة هنا، وهنا ه، 388 00:24:18,630 --> 00:24:20,390 لام هنا وهكذا دواليك. 389 00:24:20,390 --> 00:24:24,880 ولكن هذا يجب أن يشعر بالفعل قليلا واضحة حتى وإن كانت بعض المعلومات لا تزال مجردة. 390 00:24:24,880 --> 00:24:28,690 لنسخ هذه السلسلة إلى ذلك، انها مجرد لحلقة أو حلقة في حين 391 00:24:28,690 --> 00:24:31,580 أو شيء من هذا الذي كنت قد أصبحت أكثر دراية جميع. 392 00:24:31,580 --> 00:24:35,970 لذلك دعونا نحاول ذلك. اسمحوا لي ان اذهب الى copy2.c. 393 00:24:35,970 --> 00:24:43,270 في copy2.c لدينا تقريبا نفس البرنامج باستثناء خط 27. 394 00:24:43,270 --> 00:24:47,260 يبدو معقدة بعض الشيء، ولكن إذا كان لنا أن كسرها نزولا قطعة قطعة، 395 00:24:47,260 --> 00:24:48,950 الجانب الأيسر هو نفسه. 396 00:24:48,950 --> 00:24:52,790 * شار ر يخلق هذا الشيء في الذاكرة، ولكن مع علامة استفهام 397 00:24:52,790 --> 00:24:54,680 لأن لدينا أي فكرة ما هو هناك بشكل افتراضي. 398 00:24:54,680 --> 00:24:57,920 على الجانب الأيمن إننا نقدم الآن ظيفة جديدة، malloc، 399 00:24:57,920 --> 00:25:00,640 تخصيص للذاكرة، أعطني الذاكرة، 400 00:25:00,640 --> 00:25:06,900 وعلى ما يبدو فإنه يأخذ عدد الحجج، كم من الأشياء داخل أقواس؟ 401 00:25:09,660 --> 00:25:12,130 سمعت تذمر 1 و 2، وإنما هو فقط 1. 402 00:25:12,130 --> 00:25:15,320 ليس هناك فاصلة، وهو ما يعني أن هناك فقط 1 شيء داخل الأقواس. 403 00:25:15,320 --> 00:25:17,720 على الرغم من أن هناك أقواس أخرى، اسمحوا لي أن تسليط الضوء على 404 00:25:17,720 --> 00:25:21,460 ما هو داخل الأقواس الأبعد، وانها هذا التعبير: 405 00:25:21,460 --> 00:25:25,880 (التوابع strlen (ق) + 1) * sizeof (تشار). 406 00:25:25,880 --> 00:25:29,190 حتى إذا كنا نعتقد فعلا ذلك من خلال، وهذا هو القول تعطيني طول ق. 407 00:25:29,190 --> 00:25:34,440 لماذا أنا، مع ذلك، إضافة 1 على طول؟ >> [استجابة الطالب غير مسموع] 408 00:25:34,440 --> 00:25:40,200 بالضبط. نحن بحاجة لهذا الفضاء الرجل في الذيل، والحرف السادس الذي ليس له معنى الإنجليزية 409 00:25:40,200 --> 00:25:42,250 ولكن لا يكون لها معنى خاص البرنامجية. 410 00:25:42,250 --> 00:25:46,800 >> لذلك نحن في حاجة الى + 1 لأنه بسبب التوابع strlen عوائد توقع الإنسان للطول، 411 00:25:46,800 --> 00:25:50,890 مرحبا أو 5، فإنه لا تعطيك الطابع فارغة إضافية. 412 00:25:50,890 --> 00:25:52,980 لذلك أنا مع هذا إضافة يدويا + 1. 413 00:25:52,980 --> 00:25:56,060 ثم هذا، وحجم * من (شار)، ونحن لم نر هذا من قبل. 414 00:25:56,060 --> 00:25:57,480 هذه ليست وظيفة من الناحية الفنية. 415 00:25:57,480 --> 00:26:04,150 انها الكلمة الخاصة التي تحكي لكم ما هو حجم البيانات من نوع ما على جهاز كمبيوتر 416 00:26:04,150 --> 00:26:06,980 لأنه في الواقع، بعض منا لديه 32-بت أجهزة الكمبيوتر. 417 00:26:06,980 --> 00:26:10,900 لدي جهاز كمبيوتر قديمة جدا في المنزل، ويستخدم فقط 32 بت لتمثيل المؤشرات. 418 00:26:10,900 --> 00:26:13,900 وإذا فعلت ذلك حجم نوع البيانات، قد يكون 32 بت. 419 00:26:13,900 --> 00:26:18,300 ولكن إذا أنا باستخدام جهاز الكمبيوتر الخاص بي الهوى جديد، قد أعود لقيمة 64 بت 420 00:26:18,300 --> 00:26:20,510 عن شيء مثل عنوان. 421 00:26:20,510 --> 00:26:25,400 حتى في هذه الحالة، لمجرد أن تكون آمنة فائقة، ونحن لن شيء بجد رمز مثل - 422 00:26:25,400 --> 00:26:28,740 حسنا، ما هو حجم شار وفقا لما قلنا حتى الآن؟ 423 00:26:28,740 --> 00:26:34,450 لدينا الى حد كبير وقال لفظيا انه من 1 بايت، وهذا صحيح إلى حد كبير في جميع المجالات. 424 00:26:34,450 --> 00:26:37,000 ولكن مرة أخرى، تميل إلى أن تكون الافتراضات السيئة. 425 00:26:37,000 --> 00:26:40,850 أنها تؤدي إلى البرامج عربات التي تجرها الدواب إذا كان الناس في استخدام البرمجيات الخاصة بك الطرق التي لم يقصد. 426 00:26:40,850 --> 00:26:44,750 لذلك دعونا مجردة بعيدا وهذا أكثر عدلا بشكل عام يقول 427 00:26:44,750 --> 00:26:46,830 انا بحاجة الى هذا قطع العديد من الذاكرة 428 00:26:46,830 --> 00:26:50,210 وينبغي أن كل قطعة من الذاكرة يكون معادلا لحجم حرف، 429 00:26:50,210 --> 00:26:54,870 وهو في الواقع يساوي 1 في هذه الحالة، لكنه وسيلة أكثر عمومية من كتابة هذا التقرير. 430 00:26:54,870 --> 00:27:00,460 حتى إذا كانت الكلمة مرحبا، عدد البايتات لا malloc تخصيص ما يبدو لتضع تعليقا؟ 431 00:27:00,460 --> 00:27:04,980 [طالب] ستة. ستة >>. بالضبط ما يصل لدينا علامات استفهام على الشاشة. 432 00:27:04,980 --> 00:27:07,800 ومن ثم اتخاذ تخمين مبني الآن على فهمك GetString 433 00:27:07,800 --> 00:27:12,790 ماذا malloc العودة ربما؟ >> [طالب] عنوان. 434 00:27:12,790 --> 00:27:17,020 عنوان ما؟ من قطعة الأول من الذاكرة. 435 00:27:17,020 --> 00:27:20,670 >> ليس لدينا أي فكرة ما هو هناك لبعض وظيفة أخرى 436 00:27:20,670 --> 00:27:23,010 كان من الممكن استخدام هذه الذاكرة من قبل. 437 00:27:23,010 --> 00:27:28,380 لكن malloc، مثل GetString، بإرجاع عنوان البايت الأول من الذاكرة 438 00:27:28,380 --> 00:27:30,540 التي وضعها جانبا لك. 439 00:27:30,540 --> 00:27:38,380 ومع ذلك، ما لم يفعل هو ملء هذا فارغا في بخط مائل حرف فارغة 440 00:27:38,380 --> 00:27:43,030 لأنه تبين أن تتمكن من استخدام malloc تخصيص أي شيء: رجات، سلاسل، المصفوفات، 441 00:27:43,030 --> 00:27:45,700 العوامات، والهياكل الطلابية. 442 00:27:45,700 --> 00:27:47,750 يمكنك استخدام malloc بشكل عام تماما. 443 00:27:47,750 --> 00:27:51,470 أنه لا يهتم أو أن تعرف ما كنت لتخصيص الذاكرة. 444 00:27:51,470 --> 00:27:55,810 لذلك سيكون من قبيل الزهو لmalloc لوضع 0 \ 445 00:27:55,810 --> 00:27:58,340 في نهاية كل جزء من الذاكرة مما يتيح لك انها 446 00:27:58,340 --> 00:28:02,620 لأن هذا \ 0 الشيء هو مجرد اتفاقية لسلاسل. 447 00:28:02,620 --> 00:28:06,310 ليس استخدامه لرجات، انها لا تستخدم ليطفو، ليست استخدامه للطلاب. 448 00:28:06,310 --> 00:28:11,730 وبالتالي فإن مسكتك مع malloc هو أن العبء يقع كليا على لك مبرمج 449 00:28:11,730 --> 00:28:16,790 لنتذكر كم كنت بايت المخصصة وعدم استخدام أي وقت مضى للحلقة 450 00:28:16,790 --> 00:28:21,570 أو حلقة في حين وتجاوز الحدود من قطعة من الذاكرة كنت قد أعطيت. 451 00:28:21,570 --> 00:28:23,540 وبعبارة أخرى، بمجرد تخصيص الذاكرة، 452 00:28:23,540 --> 00:28:28,510 لا يمكنك طرح نظام التشغيل، أوه، بالمناسبة، كيف كبيرة من قطعة من الذاكرة كان ذلك؟ 453 00:28:28,510 --> 00:28:32,080 انها تماما متروك لكم لنتذكر اذا كنت بحاجة الى تلك القيمة. 454 00:28:32,080 --> 00:28:34,330 >> لذلك دعونا نرى كيف أبدأ في استخدام هذه الذاكرة. 455 00:28:34,330 --> 00:28:38,430 في خط 28 و 29 لماذا أفعل هذا؟ 456 00:28:39,850 --> 00:28:42,260 انظروا فقط التعقل الكلي. 457 00:28:42,260 --> 00:28:45,110 فقط في حال حدث خطأ ما، أطلب بعض مبلغ مجنون من الذاكرة 458 00:28:45,110 --> 00:28:48,690 أو لقد أشياء كثيرة قيد التشغيل على الكمبيوتر أن هناك فقط ذاكرة كافية، 459 00:28:48,690 --> 00:28:51,780 شيء من هذا القبيل، وأنا على الأقل تريد أن تحقق لاغية. 460 00:28:51,780 --> 00:28:55,260 في الواقع، فإن معظم أجهزة الكمبيوتر تعطيك الوهم بأن كل برنامج 461 00:28:55,260 --> 00:28:57,080 يمكن استخدام مجمل RAM الخاص بك، 462 00:28:57,080 --> 00:29:00,740 ولكن على الرغم من ذلك، إذا كان المستخدم أنواع في سلسلة طويلة بعض الجنون ربما لانهم رجل سيء 463 00:29:00,740 --> 00:29:03,440 وانهم في الواقع محاولة لتحطم البرنامج أو الإختراق في ذلك، 464 00:29:03,440 --> 00:29:07,300 تريد على الأقل التحقق من القيمة المرجعة من malloc وما إذا كان يساوي فارغة. 465 00:29:07,300 --> 00:29:11,630 وإذا كان كذلك، دعونا فقط إنهاء الآن لأنني لا أعرف ماذا أفعل في هذه الحالة. 466 00:29:11,630 --> 00:29:13,950 كيف يمكنني نسخ السلسلة؟ هناك عدد قليل من الطرق للقيام بذلك. 467 00:29:13,950 --> 00:29:18,850 هناك نسخ شارع وظائف في C، ولكنه سوبر بسيطة بالنسبة لنا للقيام بذلك على الطراز القديم الطريق. 468 00:29:18,850 --> 00:29:23,110 >> اسمحوا لي أولا معرفة ما هو طول ليالي. 469 00:29:23,110 --> 00:29:26,930 كان يمكن أن أضع هذا في حلقة ولكن بدلا من ذلك أنا فقط وضعت بها هنا من أجل الوضوح. 470 00:29:26,930 --> 00:29:30,610 حتى الآن لا يوجد يخزن طول السلسلة الأصلية، والتي على ما يبدو 5. 471 00:29:30,610 --> 00:29:35,290 ثم في حلقة لبلدي أنا من 0 بالتكرار على ما يصل إلى ن، 472 00:29:35,290 --> 00:29:40,940 وعلى كل التكرار أضع ق [I] داخل ر [أنا]. 473 00:29:40,940 --> 00:29:45,060 وهذا ما يعني أنا مع بلدي 2 أصابع مشيرا في سلاسل من قبل. 474 00:29:45,060 --> 00:29:49,260 لأن هذا لحلقة بالتكرار مثل هذا، انا ذاهب الى أن النسخ في ساعة هنا، 475 00:29:49,260 --> 00:29:52,890 ه إلى هنا، l الى هنا لأن هذا هو ثانية، هذا هو ر. 476 00:29:52,890 --> 00:29:58,770 وأخيرا ثم في خط 35 لماذا أفعل هذا؟ 477 00:29:58,770 --> 00:30:03,770 ولست بحاجة للتأكد من أن أنا ر إنهاء السلسلة. 478 00:30:03,770 --> 00:30:06,170 وأنا فعلت هذا ليكون بهذه الطريقة السوبر صريحة. 479 00:30:06,170 --> 00:30:09,510 ولكن أقترح، شخص ما، إذا كنت تستطيع، بطريقة مختلفة للقيام بذلك. 480 00:30:09,510 --> 00:30:13,930 لا حاجة لي حقا خط 35. هناك طريقة أخرى للقيام بذلك. 481 00:30:13,930 --> 00:30:18,880 نعم. >> [استجابة الطالب غير مسموع] >> قلها بصوت أعلى. 482 00:30:18,880 --> 00:30:20,960 [طالب] أقل من أو يساوي. بالضبط >>. 483 00:30:20,960 --> 00:30:24,450 يمكن أن نقول فقط أقل من أو يساوي N، التي بشكل عام كانت سيئة 484 00:30:24,450 --> 00:30:28,190 لأن دائما تقريبا عندما نذهب تصل إلى مساو لشيء نعتمد 485 00:30:28,190 --> 00:30:30,000 نذهب بعيدا جدا 1 الخطوة. 486 00:30:30,000 --> 00:30:32,170 ولكن تذكر، كم بايت ونحن لم تخصص؟ 487 00:30:32,170 --> 00:30:37,210 خصصنا التوابع strlen من ليالي، لذلك 5 + 1 ليصبح المجموع 6. 488 00:30:37,210 --> 00:30:39,980 حتى في هذه الحالة يمكن أن نفعل شيئا من هذا القبيل 489 00:30:39,980 --> 00:30:46,450 بحيث اننا نسخ وليس فقط ولكن أيضا مرحبا 0 \ في النهاية. 490 00:30:46,450 --> 00:30:49,860 بدلا من ذلك، يمكن أن نستخدم دالة يسمى شارع نسخة، strcpy، 491 00:30:49,860 --> 00:30:51,700 ولكن لن يكون ذلك متعة ما يقرب من ذلك بكثير. 492 00:30:51,700 --> 00:30:54,000 ولكن هذا كل ما يفعله تحت غطاء محرك السيارة. 493 00:30:54,000 --> 00:30:56,050 وأخيرا ثم، ونحن نفعل الشيء نفسه كما كان من قبل. 494 00:30:56,050 --> 00:31:01,620 I الاستفادة ر وبعد ذلك يدعون أن يبدو مثل هذا الأصلي ونسخة يشبه ذلك. 495 00:31:01,620 --> 00:31:08,570 لذلك دعونا نحاول هذا الآن. اسمحوا لي ان اذهب هنا. جعل copy2. سنقوم تكبير وتشغيل copy2. 496 00:31:08,570 --> 00:31:13,840 أنا ذاهب لكتابة مرحبا في صغيرة، بل صغيرة أحصل مرحبا مثل الأصلي 497 00:31:13,840 --> 00:31:16,930 ولكن رأس المال مرحبا للنسخة. 498 00:31:16,930 --> 00:31:20,300 ولكن لست فعلت حتى الآن. يجب أن أفعل شيء 1 مشاركة هنا. 499 00:31:20,300 --> 00:31:28,000 46 و 47 وتحرير بوضوح الذاكرة، ولكن ماذا يعني ذلك في الواقع؟ 500 00:31:28,000 --> 00:31:33,250 ماذا أفعل، هل تعتقد، من خلال الدعوة خط 46 و خط 47؟ 501 00:31:33,250 --> 00:31:38,900 ما أثر ذلك؟ نعم. 502 00:31:38,900 --> 00:31:43,140 [رد الطالب غير مسموع] >> بالضبط. 503 00:31:43,140 --> 00:31:46,380 >> كنت مجرد قول نظام التشغيل، مهلا، شكرا لهذه الذاكرة. 504 00:31:46,380 --> 00:31:48,320 يمكنك الآن استخدام ذلك لشخص آخر. 505 00:31:48,320 --> 00:31:50,790 وهنا مثال على القيم القمامة. 506 00:31:50,790 --> 00:31:55,430 ولقد استخدمت هذه الذاكرة فقط من كتابة كلمة مرحبا في 2 أماكن، 507 00:31:55,430 --> 00:31:57,490 هنا، هنا، هنا، وهنا. 508 00:31:57,490 --> 00:32:00,910 لذلك هذا هو H-E-L-L-O-\ 0. 509 00:32:00,910 --> 00:32:06,960 ولكن بعد ذلك أعطي الكلمة خط 46 و خط 47، وأنت تعرف ما يحدث هناك من حيث الصورة؟ 510 00:32:06,960 --> 00:32:10,010 في الواقع، انتظر، هذه الصورة هي واحدة من العمر. 511 00:32:10,010 --> 00:32:12,550 يمكننا أن نجعل من مرة واحدة نسخة، هذا الرجل هو في الواقع لافتا هنا، 512 00:32:12,550 --> 00:32:16,110 لذلك دعونا إزالة أرقام مجردة فقط وبعيدا عن الأسهم لدينا مرة أخرى. 513 00:32:16,110 --> 00:32:19,370 ما يحدث في هذه الصورة عندما أعطي الكلمة الحرة؟ 514 00:32:19,370 --> 00:32:22,750 [رد الطالب غير مسموع] >> ولا حتى. 515 00:32:22,750 --> 00:32:29,510 إذا أعطي الكلمة الحرة على العلم والتكنولوجيا - نوع من السؤال خدعة - هذا الصورة لا تتغير في جميع 516 00:32:29,510 --> 00:32:33,880 لأن الدعوة والدعوة ليالي ر يروي فقط نظام التشغيل، 517 00:32:33,880 --> 00:32:39,010 مهلا، يمكنك استخدام هذه الذاكرة مرة أخرى، ولكن هذا لا يغير إلى فارغة 518 00:32:39,010 --> 00:32:41,840 أو بعض حرف خاص، فإنه لا يغير هذا، 519 00:32:41,840 --> 00:32:47,350 لا تغيير في ساعة أو البريد أو L أو L أو س في أي مكان إلى أي شيء آخر. 520 00:32:47,350 --> 00:32:51,610 من حيث الصورة، بمجرد الكلمة الحرة لا شيء يتغير. 521 00:32:51,610 --> 00:32:56,570 وهنا تكمن أصل القيم القمامة لأنه إذا كنت ثم لاحقا في هذا البرنامج 522 00:32:56,570 --> 00:33:01,010 نطلب من نظام التشغيل لمزيد من الذاكرة مع malloc أو GetString أو شيء من هذا القبيل 523 00:33:01,010 --> 00:33:04,900 ونظام التشغيل يقول، بالتأكيد، لدي 12 بايت من الذاكرة تحرير لأول مرة، 524 00:33:04,900 --> 00:33:08,080 استخدام هذه، ما أنت ذاهب لتسليم؟ 525 00:33:08,080 --> 00:33:10,830 وأنت تسير لتسليم قطعة من الذاكرة التي كنا عادة رسم 526 00:33:10,830 --> 00:33:13,700 مع علامات استفهام، ولكن ما هي تلك علامات استفهام؟ 527 00:33:13,700 --> 00:33:17,000 انهم يحدث ليكون H-E-L-L-O، H-E-L-L-O. 528 00:33:17,000 --> 00:33:20,940 هذه هي قيمنا القمامة الجديد بمجرد تحرير تلك الذاكرة. 529 00:33:20,940 --> 00:33:22,750 >> هناك ضمنا العالم الحقيقي هنا أيضا. 530 00:33:22,750 --> 00:33:24,720 هذا يحدث للعلاقة مع ذاكرة الوصول العشوائي، ولكن أجهزة الكمبيوتر 531 00:33:24,720 --> 00:33:26,720 فعلا نفس الشيء مع القرص. 532 00:33:26,720 --> 00:33:30,620 سوف نتحدث عن هذا بشكل خاص مع مجموعة مشكلة المستقبلية التي تركز على الطب الشرعي. 533 00:33:30,620 --> 00:33:36,170 ولكن ما يحدث في الواقع إذا كان لديك بعض الملفات الحساسة المالية على سطح المكتب 534 00:33:36,170 --> 00:33:39,600 أو بعض JPEG سطحية وكنت اسحبه إلى سلة المهملات الخاصة بك، 535 00:33:39,600 --> 00:33:44,390 ماذا يحدث عندما اسحبه إلى سلة المهملات أو سلة المهملات؟ 536 00:33:44,390 --> 00:33:47,240 كنت تعرف ما كنت أتحدث عنه. [ضحك] 537 00:33:47,240 --> 00:33:52,370 ماذا يحدث عندما كنت قد جر إلى أن الأدلة سلة المهملات أو سلة المهملات؟ 538 00:33:52,370 --> 00:33:55,920 [رد الطالب غير مسموع] 539 00:33:55,920 --> 00:33:58,000 حسنا، حذرا جدا. ماذا يحدث عندما كنت تفعل ذلك؟ 540 00:33:58,000 --> 00:34:01,030 الجواب القصير هو لا شيء، أليس كذلك؟ 541 00:34:01,030 --> 00:34:04,790 ملف سطحية أو حساسة لا يزال مجرد الجلوس هناك في مكان ما في القرص الصلب. 542 00:34:04,790 --> 00:34:07,940 معظمنا على الأقل قد تعلمت بالطريقة الصعبة التي تحتاج إلى إفراغ القمامة الخاص بك 543 00:34:07,940 --> 00:34:10,429 أو سلة المحذوفات لحذف الملفات في الواقع. 544 00:34:10,429 --> 00:34:13,440 وبالفعل، عند النقر بزر الماوس الأيمن فوق أو السيطرة على القمامة الخاص بك يمكن 545 00:34:13,440 --> 00:34:15,580 أو اختر ملف، أو أيا كان فارغة المهملات 546 00:34:15,580 --> 00:34:21,420 وتقوم بإفراغ سلة المهملات في الواقع أو سلة المهملات، ثم ما يحدث بالفعل لهذه الصورة؟ 547 00:34:22,810 --> 00:34:25,969 لا شيء أكثر. حتى لا يحدث أي شيء في الواقع على القرص. 548 00:34:25,969 --> 00:34:30,880 >> وإذا كان لنا أن أتطرق فقط مؤقتا والكتابة - I'll مجرد استخدام الجزء الخلفي من هذا. 549 00:34:30,880 --> 00:34:34,639 حتى الآن القصة يتغير من RAM، وهو المكان الذي توجد برامج 550 00:34:34,639 --> 00:34:39,250 بينما كنت تشغيلها، إلى القرص، وهو حيث يتم تخزينها على المدى الطويل 551 00:34:39,250 --> 00:34:42,920 حتى عندما انقطع التيار الكهربائي، في الوقت الراهن - ونحن سوف نعود إلى هذا في المستقبل - 552 00:34:42,920 --> 00:34:46,380 دعونا نتظاهر فقط أن هذا يمثل داخل القرص الصلب لجهاز الكمبيوتر الخاص بك 553 00:34:46,380 --> 00:34:50,110 لأن مرة في اليوم تستخدم لتكون الأقراص الدائرية، مثل الكثير من الأقراص المرنة. 554 00:34:50,110 --> 00:34:55,130 حتى إذا كان لديك بعض ملف Excel الحساسة، قد يستغرق الأمر ما يصل هذا جزء من الذاكرة 555 00:34:55,130 --> 00:34:59,770 على القرص جهاز الكمبيوتر الخاص بك، وأنا مجرد رسم 1S و 0s نفس التعسفي. 556 00:34:59,770 --> 00:35:03,970 عند سحب ملف من هذا القبيل إلى القمامة الخاص بك يمكن أو سلة المهملات، 557 00:35:03,970 --> 00:35:07,750 لا شيء يحدث لأن حرفيا أبل ومايكروسوفت قد قررت فقط 558 00:35:07,750 --> 00:35:10,450 يمكن القمامة وإعادة تدوير بن هو في الحقيقة مجرد عنصر نائب مؤقتة. 559 00:35:10,450 --> 00:35:14,710 ربما في نهاية المطاف سوف OS إفراغ ذلك لك، ولكن عادة، فإنه لا يفعل أي شيء، 560 00:35:14,710 --> 00:35:17,090 على الأقل حتى كنت منخفضة حقا على الفضاء. 561 00:35:17,090 --> 00:35:20,870 >> ومع ذلك، عندما تذهب إلى سلة المهملات فارغة أو فارغة سلة المهملات، 562 00:35:20,870 --> 00:35:23,460 وبالمثل، لا شيء يحدث لهذه الصورة. 563 00:35:23,460 --> 00:35:28,590 كل ما يحدث هو في مكان آخر على جهاز الكمبيوتر الخاص بك، وهناك نوع من الجدول. 564 00:35:28,590 --> 00:35:35,400 انها نوع من مثل ورقة الغش القليل الذي يقول ذلك، دعنا نقول، resume.doc، 565 00:35:35,400 --> 00:35:40,920 حتى سيرتك الذاتية في ملف مايكروسوفت وورد كان يعيش في مكان 123 بشأن القرص الثابت، 566 00:35:40,920 --> 00:35:43,710 ليس في الذاكرة وليس في RAM ولكن على القرص الثابت، 567 00:35:43,710 --> 00:35:49,050 وبك حياة سطحية JPEG في 456، وملف إكسل يعيش في 789 أو في أي مكان. 568 00:35:49,050 --> 00:35:53,640 عند حذف الملفات عن طريق إفراغ سلة المهملات أو في الواقع في سلة المهملات، 569 00:35:53,640 --> 00:35:59,530 هذه الصورة لا يتغير. وو 0s 1s على القرص الصلب لا تذهب إلى أي مكان. 570 00:35:59,530 --> 00:36:03,930 ولكن هذا الجدول، قاعدة البيانات هذه القليل من نوع ما، لا التغيير. 571 00:36:03,930 --> 00:36:08,750 عند حذف سيرتك الذاتية، كما هي على الرغم من حذف الملف في بعض المعنى، 572 00:36:08,750 --> 00:36:12,790 ولكن كل جهاز الكمبيوتر لا تنسى حيث يتم هذا الشيء يعيش على محرك القرص الثابت. 573 00:36:12,790 --> 00:36:17,870 وو 0s 1s التي تشكل سيرتك الذاتية أو أي من هذه الملفات الأخرى لا تزال على حالها. 574 00:36:17,870 --> 00:36:21,960 >> حتى إذا كنت فعلت ذلك دون قصد، لا يزال هناك احتمال غير الصفر 575 00:36:21,960 --> 00:36:25,800 أن يمكنك استرداد البيانات باستخدام نورتون المرافق أو بعض البرمجيات التجارية 576 00:36:25,800 --> 00:36:29,810 الغرض الذي في الحياة هو العثور على 0S و1S التي نوع من تيتم، 577 00:36:29,810 --> 00:36:33,300 نسيت هنا ولكن تركت هنا، بحيث يمكنك الحصول على البيانات الخاصة بك مرة أخرى. 578 00:36:33,300 --> 00:36:38,410 أو أن المحققين الطب الشرعي مع الشرطة أو مكتب التحقيقات الفيدرالي تتخذ في الواقع القرص الصلب 579 00:36:38,410 --> 00:36:42,550 وتبدو في الواقع لأنماط و 0s 1s التي تبدو مثل ملفات JPEG، تبدو وكأنها ملفات Excel، 580 00:36:42,550 --> 00:36:46,400 واستعادتها على هذا النحو حتى لو كان جهاز الكمبيوتر قد نسي لها هناك. 581 00:36:46,400 --> 00:36:49,820 وبالتالي فإن الطريقة الوحيدة حقا لحذف البيانات، كما سنناقش في المستقبل، 582 00:36:49,820 --> 00:36:54,190 هو فرك أو مسح ملف أو القرص الثابت عن طريق - 583 00:36:54,190 --> 00:36:56,540 لا يمكنك حقا الحصول على التخلص من 0S و1S 584 00:36:56,540 --> 00:36:59,440 لأن خلاف ذلك كنت تبدأ مع محرك غيغابايت 585 00:36:59,440 --> 00:37:02,380 وكنت في نهاية المطاف مع القرص الصلب ميغا بايت إذا كنت باستمرار وحذف، 586 00:37:02,380 --> 00:37:04,380 حرفيا، و 0s 1s. 587 00:37:04,380 --> 00:37:06,310 ذلك ما يمكن أن تفعله إذا كنت تريد حقا لتغطية المسارات الخاصة بك 588 00:37:06,310 --> 00:37:10,510 والمشكلة الأساسية هي أن هناك ما زال 0S و1S على القرص؟ 589 00:37:10,510 --> 00:37:14,930 أرى شخص الإيماء الذي من شأنه كسر جسديا الجهاز. وهذا العمل. 590 00:37:14,930 --> 00:37:19,600 [ضحك] ولكن إذا كان هذا هو نوع من الحل باهظة الثمن، ما من شأنه أن يكون أكثر معقولة؟ 591 00:37:19,600 --> 00:37:23,270 نعم. >> [طالب] الكتابة لهم. الكتابة فوق >> لهم ماذا؟ >> [طالب] بيانات أخرى. 592 00:37:23,270 --> 00:37:29,070 بيانات أخرى. يمكنك الكتابة فوق القرص فقط مع 0S أو 1S أو 0S كل شيء، كل 1S. 593 00:37:29,070 --> 00:37:31,230 >> وهذا في الواقع ما بعض البرامج لا. 594 00:37:31,230 --> 00:37:33,570 يمكنك شراء البرامج أو حتى الحصول على البرمجيات الحرة، 595 00:37:33,570 --> 00:37:36,610 وبنيت حتى في لماك OS هذه الأيام، أقل من ذلك في ويندوز، 596 00:37:36,610 --> 00:37:38,660 هو القدرة على محو آمن. 597 00:37:38,660 --> 00:37:41,960 في الواقع، إذا كنت ترغب في تشغيل جميع المنازل اليوم إذا كان لديك جهاز ماكنتوش وقيام بذلك، 598 00:37:41,960 --> 00:37:45,740 إذا كنت قد حصلت على بعض الاشياء يمكن في القمامة الخاص بك، يمكنك القيام به فارغة المهملات الآمنة، 599 00:37:45,740 --> 00:37:47,610 الذي يفعل ذلك بالضبط. 600 00:37:47,610 --> 00:37:53,350 بدلا من محو الملفات فقط هنا، فإنه لا يمحو هنا و 0s 1s، 601 00:37:53,350 --> 00:38:01,240 بدلا من ذلك، فإنه يغير فقط كل منهم، على سبيل المثال، إلى نقطة و0S نقطة، نقطة. 602 00:38:01,240 --> 00:38:05,330 لذلك سوف واحدة من psets مستقبلك يكون في الواقع لاسترداد البيانات عمدا - 603 00:38:05,330 --> 00:38:08,430 الصور التي اتخذناها من الناس، الأماكن، والأشياء في الحرم الجامعي 604 00:38:08,430 --> 00:38:12,810 التي سوف نقدم صورة من بطاقة الذاكرة الطب الشرعي كاميرا الرقمية، 605 00:38:12,810 --> 00:38:17,120 وهو بالضبط نفس الفكرة - وعليك أن الطعن للعثور على الواقع 606 00:38:17,120 --> 00:38:20,160 الأنماط التي تمثل صور JPEG على القرص الثابت، 607 00:38:20,160 --> 00:38:23,610 مثل الكثير من ذلك الطالب السابقين الذين قرأت البريد الإلكتروني قبل بضعة أسابيع لم 608 00:38:23,610 --> 00:38:25,860 لاسترداد صور شقيقته. 609 00:38:25,860 --> 00:38:30,300 لماذا لا نأخذ استراحة 5 دقائق بالسيارة هنا، وسنقوم تجميع صفوفهم مع أكثر على الذاكرة. 610 00:38:33,030 --> 00:38:38,610 حتى هنا حيث الامور قليلا الاعتبار للرضوخ، ولكن هذه خطوة قوية جدا 611 00:38:38,610 --> 00:38:40,480 نحو فهم كل هذا وأكثر. 612 00:38:40,480 --> 00:38:42,900 هنا برنامج يسمى pointers.c. 613 00:38:42,900 --> 00:38:45,430 فمن بين عينة متاحة اليوم. 614 00:38:45,430 --> 00:38:51,280 لاحظت أن في الأسطر القليلة الأولى، و 19 إلى 22، كل ما تفعله هو شيء من هذا القبيل GetString 615 00:38:51,280 --> 00:38:54,460 والعودة عنوان، تخزينه في ليالي. 616 00:38:54,460 --> 00:38:58,380 من الآن فصاعدا لpset حتى 3 إذا كنت تريد ولكن pset 4 و على 617 00:38:58,380 --> 00:39:01,030 حيث يمكنك أن تبدأ في اتخاذ هذه العجلات التدريب من نفسك، 618 00:39:01,030 --> 00:39:04,030 ليس هناك من سبب التظاهر بأن سلاسل يعد له وجود. 619 00:39:04,030 --> 00:39:07,030 حسنا انها بالتأكيد لنبدأ قائلا * شار. 620 00:39:07,030 --> 00:39:12,610 >> بوصفها جانبا، في المراجع على الانترنت والكتب في كثير من الأحيان قد ترى النجم القادم لمتغير. 621 00:39:12,610 --> 00:39:15,600 قد تشاهد حتى مسافات حول جانبي ذلك. 622 00:39:15,600 --> 00:39:17,680 كل هذه صحيحة من الناحية الوظيفية. 623 00:39:17,680 --> 00:39:21,180 في الوقت الراهن، على الرغم من توحيد سنقوم على هذا النهج واضحة لجعل سوبر 624 00:39:21,180 --> 00:39:24,000 * أن شار هو مثل القول المؤشر حرف. 625 00:39:24,000 --> 00:39:25,680 هذا هو نوع البيانات. 626 00:39:25,680 --> 00:39:28,730 ثم اسم المتغير s في هذه الحالة. 627 00:39:28,730 --> 00:39:31,180 حتى لقد حصلت لدينا سلسلة ولقد دعا ليالي. 628 00:39:31,180 --> 00:39:35,180 ثم هنا أسفل تلاحظ أن أفعله في الواقع قليلا من الخداع. 629 00:39:35,180 --> 00:39:39,080 وهذا ما يسمى مؤشر الحساب، والذي هو نوع من السوبر بسيطة. 630 00:39:39,080 --> 00:39:41,790 بل يعني فقط إضافة إلى وطرح أعداد المؤشرات. 631 00:39:41,790 --> 00:39:43,660 ولكن هذا في الواقع يعمل. 632 00:39:43,660 --> 00:39:49,170 هذا البرنامج يطبع على ما يبدو سلسلة ق 1 حرف في كل سطر بحيث النتيجة النهائية - 633 00:39:49,170 --> 00:39:54,920 فقط حتى نتمكن من يفسد فيها هذا يحدث، وجعل المؤشرات، مؤشرات تشغيل، اسمحوا لي تكبير. 634 00:39:54,920 --> 00:39:58,940 والآن اسمحوا لي في شيء من هذا القبيل نوع أهلا وأدخل نوع 635 00:39:58,940 --> 00:40:01,080 ويطبع حرف في كل سطر 1. 636 00:40:01,080 --> 00:40:04,730 حتى ثانية قبل أن فعلنا هذا مع تدوين قوس مربع. 637 00:40:04,730 --> 00:40:09,760 كنت لدينا لحلقة وكنا نفعل printf من ليالي [i] و كنا نفعل ذلك مرارا وتكرارا، ومرة ​​أخرى 638 00:40:09,760 --> 00:40:11,950 مع ن مائل في نهاية كل سطر. 639 00:40:11,950 --> 00:40:16,800 ولكن هذا البرنامج يختلف. هذا البرنامج يستخدم، حرفيا، والحساب. 640 00:40:16,800 --> 00:40:18,860 ذلك ما يحدث هنا؟ 641 00:40:18,860 --> 00:40:24,720 بادئ ذي بدء، قبل تنفيذ هذه الحلقة حتى، ما، لمجرد أن يكون واضحا، هو في الواقع ليالي؟ 642 00:40:24,720 --> 00:40:27,270 S هو؟ >> [طالب] عنوان. عنوان >>. 643 00:40:27,270 --> 00:40:32,980 >> وانها عنوان، في حالة مرحبا، الحرف الأول في تلك الكلمة، التي هي ح. 644 00:40:32,980 --> 00:40:37,370 ذلك هو ق، في هذا المثال خاص، عنوان ح. 645 00:40:37,370 --> 00:40:41,850 فما معنى أن تفعل ق ط +؟ 646 00:40:41,850 --> 00:40:46,280 حسنا، أنا يبدأ عند 0 في هذه الحلقة ل. لقد فعلنا مرات عديدة أن. 647 00:40:46,280 --> 00:40:49,760 I سوف ترتفع إلى طول السلسلة، على ما يبدو. 648 00:40:49,760 --> 00:40:53,950 إلى ذلك التكرار الأول من هذه الحلقة، أنا هو 0 واضح. 649 00:40:53,950 --> 00:41:01,740 ولذلك فإن هذا التعبير يقول ق ط + - بدلا، ق، +0- أن من الواضح مجرد. 650 00:41:01,740 --> 00:41:04,320 فما هو * S هنا؟ 651 00:41:04,320 --> 00:41:08,530 الآن نحن نستخدم النجوم بطريقة مختلفة قليلا. 652 00:41:08,530 --> 00:41:13,080 اسمحوا لي أن تمضي قدما والتخلص من الانتهاء من ذلك لأن ر نتحدث عنه ونسخ من ر ق. 653 00:41:13,080 --> 00:41:15,540 الآن نحن نريد فقط أن أروي قصة تنطوي ق. 654 00:41:15,540 --> 00:41:20,090 وهكذا في هذه اللحظة، وبعد سلسلة النوع، عالمنا يشبه تماما فعلت قبل 655 00:41:20,090 --> 00:41:26,630 مع ليالي فقط تخزين عنوان ساعة وبشكل عام لافتا في سلسلة مرحبا. 656 00:41:26,630 --> 00:41:33,170 إذا كنت تفعل الآن مثل خط * (ق + ط)، دعونا نحاول ذلك. 657 00:41:33,170 --> 00:41:40,140 * حتى (ق + ط). اسمحوا لي أن تبسيط هذه لأن هذا هو 0، لذلك هذا هو * (ق +0). 658 00:41:40,140 --> 00:41:43,790 حسنا، الانتظار لمدة دقيقة. تبسيط أخرى. * هذا هو (ق). 659 00:41:43,790 --> 00:41:47,020 حسنا، الآن الأقواس هي نوع من الغباء، لذلك الآن دعونا فقط القيام * S. 660 00:41:47,020 --> 00:41:50,540 حتى في التكرار الأول من هذه الحلقة، أن الخط الذي يتم إلقاء الضوء (26 عاما) 661 00:41:50,540 --> 00:41:53,650 هي جميلة يعادل الكثير لطباعة هذا. 662 00:41:53,650 --> 00:41:56,040 ما هو نوع البيانات * ق؟ 663 00:41:56,040 --> 00:42:00,770 في هذا السياق، لأن النجم يحدث أن تكون بجانب ليالي نفسها، 664 00:42:00,770 --> 00:42:04,930 ولكن على نحو أكثر تحديدا، لأننا لم يعد يعلن ثانية، 665 00:42:04,930 --> 00:42:09,730 نحن لا خلق متغير بعد الآن، وليس هناك ذكر ل* شار في خط 26، 666 00:42:09,730 --> 00:42:14,280 ليس هناك ذكر لسلسلة الكلمة، ونحن فقط باستخدام متغير يسمى ثانية، 667 00:42:14,280 --> 00:42:19,650 اتضح الآن نجم لديه مختلفة قليلا و، باعتراف الجميع، وتخلط بين معنى. 668 00:42:19,650 --> 00:42:26,590 * S هنا تعني الانتقال إلى العنوان في ليالي والطباعة كل ما هو هناك. 669 00:42:26,590 --> 00:42:33,750 حتى هنا ليالي، ليالي * هو - نوع من مثل المزالق وسلالم، اتبع السهم - هنا. 670 00:42:33,750 --> 00:42:35,850 لذلك هذا هو S *. 671 00:42:35,850 --> 00:42:39,060 >> فما يحصل المطبوعة على التكرار الأول من الحلقة التي في خط 26؟ 672 00:42:39,060 --> 00:42:42,170 I طباعة ج٪، وهو نائب عن حرف، 673 00:42:42,170 --> 00:42:48,520 ثم \ n للسطر جديد. * (ق ط +) حيث i هو 0 هو فقط ذلك. 674 00:42:48,520 --> 00:42:53,670 فما شار أضع في لج٪؟ H. 675 00:42:53,670 --> 00:42:56,900 في التكرار التالي من حلقة - ترون على الارجح حيث يجري هذا - 676 00:42:56,900 --> 00:43:01,350 التكرار التالي هو 1 ط الواضح، لذلك هذا يعني ق +1، 677 00:43:01,350 --> 00:43:05,580 ثم الآن أنا بحاجة لأن الأقواس الآن النجم يحتاج أن أقول 678 00:43:05,580 --> 00:43:08,620 ذهاب إلى عنوان الذاكرة ليالي +1. 679 00:43:08,620 --> 00:43:14,170 ما هو ق؟ دعونا لفة العودة في الوقت المناسب ويقول هذا السهم الآن لا تفعل في الواقع لنا أي تفضل. 680 00:43:14,170 --> 00:43:18,450 دعونا أكثر تحديدا نقول ان هذا هو تخزين 123 عدد 681 00:43:18,450 --> 00:43:25,110 لأن بداية هذه السلسلة مرحبا، وهذا هو العنوان 123، وهذا هو 124، وهكذا دواليك. 682 00:43:25,110 --> 00:43:30,550 إلى ذلك التكرار الثاني عندما أقوله ليالي +1، وهذا مثل قوله 123 +1، 683 00:43:30,550 --> 00:43:35,340 والمعروف باسم 124، وذلك ما يحصل المطبوعة شار على التكرار الثاني؟ 684 00:43:35,340 --> 00:43:37,850 E في عنوان الذاكرة 124. 685 00:43:37,850 --> 00:43:44,440 ثم مرة أخرى +، 125، 126، 127، وهذا يتوقف حلقة الحمد لله قبل أن نصل هنا 686 00:43:44,440 --> 00:43:49,040 لأن أنا باستخدام التوابع strlen للتأكد من أنني لا تعول عالية جدا. 687 00:43:49,040 --> 00:43:50,810 بحيث هو أيضا ذلك. 688 00:43:50,810 --> 00:43:55,000 مرة أخرى، وهذا هو فقط كما لو كان علينا القيام به قبل أسبوع. 689 00:43:55,000 --> 00:43:59,200 اسمحوا لي أن الكتابة على السطر أدناه على الرغم من أننا لا نريد أن نفعل الاثنين معا. 690 00:43:59,200 --> 00:44:02,500 هذا مطابق لهذا الآن. 691 00:44:02,500 --> 00:44:08,310 >> ذلك على الرغم من سلسلة ليالي، وكنا اصفا اياه لأسابيع، ق هو في الحقيقة * شار. 692 00:44:08,310 --> 00:44:13,270 إذا كان الأمر كذلك نريد أن نكون الشرج السوبر، انها حقا مناسبة لكتابة حرف معين 693 00:44:13,270 --> 00:44:17,490 في الموقع إيث باستخدام هذه العناوين الرقمية والمشغل هذا النجم، 694 00:44:17,490 --> 00:44:20,470 ولكن بصراحة، هذا هو أنظف فقط الكثير. وهذا ليس سيئا. 695 00:44:20,470 --> 00:44:26,720 لا يوجد سبب ليتوقف عن فعل خط 27 هنا، ولكن 26 هو نفسه وظيفيا، 696 00:44:26,720 --> 00:44:31,570 وانها هي نفسها وظيفيا لأسباب بالضبط التي كنا نناقش حتى الآن. 697 00:44:31,570 --> 00:44:33,650 وأخيرا، 29 من الممارسات الجيدة فقط. 698 00:44:33,650 --> 00:44:38,420 الدعوة مجانية من ليالي يعني أن الآن كنت يعيد الذاكرة التي GetString أعطاك 699 00:44:38,420 --> 00:44:41,630 لأن مرة أخرى، كما ذكرت الاثنين، GetString لأسابيع 700 00:44:41,630 --> 00:44:44,180 وقد تم إدخال خلل في التعليمات البرمجية. 701 00:44:44,180 --> 00:44:46,490 وقد كان رمز لأسابيع التسرب في الذاكرة 702 00:44:46,490 --> 00:44:49,970 حيث كنت قد تم طرح GetString للذاكرة ولكن كنت قط اعطاء إعادته. 703 00:44:49,970 --> 00:44:53,410 والتي تم اختيارها من قبلنا عمدا تربويا 704 00:44:53,410 --> 00:44:55,880 لأنه مجرد الكثير للتفكير في وقت مبكر. 705 00:44:55,880 --> 00:44:57,710 ولكن الآن نحن بحاجة الى مزيد من التماثل. 706 00:44:57,710 --> 00:45:00,830 إذا كنت تسأل الكمبيوتر للذاكرة، كما هو الحال بالنسبة لGetString، 707 00:45:00,830 --> 00:45:02,820 كما هو الحال على ما يبدو لmalloc، 708 00:45:02,820 --> 00:45:07,970 يجب عليك الآن فصاعدا ل4 pset أيضا مجانا أي ذاكرة من هذا القبيل. 709 00:45:07,970 --> 00:45:11,650 تلاحظ هذا يختلف عن القول ن الباحث. 710 00:45:11,650 --> 00:45:15,040 لا تحتاج لتحرير هذا لأنك لم تدع GetString 711 00:45:15,040 --> 00:45:16,890 وكنت لا ندعو malloc. 712 00:45:16,890 --> 00:45:20,610 >> وحتى إذا دعاكم GetInt كما سنرى في نهاية المطاف، 713 00:45:20,610 --> 00:45:25,520 GetInt لا تخصيص الذاكرة بالنسبة لك لأنك يمكن أن تمر في الواقع حول أعداد صحيحة 714 00:45:25,520 --> 00:45:29,430 ويطفو وحرف مجرد وسيلة كنا نقوم به منذ أسابيع. 715 00:45:29,430 --> 00:45:33,960 سلاسل، رغم ذلك، هي خاصة لانهم حقا سلسلة من حرف متعددة. 716 00:45:33,960 --> 00:45:37,450 حتى انهم مختلفة تماما من حرف ويطفو ورجات وما شابه ذلك. 717 00:45:37,450 --> 00:45:39,980 ولكن سوف نعود إلى فترة طويلة قبل ذلك. 718 00:45:39,980 --> 00:45:44,920 ثم أي أسئلة حول هذا بداية من المؤشرات؟ نعم. 719 00:45:44,920 --> 00:45:49,690 [سؤال الطالب غير مسموع] 720 00:45:49,690 --> 00:45:51,440 آه، سؤال جيد جدا. 721 00:45:51,440 --> 00:45:55,790 واحدة من الاشياء القليلة C في الواقع لا بالنسبة لك، وهو مناسب، 722 00:45:55,790 --> 00:46:00,110 وأنها شخصيات للكم ما هو حجم من نوع البيانات 723 00:46:00,110 --> 00:46:03,060 ويقوم هذا النوع من ثم الضرب بالنسبة لك. 724 00:46:03,060 --> 00:46:06,610 هذا لا يهم في حالة حرف دائما تقريبا بسبب شار هو 1 بايت، 725 00:46:06,610 --> 00:46:08,150 ولذلك فإن هذا يعمل فقط. 726 00:46:08,150 --> 00:46:11,220 ولكن من أجل المناقشة، إذا كنت تطبع في الواقع صحيحة 727 00:46:11,220 --> 00:46:15,500 وكنت تحاول طباعة بعض الصفحات القيمة التي تم لافتا في عدد صحيح، 728 00:46:15,500 --> 00:46:20,720 وبالمثل كنت لا تحتاج إلى القيام به + 4 * ط لأن مجرد الباحث هو 4 بايت. 729 00:46:20,720 --> 00:46:25,780 المؤشر الحسابي يعني أن المترجم C والقيام بكل ما الرياضيات بالنسبة لك. 730 00:46:25,780 --> 00:46:29,190 كل ما عليك هو أن نهتم عد في نوع من الشعور الإنساني. نعم. 731 00:46:29,190 --> 00:46:35,200 [طالب] إذا قمت بتعريف سلسلة داخل حلقة For، هل لديك اطلاق سراحه في وقت لاحق؟ 732 00:46:35,200 --> 00:46:36,760 سؤال جيد. 733 00:46:36,760 --> 00:46:41,390 >> إذا كنت داخل أعلنت سلسلة من حلقة ل، لا تحتاج إلى تحرير في وقت لاحق؟ 734 00:46:41,390 --> 00:46:47,520 تحتاج فقط لتحرير الذاكرة التي تخصص مع GetString أو مع malloc. 735 00:46:47,520 --> 00:46:53,110 إذا كان الأمر كذلك كنت أقول شيئا مثل - اسمحوا لي أن وضع الأقواس المتعرجة حتى الآن يرتبط كافة التعليمات البرمجية. 736 00:46:53,110 --> 00:46:58,580 إذا كنت فعلت شيئا، وإن كان buggily، مثل هذا، تشار * ر = ق، 737 00:46:58,580 --> 00:47:03,450 أنت لا تحتاج إلى ر ر الحرة لأن لا ينطوي على أي ذكر لmalloc أو GetString. 738 00:47:03,450 --> 00:47:08,960 على النقيض من ذلك إذا كنت فعلت ذلك، GetString، ثم نعم، قد تحتاج إلى ر الحرة. 739 00:47:08,960 --> 00:47:14,350 في واقع الأمر، فرصتك الوحيدة للقيام بذلك هي الآن داخل هذه الحلقة، لنفس الموضوع من نطاق 740 00:47:14,350 --> 00:47:16,060 لقد ناقشنا ذلك في الماضي. 741 00:47:16,060 --> 00:47:18,830 وإلا كنت على تخصيص الذاكرة، وتخصيص الذاكرة، وتخصيص الذاكرة، 742 00:47:18,830 --> 00:47:21,230 وفي نهاية البرنامج لأنك خارج هذا حلقة، 743 00:47:21,230 --> 00:47:24,240 ر غير موجود، ولكنك أبدا قال نظام التشغيل 744 00:47:24,240 --> 00:47:26,750 أن كنت لا تحتاج بعد الآن أن الذاكرة. 745 00:47:26,750 --> 00:47:30,430 وقبل مرور وقت طويل، لpset 4 أو 5 سنقوم تجهيز لكم مع برنامج يسمى Valgrind، 746 00:47:30,430 --> 00:47:34,160 وهو ما يماثل في الروح لGDB في هذا انها حصلت على بعض الشيء من واجهة غامضة، 747 00:47:34,160 --> 00:47:35,750 ولكن الغرض منه في الحياة هو لمساعدتك. 748 00:47:35,750 --> 00:47:39,380 وValgrind هو البرنامج الذي سوف البحث في المستقبل البرامج 749 00:47:39,380 --> 00:47:42,550 أبحث عن تسرب الذاكرة، أو ما إذا كان من GetString malloc، 750 00:47:42,550 --> 00:47:47,800 التي سوف نبدأ باستخدام جميع ونحن أكثر التوقف عن استخدام مكتبة CS50 قدر. 751 00:47:47,800 --> 00:47:53,030 ونحن الآن في نهاية المطاف نوع من المفردات وهذا النوع من نموذج العقلية من الناحية النظرية 752 00:47:53,030 --> 00:47:55,170 التي لحل هذا البرنامج كسر. 753 00:47:55,170 --> 00:47:59,410 >> حتى في هذا البرنامج كسر، وتبادل يعمل داخل المبادلة 754 00:47:59,410 --> 00:48:05,280 ولكنه لم يعمل فعليا في تمرير الرئيسية الرئيسية لفي X و Y، استدعاء، 755 00:48:05,280 --> 00:48:07,260 وصدرت تلك القيم في طريق، إذا جاز التعبير. 756 00:48:07,260 --> 00:48:09,330 وقدمت نسخ منها لمبادلة. 757 00:48:09,330 --> 00:48:12,520 بحلول نهاية المبادلة، وألف وباء وبالفعل تم تبادل، 758 00:48:12,520 --> 00:48:16,120 ولكن بطبيعة الحال كان x و y، كما ناقشنا يوم الاثنين، لم يكن. 759 00:48:16,120 --> 00:48:19,940 لذلك أقترح هنا أن باللون الأخضر هذا هو في الواقع الحل هنا. 760 00:48:19,940 --> 00:48:22,640 وفعلا، اسمحوا لي أن التحرك نجوم بلادي فقط أن تكون متسقة 761 00:48:22,640 --> 00:48:24,440 على الرغم من ذلك، مرة أخرى، وظيفيا هذا لا يهم. 762 00:48:24,440 --> 00:48:28,730 في الأسابيع المقبلة سوف نشرح عندما والسبب في ذلك لا يهم. 763 00:48:28,730 --> 00:48:30,600 حتى الآن باللون الأخضر هو الحل. 764 00:48:30,600 --> 00:48:33,700 بصراحة، يبدو مجموعة كبيرة ميسييه لأن لدي كل هذه النجوم. 765 00:48:33,700 --> 00:48:35,380 اسمحوا لي أن أشير إلى شيء واحد. 766 00:48:35,380 --> 00:48:40,040 السطر العلوي هنا حيث تقول الباحثة ل* والباحث * ب 767 00:48:40,040 --> 00:48:42,820 تقوم أساسا نفس الشيء كما فعلت دائما. 768 00:48:42,820 --> 00:48:47,070 فإنه يعلن الوسائط أو معلمات 2 لمبادلة، 769 00:48:47,070 --> 00:48:49,940 يسمى الأول منها هو مؤشر على كثافة العمليات، 770 00:48:49,940 --> 00:48:53,100 والثاني منها هو مؤشر كثافة العمليات يسمى ب. 771 00:48:53,100 --> 00:48:55,770 الشيء الوحيد الجديد في هذه المرحلة هو أن هناك نجما هناك. 772 00:48:55,770 --> 00:48:59,340 >> ماذا يعني ذلك؟ A ليست الباحث، ليست ب الباحث. 773 00:48:59,340 --> 00:49:04,100 A هو عنوان لكثافة العمليات وب هو عنوان لكثافة العمليات المختلفة. 774 00:49:04,100 --> 00:49:06,980 هنا أسفل، وهذا هو المكان الذي يحصل لي من الاعتراف C مربكة. 775 00:49:06,980 --> 00:49:09,790 الآن نستخدمه نجم، لكنه لا يملك معنى مختلف في هذا السياق. 776 00:49:09,790 --> 00:49:13,150 لأننا لا يعلن المؤشرات ونحن هنا، 777 00:49:13,150 --> 00:49:15,500 نحن هنا يعتبر إلغاء مرجعية الأشياء. 778 00:49:15,500 --> 00:49:21,520 من الناحية الفنية كان الأمر كذلك، نجم في هذا السياق من السطر الأول والثاني، والثالث داخل المبادلة 779 00:49:21,520 --> 00:49:24,560 هي المشغل إلغاء مرجعية، وهو ما يعني فقط الذهاب إلى هناك. 780 00:49:24,560 --> 00:49:27,400 وذلك فقط بعد إصبعي السهم لح، 781 00:49:27,400 --> 00:49:31,100 * وسيلة الذهاب الى هذا العنوان وتجد لي الباحث أن هناك. 782 00:49:31,100 --> 00:49:34,250 * تعني ب الانتقال إلى العنوان وتمرير لي ما هو هناك. 783 00:49:34,250 --> 00:49:40,730 لذلك دعونا إعادة رسم الصورة من يوم الاثنين تستخدم الآن كومة من الإطارات، 784 00:49:40,730 --> 00:49:43,130 واحد أسفل التي ستكون الرئيسي، 785 00:49:43,130 --> 00:49:47,600 واحد من أعلى التي ستكون المبادلة 786 00:49:47,600 --> 00:49:50,880 بحيث يبدو عالمنا، تماما مثل الاثنين من هذا القبيل. 787 00:49:50,880 --> 00:49:53,620 هنا قطعة من الذاكرة التي الرئيسي هو الذهاب الى استخدامها. 788 00:49:53,620 --> 00:49:56,520 >> أذكر من يوم الاثنين إلى أن البرنامج كان فقط 2 المتغيرات، 789 00:49:56,520 --> 00:50:01,930 واحد يسمى X واحدة تسمى Y، وكنت قد وضعت الأرقام 1 و 2 هناك. 790 00:50:01,930 --> 00:50:06,580 الآن أنا عندما أدعو مبادلة مثل فعل يوم الاثنين، 791 00:50:06,580 --> 00:50:11,000 عندما كنت في السابق النسخة الحمراء من هذا البرنامج، والتي تبدو مثل هذا، 792 00:50:11,000 --> 00:50:17,470 حصلت معلمات 2، ألف وباء، وماذا نكتب هنا وهنا؟ 793 00:50:17,470 --> 00:50:21,160 فقط 1 و 2، ينسخ حرفيا من x و y. 794 00:50:21,160 --> 00:50:23,070 اليوم نغير ذلك. 795 00:50:23,070 --> 00:50:28,510 اليوم بدلا من تمرير رجات في البندين أ و ب ونحن في طريقنا لتمرير عناوين في 2. 796 00:50:28,510 --> 00:50:34,290 يحدث هذه العناوين للإشارة إلى رجات، ولكن هذه العناوين لا رجات أنفسهم. 797 00:50:34,290 --> 00:50:37,330 هم عناوين. انها مثل العنوان البريدي بدلا من ذلك. 798 00:50:37,330 --> 00:50:40,580 حتى الآن نحن بحاجة إلى إعطاء نفسي فقط بشيء من التفصيل على الشاشة. 799 00:50:40,580 --> 00:50:43,250 هذا هو جهاز الكمبيوتر الخاص بي الذاكرة كما انها كانت طوال اليوم. 800 00:50:43,250 --> 00:50:45,120 ونحن الآن بحاجة إلى بعض نظام ترقيم التعسفي. 801 00:50:45,120 --> 00:50:50,580 لذلك دعونا نقول فقط، فقط عن طريق الصدفة، أن هذا هو عنوان الذاكرة 123 و 124. 802 00:50:50,580 --> 00:50:55,660 دعنا نقول فقط هذا هو 125، وهذا هو 126، وهكذا دواليك، ولكن هذا التعسفي تماما. 803 00:50:55,660 --> 00:50:58,590 نحن بحاجة فقط بعض نظام الترقيم في ذاكرتي. 804 00:50:58,590 --> 00:51:04,030 حتى الآن عندما تخرجت بالفعل في x و y، وأنا لن تمر في x و y؛ 805 00:51:04,030 --> 00:51:08,400 أنا ذاهب لتمرير في العنوان البريدي، إذا جاز التعبير، من x و Y من 806 00:51:08,400 --> 00:51:11,870 بحيث ما يحصل المخزنة هنا وهنا ليس 1 و 2، 807 00:51:11,870 --> 00:51:16,030 ولكن إذا كنت يمكن أن نرى النص الذي قدمته الصغيرة، ويحصل على ما مر من هنا وهنا؟ 808 00:51:16,030 --> 00:51:23,340 [رد الطالب غير مسموع] >> بالضبط. يحصل هنا وضعت 123 124 يحصل على وضع هنا. 809 00:51:23,340 --> 00:51:28,910 >> الآن، لكنت النجم بهذه الطريقة السطر الأول جدا هنا حتى في القمة، 810 00:51:28,910 --> 00:51:34,340 برنامجي يعرف ذلك تماما 123 و 124، على الرغم من انهم من الواضح الأعداد الصحيحة 811 00:51:34,340 --> 00:51:40,160 أي أن الإنسان يمكن أن تلاحظ، ينبغي تفسيرها على أنها عناوين وعناوين رقمية. 812 00:51:40,160 --> 00:51:43,250 فهي ليست في حد ذاتها رجات، وانهم عناوين، 813 00:51:43,250 --> 00:51:46,120 وهذا لأنني قد وضعت صراحة النجوم هناك. 814 00:51:46,120 --> 00:51:51,360 حتى الآن في خط بلدي الأول والثاني، والثالث من التعليمات البرمجية الفعلية ما يحدث هنا؟ 815 00:51:51,360 --> 00:51:53,380 دعونا رسم بقية الصورة. 816 00:51:53,380 --> 00:51:56,980 هو تماما مثل TMP كان يوم الاثنين. خاص حول TMP شيئا. 817 00:51:56,980 --> 00:52:03,060 انها مجرد 32 بت متغير المحلية، وداخل أنني على ما يبدو تخزين قيمة * أ. 818 00:52:03,060 --> 00:52:08,580 الآن، إذا قلت للتو TMP = A، ما يمكن أن أضع هنا؟ >> [طالب] 123. 819 00:52:08,580 --> 00:52:10,370 123. ولكن هذا ليس ما أفعله. 820 00:52:10,370 --> 00:52:13,670 أنا أقول TMP = * أ. الوسائل نجوم الذهاب إلى هناك. 821 00:52:13,670 --> 00:52:19,370 حتى هنا هو، 123. كيف أذهب إلى هناك؟ مثل التظاهر هناك سهم. 822 00:52:19,370 --> 00:52:24,460 حسنا، هناك هو عليه، 1. وذلك ما يحصل المخزنة في TMP، على ما يبدو؟ فقط 1. 823 00:52:24,460 --> 00:52:29,620 لذلك وبعبارة أخرى، هو TMP * A، * وسيلة الانتقال إلى العنوان الموجود حاليا في، 824 00:52:29,620 --> 00:52:31,320 وهو على ما يبدو 123. 825 00:52:31,320 --> 00:52:33,910 >> حسنا، نحن هنا في موقع 123، أرى الرقم 1، 826 00:52:33,910 --> 00:52:35,670 لذلك أنا ذاهب الى وضع الرقم 1 هناك. 827 00:52:35,670 --> 00:52:39,020 الآن ماذا أفعل في السطر 2، * أ = ب *؟ 828 00:52:39,020 --> 00:52:44,570 هذا هو واحد أكثر من ذلك بقليل لأنه الآن يشارك ما هو؟ انها 123. 829 00:52:44,570 --> 00:52:50,220 * لذلك هو أين؟ الحق حيث كنت من قبل. لذلك يذهب هناك. حسنا. 830 00:52:50,220 --> 00:52:53,420 الآن، وأخيرا، وبعد ذلك سيبدأ هذا في النهاية إلى معنى، كما نأمل، 831 00:52:53,420 --> 00:53:00,280 * يعني ب ب ما في؟ 124. لذلك أنا بحاجة للذهاب إلى هناك، وهو 2. 832 00:53:00,280 --> 00:53:03,430 فماذا أضع أين؟ 833 00:53:03,430 --> 00:53:10,100 2 يذهب الى هنا ل* ب * يذهب الى أ. ولذا فإنني سوف نفعل ذلك. 834 00:53:10,100 --> 00:53:13,120 ويمكنك ان ترى بالفعل، ربما، أننا حتى أقرب بكثير 835 00:53:13,120 --> 00:53:17,710 لحل هذا الغباء، المشكلة بسيطة بشكل صحيح لأول مرة 836 00:53:17,710 --> 00:53:20,920 لأنه الآن لا يزال لدينا يتذكر ما كان X، 837 00:53:20,920 --> 00:53:23,230 لدينا 2 نسخ، باعتراف الجميع، من Y، 838 00:53:23,230 --> 00:53:25,850 ولكن الآن يقول السطر 3 * ب. 839 00:53:25,850 --> 00:53:31,080 حتى هنا ب. * تعني ب الذهاب إلى هناك. فأين هو موقع 124؟ 840 00:53:31,080 --> 00:53:35,560 انها على ما يبدو هنا. فماذا أضع هنا؟ من الواضح، TMP. 841 00:53:35,560 --> 00:53:39,600 حتى الآن أن أفعل هذا. لذلك أنا هنا لديك 1 و 2 هنا. 842 00:53:39,600 --> 00:53:43,560 والآن ماذا عن كل هذا، و123، 124، و 1 في؟ 843 00:53:43,560 --> 00:53:47,910 في أقرب وقت مع عودة المبادلة، هذه الذاكرة هو جيدة مثل فقدان 844 00:53:47,910 --> 00:53:51,070 لأن بمجرد عودة مبادلة، ونظام التشغيل 845 00:53:51,070 --> 00:53:54,190 حر في استخدام هذه الذاكرة مرة أخرى في المستقبل. 846 00:53:54,190 --> 00:53:58,870 المعلومات الرئيسية في الذاكرة في الجزء السفلي من هذا المكدس يسمى العصي حولها. 847 00:53:58,870 --> 00:54:01,470 >> وهكذا أصبح لدينا أخيرا الآن نسخة العمل. 848 00:54:01,470 --> 00:54:06,310 اسمحوا لي ان اذهب الى swap.c، وتلاحظ ما يلي. 849 00:54:06,310 --> 00:54:11,280 في الجزء العلوي من البرنامج لقد قمت بتغيير النموذج الباحث ان اكون * لوالباحث * ب. 850 00:54:11,280 --> 00:54:15,000 وبالتالي فإن الشيء الوحيد الذي تغير للذهاب من اللون الأحمر، الذي كان سيئا، إلى اللون الأخضر، وهو أمر جيد، 851 00:54:15,000 --> 00:54:17,350 وأضفت هذه النجوم اليوم. 852 00:54:17,350 --> 00:54:21,520 ولكن بعد ذلك إلى هنا في مبادلة نفسها كان لي لنسخ ولصق فقط ما كان على الشريحة. 853 00:54:21,520 --> 00:54:24,140 لدي هنا نجم، نجمة هنا - الذي يتطابق مع النموذج - 854 00:54:24,140 --> 00:54:27,930 ثم كل هذه الأشياء الآن نجوم باستثناء TMP 855 00:54:27,930 --> 00:54:30,680 لأن استخدام متغير مؤقت، لا يوجد شيء جديد هناك. 856 00:54:30,680 --> 00:54:33,040 أنا فقط بحاجة التخزين المؤقت لكثافة العمليات. 857 00:54:33,040 --> 00:54:34,820 لذلك نحن لسنا بحاجة إلى نجم هناك. 858 00:54:34,820 --> 00:54:39,310 نحن بحاجة فقط للنجم حتى نتمكن من عبور هذا النوع من الحدود التعسفي 859 00:54:39,310 --> 00:54:42,900 بين هذه الأطر 2 في ذاكرة الكمبيوتر الخاص بي. 860 00:54:42,900 --> 00:54:45,630 لكن شيئا واحدا يجب أن يتغير مشاركة، وكنت قد لمحت بالفعل و. 861 00:54:45,630 --> 00:54:48,810 ما الخط الآخر يختلف من الواضح الآن؟ >> [طالب] & X. 862 00:54:48,810 --> 00:54:53,270 >> نعم، 25 ذلك هو السطر الأخير من التعليمات البرمجية ولست بحاجة لتغيير لهذا العمل. 863 00:54:53,270 --> 00:54:58,360 وقبل أسبوع وحتى يوم الاثنين السطر 25 يشبه هذا، مبادلة X و Y، 864 00:54:58,360 --> 00:55:02,020 وكانت مكسورة فقط هذا لأنه إذا كنت أقول المبادلة (X، Y) 865 00:55:02,020 --> 00:55:05,660 انك تعطي نسخا من x و y لمبادلة، فإنه يفعل الشيء لها، 866 00:55:05,660 --> 00:55:09,080 ولكن كنت في الواقع أبدا تغيير x و y نفسها. 867 00:55:09,080 --> 00:55:12,880 لذلك حتى لو كنت لم أر قط قبل هذه الشخصية مع العطف في التعليمات البرمجية، 868 00:55:12,880 --> 00:55:15,860 اتخاذ مجرد تخمين. ماذا تفعل العطف، على ما يبدو؟ 869 00:55:15,860 --> 00:55:17,890 [طالب] تحيط العنوان. تحيط >> العنوان. 870 00:55:17,890 --> 00:55:21,160 لذلك يقول العلامة تعطيني عنوان X. 871 00:55:21,160 --> 00:55:25,590 الذي يعرف أين هو؟ فإنه يحدث أن تكون 123. لا يهمني. فقط أعطني عنوان X. 872 00:55:25,590 --> 00:55:28,340 وY يعني أن تعطيني عنوان ذ. 873 00:55:28,340 --> 00:55:34,450 وعند هذه النقطة قصة يتسق تماما مع الصورة ضعنا قبل لحظة. 874 00:55:34,450 --> 00:55:38,310 >> ولذا فإنني سوف أعترف المؤشرات، وبالتأكيد بالنسبة لي عندما بدأت لأول مرة تعلم هذه، 875 00:55:38,310 --> 00:55:40,570 كانت بالتأكيد واحدة من أصعب الأمور أن التفاف حول ذهني. 876 00:55:40,570 --> 00:55:43,760 ولكن ندرك، لا سيما ونحن الاستمرار في اللعب مع هذه الأنواع من الأشياء، 877 00:55:43,760 --> 00:55:48,030 إذا كنت كسر عليه لفرز هذه بسيطة السوبر رتيبا فكريا المشاكل 878 00:55:48,030 --> 00:55:52,270 من مجرد الانتقال الأرقام حول، الإجابة على الكثير من الارتباك مع مؤشرات 879 00:55:52,270 --> 00:55:56,590 يمكن حقا أن تستمد من هذه الآليات الأساسية للغاية. 880 00:55:56,590 --> 00:55:59,070 وهنا عنوان. الذهاب إلى هناك مع النجم. 881 00:55:59,070 --> 00:56:03,830 أو العكس، وهنا العطف. معرفة ما هو في الواقع عنوان. 882 00:56:03,830 --> 00:56:06,270 حسنا. 883 00:56:06,270 --> 00:56:09,000 فأين هو كل من هذه الذاكرة يأتي من؟ 884 00:56:09,000 --> 00:56:12,360 لقد رسم لنا هذه الصورة عدة مرات، وأظل واعد سنعود إليها، 885 00:56:12,360 --> 00:56:14,920 ولكن هنا هو تمثيل ذاكرة الكمبيوتر 886 00:56:14,920 --> 00:56:17,420 وهذا أكثر من ذلك بقليل وصفت من السبورة لدينا هنا هو. 887 00:56:17,420 --> 00:56:21,590 الجزء في أعلى النص يمثل ما فيما يتعلق برنامجك؟ 888 00:56:21,590 --> 00:56:26,090 [رد الطالب غير مسموع] >> عذرا؟ أقول مرة أخرى. 889 00:56:26,090 --> 00:56:28,660 [طالب] البرنامج الفعلي. البرنامج الفعلي >>. 890 00:56:28,660 --> 00:56:32,430 >> وبالتالي فإن ضجيج و 0s 1s التي قد جمعت بعد كتابة رمز C ثم تشغيل 891 00:56:32,430 --> 00:56:35,910 وينتهي توليد و 0s 1s المطاف الحصول على مدسوس هناك في الذاكرة 892 00:56:35,910 --> 00:56:38,570 لأن عند النقر المزدوج على أيقونة على جهاز ماكنتوش أو كمبيوتر شخصي 893 00:56:38,570 --> 00:56:43,010 أو تشغيل أمر مثل ماريو في موجه الخاص بك، الخاصة بك و0S 1S من القرص 894 00:56:43,010 --> 00:56:45,700 الحصول على تحميل في الذاكرة بحيث يمكن للكمبيوتر التلاعب بها 895 00:56:45,700 --> 00:56:47,540 وتنفيذها بسرعة أكبر. 896 00:56:47,540 --> 00:56:50,880 البيانات والبيانات تهيئة ذلك غير مهيأ، فإننا لن نتحدث كثيرا عن تلك، 897 00:56:50,880 --> 00:56:52,420 ولكن هذه هي مجرد المتغيرات العالمية. 898 00:56:52,420 --> 00:56:54,710 يعني تهيئة المتغيرات العالمية الذي أعطيته لقيم؛ 899 00:56:54,710 --> 00:56:59,300 غير مهيأ يعني المتغيرات العالمية التي لم تعط حتى الآن إلى القيم. 900 00:56:59,300 --> 00:57:01,900 ثم هناك هذه متغيرات البيئة التي سوف موجة تماما في يدي، 901 00:57:01,900 --> 00:57:04,860 لكنهم هناك ويقوم بتخزين أشياء مثل اسم المستخدم الخاص بك 902 00:57:04,860 --> 00:57:08,090 ونوع آخر من تفاصيل انخفاض مستوى. 903 00:57:08,090 --> 00:57:12,880 لكن عصيرا قطعة من تخطيط الذاكرة الخاصة بك هو هذا الشيء يسمى كومة كومة ولل. 904 00:57:12,880 --> 00:57:17,470 المكدس مرة أخرى، أن تكون واضحة، هي ذاكرة الذي يتم استخدامه كلما دعت الوظائف، 905 00:57:17,470 --> 00:57:19,710 كلما كانت هناك متغيرات المحلية 906 00:57:19,710 --> 00:57:22,120 وكلما كان هناك يجري تمرير معلمات حولها. 907 00:57:22,120 --> 00:57:24,490 كل ذلك يحدث في المكدس. 908 00:57:24,490 --> 00:57:29,570 كومة نحن لم نتحدث عنها، ولكن اتخاذ تخمين الذي يستخدم الكومة. 909 00:57:31,120 --> 00:57:32,690 مجرد قطعة مختلفة من الذاكرة. 910 00:57:32,690 --> 00:57:36,620 يحدث التي يمكن استخلاصها هنا في الأعلى، ولكن هذا التصويرية اتفاقية التعسفي. 911 00:57:36,620 --> 00:57:41,670 من الذي على ما يبدو تم استخدام الذاكرة من كومة لأسابيع؟ 912 00:57:41,670 --> 00:57:44,830 انه من الناحية الفنية ولكن كنت غير مباشرة. >> [طالب] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString وmalloc. حتى هنا الفرق الأساسي. 914 00:57:47,950 --> 00:57:51,300 >> تعرف على مدى الاسابيع القليلة الماضية انه اذا كنت في حاجة الذاكرة، يعلن مجرد متغير. 915 00:57:51,300 --> 00:57:54,560 إذا كنت في حاجة الكثير من الذاكرة، تعلن مجموعة داخل حق وظيفة الخاص بك. 916 00:57:54,560 --> 00:57:59,620 ولكن المشكلة التي تواجه كنا حافظ هو إذا قمت بتعريف المتغيرات محليا داخل من الوظائف، 917 00:57:59,620 --> 00:58:05,340 بمجرد أن ترجع الدالة، فإن ما يحدث لذكرى تلك المتغيرات و؟ 918 00:58:05,340 --> 00:58:09,620 مجرد نوع من انها لم تعد لك، أليس كذلك؟ يختفي فقط نوع من الناحية النظرية. 919 00:58:09,620 --> 00:58:13,950 ما زال هناك جسديا، ولكن من الواضح أنه لم يعد حقك في استخدام. 920 00:58:13,950 --> 00:58:17,160 وهذه مشكلة من الواضح إذا كنت تريد أن تكتب وظائف في الحياة 921 00:58:17,160 --> 00:58:20,440 في الواقع أن تخصيص الذاكرة ولا يعيدها على الفور. 922 00:58:20,440 --> 00:58:24,180 مثال على ذلك: الغرض GetString في الحياة هو أن ليس لديهم فكرة مسبقا 923 00:58:24,180 --> 00:58:26,390 كيف كبيرة من سلسلة انا ذاهب الى اكتب على لوحة المفاتيح، 924 00:58:26,390 --> 00:58:30,390 ولكن انها حصلت على أن تكون قادرة على تخصيص ذاكرة لعقد ديفيد أو مرحبا 925 00:58:30,390 --> 00:58:32,860 أو مقال كله أن المستخدم قد كتبته فيه. 926 00:58:32,860 --> 00:58:35,280 لذلك تم استخدام GetString malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc ذلك يجب استخدام المكدس لا؛ 928 00:58:38,910 --> 00:58:40,770 بدلا من ذلك انها تستخدم هذا الشيء يسمى الكومة. 929 00:58:40,770 --> 00:58:44,430 لا يوجد شيء مختلف عن الذاكرة. انها ليست أسرع أو أبطأ أو أي شيء من هذا القبيل. 930 00:58:44,430 --> 00:58:46,570 انها فقط جسديا في موقع مختلف. 931 00:58:46,570 --> 00:58:50,120 >> لكن القاعدة هي أن الذاكرة هذا ما تخصيصها على كومة 932 00:58:50,120 --> 00:58:56,180 لن تؤخذ بعيدا عنك حتى استدعاء - اتخاذ تخمين - مجانا. 933 00:58:56,180 --> 00:59:00,510 على النقيض من ذلك، أي أن تسأل عن الذاكرة على كومة من خلال الإعلان مجرد مجموعة 934 00:59:00,510 --> 00:59:03,320 أو الإعلان عن متغير مثل الذي نقوم به لمدة أسابيع، 935 00:59:03,320 --> 00:59:05,640 أن افتراضيا ينتهي على المكدس. 936 00:59:05,640 --> 00:59:09,550 وأن يعمل كبيرة 90٪ من الوقت، ولكن في تلك المناسبات النادرة 937 00:59:09,550 --> 00:59:12,470 حيث تريد تخصيص الذاكرة والاحتفاظ بها حولها، 938 00:59:12,470 --> 00:59:14,730 فأنت بحاجة إلى استخدام دالة مثل malloc. 939 00:59:14,730 --> 00:59:19,370 وقد استخدمنا أو وظيفة مثل GetString، والذي بدوره يستخدم malloc. 940 00:59:19,370 --> 00:59:23,300 دعونا نرى أين هذا قد كسر ثم أخذ نظرة خاطفة على Binky. 941 00:59:23,300 --> 00:59:25,820 سوف نعود إلى ذلك في المستقبل. 942 00:59:25,820 --> 00:59:29,270 هنا برنامج سوبر البسيطة التي في خطوط 2 الأولى يفعل ما؟ 943 00:59:29,270 --> 00:59:33,460 في اللغة الإنجليزية، ماذا هذه أول 2 الأسطر من التعليمات البرمجية داخل تفعل الرئيسية؟ 944 00:59:33,460 --> 00:59:35,600 [رد الطالب غير مسموع] 945 00:59:35,600 --> 00:59:37,880 الحذر. لا تعطيني عنوان X أو Y. 946 00:59:37,880 --> 00:59:41,840 [طالب] يعطي مؤشرات إلى رجات. جيد >>. تعطي مؤشرات لي 2 إلى أعداد صحيحة. 947 00:59:41,840 --> 00:59:45,130 وبعبارة أخرى، وإعطاء لي 2 قطع من الذاكرة التي أظل الرسم اليوم، 948 00:59:45,130 --> 00:59:46,950 على الرغم من مسح I عليه الآن، والساحات. 949 00:59:46,950 --> 00:59:50,000 دعا أحد أن يعطي لي 2 قطع من الذاكرة، واحدة تسمى X، Y - 950 00:59:50,000 --> 00:59:54,320 دعا في وقت سابق قلت لهم العلمية والتكنولوجية - وما هو نوع من الذاكرة التي قطعة؟ 951 00:59:54,320 --> 00:59:57,160 انه سيكون لتخزين عنوان. 952 00:59:57,160 --> 00:59:59,110 انها من نوع int *. 953 00:59:59,110 --> 01:00:01,630 >> وبالتالي فإن وجود عنوان الباحث في نهاية المطاف يعيش في x، 954 01:00:01,630 --> 01:00:03,860 وعنوان الباحث من العيش في نهاية المطاف في Y، 955 01:00:03,860 --> 01:00:08,460 ولكن في البداية، ما هو داخل x و y؟ من يدري؟ القمامة القيم. 956 01:00:08,460 --> 01:00:10,180 أنه ليس لديها ما تفعله مع المؤشرات. 957 01:00:10,180 --> 01:00:12,720 إذا كنا لم تضع شيئا هناك، من يدري ما هو في الواقع هناك؟ 958 01:00:12,720 --> 01:00:18,950 الآن، س. ماذا يحدث هنا؟ هذا هو شرعي الآن لأن x هو مؤشر. انها * INT. 959 01:00:18,950 --> 01:00:21,870 بحيث يعني أنني يمكن أن تضع في العاشر من عنوان بعض قطعة من الذاكرة. 960 01:00:21,870 --> 01:00:25,120 ماذا malloc العودة؟ الكمال، فإنها ترجع عناوين، 961 01:00:25,120 --> 01:00:28,510 عنوان البايت الأول في قطعة كاملة من الذاكرة. 962 01:00:28,510 --> 01:00:31,140 كم بايت وهذا تخصيص ما يبدو، على سبيل المثال، في الأجهزة؟ 963 01:00:31,140 --> 01:00:33,510 ما هو حجم وكثافة العمليات؟ 4. 964 01:00:33,510 --> 01:00:36,600 إذا كنت تعتقد مرة أخرى إلى الأسبوع 1، انها ليست سوبر المهم أن نتذكر دائما أن، 965 01:00:36,600 --> 01:00:38,870 لكن في هذه الحالة فإنه من المفيد معرفة، 4 بايت. 966 01:00:38,870 --> 01:00:41,770 لذلك هذا هو تخصيص 4 بايت على كومة 967 01:00:41,770 --> 01:00:46,110 وانها تعود عنوان أول واحد للي تعسفية. 968 01:00:46,110 --> 01:00:47,700 الآن، ما هو X تفعل؟ 969 01:00:47,700 --> 01:00:52,200 A * X = 42 ويفعل ماذا؟ 970 01:00:52,200 --> 01:00:57,150 إذا في هذه المرحلة من القصة لدينا X، والتي تبدو مثل هذا مع بعض القيمة القمامة، 971 01:00:57,150 --> 01:01:04,120 هذا هو الآن مع بعض ذ قيمة القمامة، والآن في السطر 3 لقد خصصت 4 بايت. 972 01:01:04,120 --> 01:01:06,950 هذه الصورة تبدو أساسا مثل هذا. 973 01:01:06,950 --> 01:01:12,010 أو بشكل أكثر تحديدا، إذا كان هذا هو عنوان التعسفي 123، هذا ما يبدو الآن قصتنا مثل. 974 01:01:12,010 --> 01:01:23,940 * X = 42 يعني ماذا نفعل الآن؟ وهذا يعني الذهاب الى ال 123 عنوان ووضع رقم 42 هناك. 975 01:01:23,940 --> 01:01:26,220 ولست بحاجة لرسم هذه الخطوط لأننا لا نفعل السلاسل. 976 01:01:26,220 --> 01:01:29,480 >> يجب أن كنت قد كتبت للتو من هذا القبيل، وفقط لأجل المظاهرة، 977 01:01:29,480 --> 01:01:33,240 42 كما نوعا من كثافة العمليات يستغرق الكثير من الفضاء، 4 بايت. 978 01:01:33,240 --> 01:01:35,960 بحيث ما حدث هناك، ولكن هناك مشكلة الآن. 979 01:01:35,960 --> 01:01:40,580 * ص = 13. ما الذي سيحدث هنا؟ 980 01:01:40,580 --> 01:01:46,470 المشكلة هي * Y في عالمنا مبسطة يعني فقط الانتقال إلى العنوان في ذ. 981 01:01:46,470 --> 01:01:48,590 ما في ذ؟ انها بعض القيمة القمامة. 982 01:01:48,590 --> 01:01:53,150 لذلك دعونا نفترض أن تلك القيمة هي 5551212 القمامة، شيء مجنون مثل هذا. 983 01:01:53,150 --> 01:01:56,750 * وسائل ذ تذهب لتناول 5551212. 984 01:01:56,750 --> 01:02:00,450 هذا مثل أكثر من هنا. كان غير موجود، على سبيل المثال. 985 01:02:00,450 --> 01:02:05,310 * حتى يحصل ذ 13 وسيلة أحاول أن ألفت هنا 13. لم يكن موجودا. 986 01:02:05,310 --> 01:02:08,790 لقد تجاوزت I الجزء من السبورة. ما يمكنني الحصول عليه؟ 987 01:02:08,790 --> 01:02:14,930 أن تجزئة رسالة خطأ خفي لأنني أسعى إلى وضعها في الذاكرة 988 01:02:14,930 --> 01:02:19,470 قيمة مثل 13 في المكان الذي لا وجود له. 989 01:02:19,470 --> 01:02:23,900 قد تبقى من برنامج العمل بخير، ولكن حتى هذه النقطة لم يكن. 990 01:02:23,900 --> 01:02:25,350 لذلك دعونا تحاول أن تقول هذه القصة. 991 01:02:25,350 --> 01:02:27,830 سوف نعود إلى ذلك مرة واحدة تحدثنا عن عرافة. 992 01:02:27,830 --> 01:02:30,290 دعونا نعود إلى هذا وتختتم مع هذا الشيء يسمى Binky، 993 01:02:30,290 --> 01:02:33,710 أذكر الذي هو أستاذ ستانفورد الجلوس في المنزل اللعب مع claymation، و 994 01:02:33,710 --> 01:02:36,380 ليحكي قصة البرنامج الذي بالضبط نفس. 995 01:02:36,380 --> 01:02:40,580 انها مجرد حوالي 3 دقائق طويلة. هنا لدينا Binky. 996 01:02:40,580 --> 01:02:45,030 [المتكلم الذكور على الفيديو] يا Binky، يستيقظون. حان الوقت للمتعة المؤشر. 997 01:02:45,030 --> 01:02:50,080 [Binky] ما هذا؟ التعلم عن مؤشرات؟ أوه، جودي! 998 01:02:50,080 --> 01:02:53,700 [المتكلم ذكر] حسنا، للبدء، أعتقد أننا ذاهبون في حاجة إلى مؤشرات زوجين. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] حسنا. هذا الرمز الذي يخصص 2 مؤشرات يمكن أن نشير إلى أعداد صحيحة. 1000 01:02:57,890 --> 01:03:02,220 [المتكلم ذكر] حسنا. حسنا، أرى مؤشرات 2، لكنهم لا يبدو أن تشير إلى أي شيء. 1001 01:03:02,220 --> 01:03:05,550 [Binky] وهذا الحق. في البداية، مؤشرات لا تشير إلى أي شيء. 1002 01:03:05,550 --> 01:03:09,270 وتسمى الأشياء التي تشير إلى pointees، ووضع لهم هي خطوة منفصلة. 1003 01:03:09,270 --> 01:03:12,330 [المتكلم ذكر] أوه، الحق، الحق. كنت أعرف ذلك. وpointees منفصلة. 1004 01:03:12,330 --> 01:03:15,630 إيه، لذلك كيف يمكنك تخصيص pointee؟ 1005 01:03:15,630 --> 01:03:21,510 [Binky] حسنا. هذا الرمز يخصص pointee جديدة عدد صحيح، ويحدد هذا الجزء العاشر للإشارة إلى ذلك. 1006 01:03:21,510 --> 01:03:23,500 [المتكلم ذكر] مرحبا، التي تبدو أفضل. 1007 01:03:23,500 --> 01:03:26,030 لذلك عليها أن تفعل شيئا. >> [Binky] حسنا. 1008 01:03:26,030 --> 01:03:30,300 وسوف أكون إلغاء مرجعية العاشر المؤشر لتخزين رقم 42 في pointee لها. 1009 01:03:30,300 --> 01:03:34,410 لهذه الخدعة سوف أحتاج عصا سحرية من بلدي يعتبر إلغاء مرجعية. 1010 01:03:34,410 --> 01:03:38,610 [المتكلم ذكر] عصا سحرية الخاص بك من يعتبر إلغاء مرجعية؟ هذا أمر عظيم. 1011 01:03:38,610 --> 01:03:44,230 [Binky] وهذا هو ما يبدو وكأنه رمز. أنا تأسيسها لأول مرة وعدد ... [ظهرت الصوت] 1012 01:03:44,230 --> 01:03:46,100 [المتكلم ذكر] يا نظرة، هناك تذهب. 1013 01:03:46,100 --> 01:03:50,990 القيام بذلك على إلغاء مرجعية على X يتبع سهم للوصول pointee والخمسين، 1014 01:03:50,990 --> 01:03:53,230 في هذه الحالة لتخزين 42 في هناك. 1015 01:03:53,230 --> 01:03:57,630 مهلا، حاول استخدامه لتخزين الرقم 13 من خلال مؤشر آخر، ذ. 1016 01:03:57,630 --> 01:04:03,250 [Binky] حسنا. سأذهب فقط أكثر من هنا إلى ص والحصول على الرقم 13 إقامة 1017 01:04:03,250 --> 01:04:08,360 ثم أخذ عصا ويعتبر إلغاء مرجعية من مجرد ... [صوت أزيز] قف! 1018 01:04:08,360 --> 01:04:10,980 [المتكلم ذكر] أوه يا، التي لا تعمل. 1019 01:04:10,980 --> 01:04:14,870 >> أقول، Binky، لا أعتقد يعتبر إلغاء مرجعية Y هو فكرة جيدة 1020 01:04:14,870 --> 01:04:17,880 لأن إنشاء pointee خطوة منفصلة 1021 01:04:17,880 --> 01:04:19,850 وأنا لا أعتقد أننا فعلنا من أي وقت مضى. 1022 01:04:19,850 --> 01:04:21,770 [Binky] هم، نقطة جيدة. 1023 01:04:21,770 --> 01:04:26,640 [المتكلم ذكر] نعم. خصصنا ذ مؤشر لكننا أبدا تعيينها للإشارة إلى pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] هم، ملاحظ جدا. 1025 01:04:28,780 --> 01:04:30,690 [المتكلم ذكر] مرحبا، كنت تبحث جيدة هناك، Binky. 1026 01:04:30,690 --> 01:04:34,160 يمكنك إصلاحه بحيث نقطة Y إلى pointee نفس X؟ >> [Binky] بالتأكيد. 1027 01:04:34,160 --> 01:04:37,100 سوف تستخدم عصا سحرية بلدي الإحالة المؤشر. 1028 01:04:37,100 --> 01:04:39,070 [المتكلم ذكر] هل هذا سيكون مشكلة مثل من قبل؟ 1029 01:04:39,070 --> 01:04:40,840 [Binky] لا، هذا لا تلمس pointees. 1030 01:04:40,840 --> 01:04:44,780 يتغير مؤشر واحد فقط للإشارة إلى شيء آخر نفس. [ظهرت الصوت] 1031 01:04:44,780 --> 01:04:48,570 [المتكلم ذكر] أوه، أرى. الآن نقطة Y لنفس المكان س. 1032 01:04:48,570 --> 01:04:51,140 انتظر ذلك. الآن يتم إصلاح ذ. أنه يحتوي على pointee. 1033 01:04:51,140 --> 01:04:54,520 لذلك يمكنك محاولة عصا من يعتبر إلغاء مرجعية مرة أخرى لإرسال أكثر من 13. 1034 01:04:54,520 --> 01:04:58,130 [Binky] اه، حسنا. يذهب هنا. [ظهرت الصوت] 1035 01:04:58,130 --> 01:05:01,250 [المتكلم ذكر] يا، أن ننظر في ذلك. يعتبر إلغاء مرجعية الآن يعمل على ذ. 1036 01:05:01,250 --> 01:05:05,200 ولأن المؤشرات وتقاسم أن أحد pointee، وكلاهما راجع 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] نعم، مشاركة. أيا كان. 1038 01:05:06,910 --> 01:05:08,880 >> لذلك نحن ذاهبون لتبديل أماكن الآن؟ 1039 01:05:08,880 --> 01:05:11,420 [المتكلم ذكر] يا نظرة، نحن في الخارج من الزمن. >> [Binky] ولكن - 1040 01:05:11,420 --> 01:05:13,880 [المتكلم ذكر] فقط تذكر القواعد المؤشر 3. 1041 01:05:13,880 --> 01:05:18,630 عدد 1، والهيكل الأساسي هو أن لديك مؤشر ويشير إلى أكثر من pointee. 1042 01:05:18,630 --> 01:05:23,120 لكن المؤشر وpointee منفصلة، ​​والخطأ المشترك هو إقامة المؤشر 1043 01:05:23,120 --> 01:05:25,680 ولكن أن ننسى أن يعطي هو pointee. 1044 01:05:25,680 --> 01:05:29,580 عدد 2، يعتبر إلغاء مرجعية مؤشر يبدأ من المؤشر ويلي سهم على مدى 1045 01:05:29,580 --> 01:05:31,060 للوصول pointee لها. 1046 01:05:31,060 --> 01:05:34,340 كما نعلم جميعا، فإن هذا يعمل فقط إذا كان هناك pointee، 1047 01:05:34,340 --> 01:05:36,460 أي نوع من يعود للحكم رقم 1. 1048 01:05:36,460 --> 01:05:39,870 الرقم 3، وتعيين مؤشر مؤشر يأخذ واحدة وتغييره 1049 01:05:39,870 --> 01:05:42,390 للإشارة إلى نفس pointee آخر المؤشر. 1050 01:05:42,390 --> 01:05:45,890 حتى بعد الإحالة، فإن المؤشرات 2 نقطة إلى pointee نفسه. 1051 01:05:45,890 --> 01:05:47,800 أحيانا يسمى هذا المشاركة. 1052 01:05:47,800 --> 01:05:50,910 >> وهذا كل ما في الامر حقا. وداعا وداعا الآن. 1053 01:05:50,910 --> 01:05:55,840 هذا هو Binky. هذا هو CS50. سنرى في الأسبوع القادم. [تصفيق] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]