DAVID مالان: مرحبا، و نرحب مرة أخرى إلى CS50. لذلك هذا هو نهاية الاسبوع الأربعة. إعلان واحد فقط الأول. وبالتالي فإن ما يسمى يوم الاثنين الخامس الخروج يوم الاثنين القادم. هذه هي الفرصة للتغيير من SAT / UNSAT إلى درجة إلكتروني، أو من بريد إلكتروني الصف SAT / UNSAT. بشكل مزعج، هذه العملية لا تتطلب التوقيع، لأن لديك لملء من أصل واحد من تلك الأشكال الوظيفة / قطرة الوردي. لأن من الناحية الفنية، وSAT / UNSAT الإصدار والإصدار إلكتروني الصف لديها أعداد كتالوج متميزة. ولكن ليست صفقة كبيرة. فقط يأتي لي أو لروب أو لورين في أي لحظة. أو مراسلتنا عبر البريد الإلكتروني إذا لم يكن لديك هذا النوع من الأوراق التي تحتاج إليها اليوم، ونحن سيكون المؤكد أن تساعدك على اتخاذ الرعاية من ذلك قبل يوم الاثنين. كل الحق، لذلك اليوم - في الواقع، هناك قليلا من صدى. يمكننا هجة لي أسفل قليلا؟ موافق. حتى اليوم، ونحن نقدم موضوعا المعروفة باسم المؤشرات. وأنا أعترف أن هذا هو واحد من موضوعات أكثر تعقيدا أننا نميل إلى تغطية في هذه الفئة، أو أي حقا دورة تمهيدية يستخدم C. ولكن تأخذ في كلمة بلدي لذلك، ولا سيما إذا عقلك يشعر أكثر قليلا عازمة اليوم وفي الأسابيع المقبلة. انها ليست ممثلة تحصل على أي أسوأ في هذه بل يعني فقط أن انها متطورة وخاصة الموضوع أن أعدك، بضعة أسابيع وبالتالي، سوف يبدو كل لافت للنظر جدا مباشرة في وقت لاحق. ما زلت أتذكر حتى يومنا هذا. كنت جالسا في قاعة الطعام إليوت، جالسا الى بلدي TF نيشات ميهتا، الذي كان مقيما في منزل إليوت. وبالنسبة لبعض السبب، وهذا الموضوع نقرات فقط. وهو ما يعني أنني كافحت جدا مع ذلك لبعض مقدار الوقت، لكنني وسوف أبذل قصارى جهدي للمساعدة على تجنب أي من هذه الصراع مع الموضوع الذي في نهاية المطاف هو قوي جدا. في الواقع، واحدة من المواضيع سنناقش في الأسابيع القادمة هو أن الأمن، وكيف يمكن في الواقع استغلال الآلات في الطرق التي لم يقصد. وعادة ما تكون تلك الاستغلال نتيجة الأخطاء، والأخطاء التي نحن جعل الناس من خلال عدم فهم بعض لتنفيذ الكامنة التفاصيل التي تتم عبر البرامج. الآن لجعل هذا تبدو أكثر المستخدم ودية، ظننت أنني كنت تلعب 10 معاينة الثاني من القليل من claymation الرقم اسمه بينكي الذين تم تقديمهم لل الحياة من صديق لنا في جامعة ستانفورد، أستاذ نيك Parlante. لذلك اسمحوا لي أن أقدم لكم هذا دعابة من بينكي هنا. [تشغيل الفيديو] يا، بينكي. يستيقظون. حان الوقت لمؤشر المرح. -ما هذا؟ تعلم عن المؤشرات؟ أوه، الجيد. [END تشغيل الفيديو] DAVID مالان: هذا هو ستانفورد علوم الكمبيوتر. أكثر من ذلك على أن المقبلة. [تصفيق] DAVID مالان: عذرا، نيك. لذلك أذكر أن آخر مرة لقد انتهى على هذا التشويق المثير حقا حيث هذه الوظيفة فقط لم تنجح. على الأقل بشكل حدسي، ورأى أنها مثل ذلك يجب أن تعمل. ببساطة مبادلة القيم من عددين. ولكن أذكر أننا عندما تطبع على القيم الأصلية في الرئيسي، واحدة و اثنين، وكانت لا تزال واحدة و اثنين واثنين لا واحد. لذلك اسمحوا لي التبديل في الواقع لأكثر من الأجهزة. وكتب أنا قليلا من التعليمات البرمجية في الهيكل العظمي تقدم هنا، حيث أزعم أن س سيكون 1، ص سيكون 2. وبعد ذلك بطباعة كل من لهم القيم مع الطباعة و. وبعد ذلك يدعون إلى هنا أن ونحن في طريقنا لمقايضتهم. تركت بقعة فارغة هنا بالنسبة لنا ل ملء اليوم في مجرد لحظة. ثم، انا ذاهب الى الادعاء بأن وقد تبادلت متغيرين. ثم انا ذاهب الى الطباعة بها مرة أخرى. وهكذا نأمل، وأنا يجب أن نرى 1، 2. 2، 1. هذا هو بسيط السوبر الهدف الآن. فكيف نذهب حول مبادلة متغيرين؟ كذلك إذا أقترح هنا أن هذه الكؤوس قد تمثل الذاكرة في جهاز الكمبيوتر. هذا هو لدغات قليلة، وهذا هو دغات قليلة أخرى. يمكن لدينا المتطوعين تأتي على ما يصل و مزيج لنا بعض المشروبات، وإذا مألوفا؟ تأتي على ما يصل. ما اسمك؟ JESS: جيس. DAVID مالان: جيس؟ تأتي على ما يصل، جيس. إذا كنت لا تمانع، لدينا لوضع جوجل الزجاج عليك حتى نتمكن خلد هذا. موافق، والزجاج. تسجيل الفيديو. وموافق، ونحن جيدة ل تذهب مع جيس هنا. حسنا. تشرفت بمقابلتك. ذلك ما أود أن تفعل هنا - إذا كنت تستطيع، بسرعة - يصب لنا فقط نصف كوب من البرتقال عصير ونصف كوب من الحليب، تمثل نحو فعال الأرقام من 1 في كوب واحد و 2 في الكأس الأخرى. هذه ستكون لقطات جيدة. JESS: آسف. DAVID مالان: لا، لا. انه موافق. لطيفة. كل الحق، لذلك لدينا أربعة بايت يستحق من عصير البرتقال. سنقوم يطلق عليه القيمة 1. الآن ما قيمته أربعة بايت من الحليب. سوف يطلق عليه القيمة 2. حتى x و y، على التوالي. كل الحق، وحتى الآن إذا كانت المهمة في متناول اليد - بالنسبة لك، جيس، أمام كل من زملائك - هو لمبادلة قيم x و y مثل أننا نريد عصير البرتقال في كأس الأخرى والحليب في هذه الكأس، وكيف قد كنت - قبل أن تفعل فعلا ذلك - تذهب عن القيام بذلك؟ موافق، قرار حكيم. لذلك تحتاج أكثر قليلا الذاكرة. لذلك دعونا تخصيص مؤقتة الكأس، اذا صح التعبير. والآن المضي قدما لمبادلة x و y. ممتازة. ذلك جيد جدا. شكرا جزيلا، جيس. تفضل. والهدايا التذكارية قليلا. حسنا، من الواضح، فكرة بسيطة عظمى. بديهية تماما أننا نحتاج قليلا المزيد من مساحة التخزين - في هذا النموذج، كوب - إذا كنا نريد فعلا أن مبادلة هذين المتغيرين. لذلك دعونا نفعل ذلك بالضبط. هنا حيث أنا في بين المطالبة أنا سيتم القيام ببعض مبادلة، وسوف أكون المضي قدما وتعلن درجة الحرارة. وأنا تعيينها على قدم المساواة، ويقول، خ. ثم انا ذاهب الى تغيير قيمة س مثلما فعلت مع جيس هنا الحليب وعصير البرتقال لتكون مساوية لذ. وانا ذاهب الى تغيير ذ لتكون مساوية ليست س، لأنه الآن سنكون عالقة في دائرة، وإنما مؤقت. حيث كنت مؤقتا - أو حيث جيس وضع عصير البرتقال مؤقتا قبل أن clobbering الكأس مع الحليب. لذلك اسمحوا لي الآن المضي قدما وجعل هذا. انه دعا noswap.c. والآن اسمحوا لي أن تشغيل أي المبادلة. والواقع أرى، وإذا كنت تعظيم و نافذة قليلا، أن x هو 1، ص 2. ثم x هو 2، ص 1. ولكن نذكر بأن يوم الاثنين فعلنا الأشياء بشكل مختلف قليلا حيث أنا بدلا من ذلك تنفيذ دالة مساعد، اذا صح التعبير، التي كانت باطلة في الواقع. دعوت ذلك المبادلة. أعطيته معلمتين، ودعوت لهم ودعوت لهم ب. بصراحة، أنا يمكن أن نسميها x و y. لا يوجد شيء وقف لي من القيام بذلك. لكنني أزعم أنها ثم غامضة قليلا. لأن استدعاء ليوم الاثنين بأننا ادعى أن هذه المعايير كانت نسخ من القيم تمريره. لذلك عبث فقط مع الخاص العقل، كما أعتقد، إذا كنت تستخدم بالضبط نفس المتغيرات. ولذا فإنني سوف ندعو لهم بدلا من وب، فقط من أجل الوضوح. ولكن يمكننا أن نطلق عليهم أكثر أي شيء نريده. وانا ذاهب لنسخ ولصق فعالية هذا الرمز من هناك أسفل إلى هنا. لأنني فقط رأيت أنه يعمل. ذلك أن في حالة جيدة جدا. وأنا أغير س ل، يا س إلى ذلك، بلدي لب وذ ذ بلدي لب. لذلك وبعبارة أخرى، نفس المنطق بالضبط. نفس الشيء بالضبط التي لم جيس. ثم شيء واحد يجب أن أقوم به حتى هنا، بطبيعة الحال، هو الآن استدعاء هذه وظيفة، أو استدعاء هذه الدالة. ولذا فإنني سوف استدعاء هذه الدالة مع اثنين المدخلات، x و y، وضرب حفظ. كل الحق، لذلك الأساس نفس الشيء. في الواقع، لقد ربما جعلت البرنامج تعقيدا لا داعي له من قبل كتابة وظيفة وهذا ما أخذ فقط نحو ستة أسطر من التعليمات البرمجية في حين أنا سابقا قد نفذت هذا في ثلاثة فقط. لذلك اسمحوا لي الآن المضي قدما وطبعة جديدة هذا، وجعل أي المبادلة. كل الحق، أنا ثمل هنا. هذا ينبغي أن يكون الخطأ التي قد نرى بشكل متزايد عادة ك برامج الحصول على أكثر تعقيدا. ولكن هناك حل سهل. اسمحوا لي أن انتقل مرة أخرى هنا. وما هو الخطأ الأول اراه؟ الإعلان الضمني. ماذا تشير عادة؟ أوه، لقد نسيت النموذج. لقد نسيت لتعليم المترجم أن مبادلة يجري في الوجود على الرغم من انه لا وجود في بداية جدا من البرنامج. لذلك أنا فقط أريد أن أقول باطلة، المبادلة، كثافة، وكثافة العمليات ب، منقوطة. لذلك أنا لن reimplement ذلك. ولكن الآن أنه يطابق ما هو هنا. ولاحظ أن عدم وجود فاصلة منقوطة هنا، والتي ليس من الضروري عندما تنفيذ. لذلك اسمحوا لي إعادة تشكيل هذا، وجعل أي المبادلة. شكل أفضل بكثير. تشغيل أي المبادلة. واللعنة. الآن نعود حيث كنا يوم الاثنين، حيث الشيء لم مبادلة. وما هو التفسير بديهية لماذا هذا هو الحال؟ نعم؟ الطالب: [غير مسموع]. DAVID مالان: بالضبط. حتى أ و ب هي نسخ من x و y. في واقع الأمر، في أي وقت كنت قد تم استدعاء دالة حتى الآن أن يمر المتغيرات مثل رجات - كما يتوقع مبادلة هنا - تم يا رفاق يمر في النسخ. الآن وهذا يعني أنه يأخذ قليلا من الوقت، جزء من الثانية، ل الكمبيوتر لنسخ بت من واحد متغير في بت آخر. ولكن هذا ليس مثل هذه الصفقة الكبيرة. ولكنهم مع ذلك نسخة. وحتى الآن، في سياق المبادلة، أنا في الواقع بنجاح تغيير أ و ب. في الواقع، دعونا نفعل سريعة الاختيار التعقل. الطباعة و من هو٪ ط، سطر جديد. ودعونا سد العجز في. الآن دعونا نفعل نفس الشيء مع ب. ودعونا نفعل نفس الشيء هنا. والآن، اسمحوا لي أن نسخ نفس المنوال مرة أخرى في الجزء السفلي من وظيفة بعد بلدي ثلاثة أسطر من اهتمام قد أعدمت، و طباعة وب مرة أخرى. حتى الآن دعونا جعل هذا، وجعل أي المبادلة. اسمحوا لي أن المحطة نافذة ل أطول قليلا، بحيث يمكننا أن نرى أكثر من ذلك في آن واحد. وتشغيل أي المبادلة. x هو 1، ص 2. و1، ب 2. وبعد ذلك، هو 2، ب 1. لذلك يعمل، تماما مثل جيس فعلت هنا داخل المبادلة. ولكن بطبيعة الحال، انها ليس لها تأثير على المتغيرات في الرئيسية. حتى رأينا خدعة حيث نحن يمكن إصلاح هذا، أليس كذلك؟ عندما كنت تواجه هذا الفحص المسألة، هل يمكن أن مجرد البونت وجعل س و y أي نوع من المتغيرات بدلا من ذلك؟ هل يمكن جعلها عالمية. وضعها في أعلى جدا من الملف كما فعلنا، حتى في لعبة 15. نستخدم متغير عمومي. ولكن في سياق اللعبة 15، فمن المعقول أن يكون لديك العالمية متغير يمثل المجلس، وذلك لأن مجمل 15.c هو كل شيء حول تنفيذ تلك اللعبة. هذا ما كان الملف موجودا للقيام به. ولكن في هذه الحالة هنا، وأنا استدعاء مبادلة وظيفة. أريد أن مبادلة اثنين من المتغيرات. وينبغي أن تبدأ في الشعور فقط قذرة إذا الحل لجميع شركائنا مشاكل عند واجهتنا نطاق المسائل هو جعله العالمية. لأن بسرعة كبيرة برنامجنا ستصبح فوضى تماما. وفعلنا ذلك بشكل مقتصد جدا ونتيجة لذلك في 15.c. ولكن اتضح أن هناك أفضل طريقة تماما. اسمحوا لي أن أعود فعلا وحذف طباعة و ل، فقط لتبسيط هذه التعليمات البرمجية. واسمحوا لي أن أقترح أن هذا، في الواقع، هو سيئ. ولكن إذا كنت بدلا من ذلك إضافة في بعض العلامات النجمية والنجوم، ويمكنني أن بدلا من ذلك تحويل هذه يعمل في واحدة وهذا التشغيلية في الواقع. لذلك دعونا لي أن أعود هنا وأعترف قائلا العلامات النجمية هي دائما صعبة، لذلك أنا أقول نجوم. سوف فيس فقط حتى أن واحدا. حسنا. والآن، ما أنا ذاهب القيام بدلا من ذلك؟ لذلك في المقام الأول، وأنا ذاهب إلى تحديد أنه بدلا من تمرير الباحث في وظيفة المبادلة، وأنا بدلا من ذلك من سيقول نجمة كثافة العمليات. الآن، ماذا تشير النجم؟ هذا هو أن فكرة المؤشر الذي بينكي، وكان الطابع claymation في اشارة الى لحظة مضت. حتى إذا قلنا نجمة كثافة، ومعنى هذا الآن هو أن لن يكون مرت من قبل في قيمته. انها لن المراد نسخها فيه. بدلا من ذلك، هو عنوان سيتم تمريره. لذلك نذكر بأن داخل جهاز الكمبيوتر الخاص بك هو مجموعة كاملة من الذاكرة، وإلا المعروفة باسم ذاكرة الوصول العشوائي. وأن ذاكرة الوصول العشوائي هو مجرد مجموعة كاملة من وحدات البايت. حتى إذا كان لديك ماك أو جهاز الكمبيوتر لديه اثنين غيغا بايت، لديك 2 مليار بايت من الذاكرة. الآن دعونا نفترض أن مجرد فقط ل ابقاء الامور لطيف ومنظم، ونحن تعيين عنوان - عدد - إلى كل بايت من ذاكرة الوصول العشوائي في جهاز الكمبيوتر الخاص بك. البايت الأولى من تلك 2 مليار هي الرقم صفر. واحد القادم هو رقم واحد بايت، عدد اثنين، كل وسيلة على ما يصل، نقطة نقطة نقطة، إلى نحو 2 مليار دولار. حتى تتمكن من عدد من وحدات البايت من الذاكرة في جهاز الكمبيوتر الخاص بك. لذلك دعونا نفترض أن هذا ما نعنيه عنوان. لذلك عندما أرى كثافة النجوم لذلك، ما يحدث لتمريرها إلى مبادلة الآن هو عنوان. لا قيمة لها، ولكن أيا كان لها البريدية العنوان هو، إذا جاز التعبير - موقعه في ذاكرة الوصول العشوائي. وعلى نحو مماثل للب، انا ذاهب أن أقول نفس الشيء. الباحث، نجمة، ب. بوصفها جانبا، من الناحية الفنية النجم يمكن أن تذهب في أماكن أخرى. ولكننا سوف توحيد على النجم يجري بجانب نوع البيانات. ذلك يعني توقيع مبادلة الآن، أعطني عنوان لكثافة العمليات، والدعوة ان العنوان. وتعطيني عنوان آخر ل الباحث وندعو هذا العنوان ب. ولكن الآن قانون بلدي هنا يجب أن يتغير. لأنه إذا أعلن درجة الحرارة وكثافة العمليات - الذي لا يزال من نوع int - لكنني في ذلك تخزين لذلك، أي نوع من القيمة؟ أن تكون واضحة، أنا مع وضع ل رمز كما هو مكتوب الآن؟ أنا أضع الموقع في. ولكن أنا لا يهمني موقع الآن، أليس كذلك؟ درجة الحرارة موجود فقط كوب الثالث جيس " كانت موجودة، لغرض ما؟ لتخزين قيمة. الحليب أو عصير البرتقال. لا في الواقع لتخزين عنوان أي من تلك الأشياء، التي يشعر لا معنى يذكر في هذا حقيقي السياق العالمي على أية حال. ذلك حقا، ما أريد أن أضع في درجة الحرارة ليس عنوان لذلك، ولكن محتويات. لذلك إذا كان هو رقم مثل 123، وهذا هو البايت 123 من الذاكرة أن مجرد يحدث أن تكون القائمة بالاحتلال، أن قيمة في يحدث أن تكون القائمة بالاحتلال. إذا كنت تريد أن تذهب إلى هذا العنوان، أريد أن أقول لنجمة. وبالمثل، إذا كان لي أن تغيير ما هو على العنوان لذلك، يمكنني تغيير هذه لبدء. إذا كنت تريد تخزينها في ما هو في موقع لمع ما هو في الموقع في ب، ب نجمة نجوم. لذلك باختصار، حتى لو كان هذا ليست واردة غرق في حتى الآن - وأنا لن نتوقع أنه سيكون سريع جدا - ندرك أن كل ما أفعله هو التقديم هذه النجوم لمتغيرات بلدي، قائلا ليس لانتزاع القيم. لا تغيير القيم. ولكن بدلا من ذلك، انتقل إلى هذه العناوين والحصول على قيمة. تذهب إلى هذا العنوان والتغيير قيمة هناك. وحتى الآن اسمحوا لي أن انتقل مرة أخرى إلى أعلى، فقط لإصلاح هذا الخط هنا، ل تغيير النموذج الأولي للمباراة. لكنني الآن بحاجة إلى فعل شيء واحد آخر. حدسي، وإذا كنت قد قمت بتغيير أنواع من الحجج التي يتوقع المبادلة، ماذا أحتاج ل تغيير في قانون بلدي؟ عندما أدعو المبادلة. لأن الحق الآن، ماذا صباحا أنا لا تزال تمر لمبادلة؟ س قيمة وقيمة y، أو الحليب وعصير البرتقال. ولكن أنا لا أريد أن نفعل ذلك. أنا بدلا تريد تمرير في ماذا؟ موقع س و موقع ذ. ما هي العناوين البريدية الخاصة بهم، إذا جاز التعبير. حتى للقيام بذلك، وهناك العطف. العطف نوع من يبدو وكأنه عنوان. حتى ن، العطف، عنوان من س، وعنوان ذ. لذلك فمن المتعمد التي نستخدمها اقحام عند استدعاء الدالة، وعندما يعلن نجوم وعندما تنفيذ الدالة. ومجرد التفكير في مثل العطف عنوان المشغل، ونجم مثل الذهاب إلى هناك المشغل - أو أكثر بشكل صحيح، المشغل إلغاء مرجعية. ذلك أن مجموعة كبيرة من مجرد كلمات ل أقول ذلك الآن، ونأمل، مبادلة يجري أن يكون صحيحا. اسمحوا لي المضي قدما وجعل - دعونا فعلا إعادة تسمية الملف، لئلا هذا البرنامج لا يزال يتم استدعاء أي المبادلة. أزعم أننا سوف يطلق عليه swap.c الآن. لذا تأكد، المبادلة. نقطة، مائل، المبادلة. والآن بالفعل، س 1، ص 2. ومن ثم، س 2، ص هو واحد. حسنا دعونا نرى ما اذا كنا لا نستطيع أن نفعل هذا مختلف قليلا على ما هو يجري هنا. أولا، اسمحوا لي أن التكبير في موقعنا رسم الشاشة هنا. واسمحوا لي أن أقترح للحظة - و كلما أود أن ألفت هنا سوف تكون معكوسة حتى الآن هناك - اسمحوا لي أن أقترح أن وهنا مجموعة كاملة من الذاكرة، أو ذاكرة الوصول العشوائي، داخل جهاز الكمبيوتر الخاص بي. وهذا سوف يكون عدد دغة، دعنا نقول، 1. وسوف يكون هذا بايت رقم 2. وسأفعل في مجمله مجموعة أكثر من ذلك، و ثم حفنة من نقطة نقطة نقطة ل تشير إلى أن هناك 2 مليار دولار من هذه الأشياء. 4، 5، وهكذا دواليك. لذلك هناك وحدات البايت الخمسة الأولى من ذاكرة جهاز الكمبيوتر الخاص بي. كل الحق؟ عدد قليل جدا من 2 مليار دولار. ولكن الآن انا ذاهب الى اقتراح ما يلي. انا ذاهب الى أقترح أن يتم الانتقال إلى خ تخزين رقم 1، و y هو ذاهب لتخزين عدد 2. واسمحوا لي الآن المضي قدما ويمثل هذه القيم على النحو التالي. دعونا نفعل ذلك على النحو التالي. أعطني ثانية واحدة فقط. ثانية واحدة. موافق. اريد ان يكون هذا قليلا - دعونا نفعل ذلك مرة أخرى. خلاف ذلك انا ذاهب الى استخدام و أرقام نفسه، عن غير قصد، عدة مرات. وذلك فقط لذلك لدينا أرقام مختلفة للحديث عن، دعونا نسمي هذا البايت عدد 123، 124، 125، 126، ونقطة نقطة نقطة. واسمحوا لي الآن أن يدعي انا ذاهب الى وضع القيمة 1 هنا، وقيمة 2 هنا، والمعروف باسم x و y. لذلك مجرد أن ذلك يحدث هذا هو العاشر، وهذا هو ذ. وفقط من خلال بعض فرصة عشوائية، و الكمبيوتر، نظام التشغيل، حدث لوضع x في الموقع عدد 123. وانتهت ذ تصل في موقع 124 - اللعنة. وأرجو أن يكون هذا ثابت. يا رجل، هل حقا تريد أن تفعل هذا؟ نعم، أريد أن إصلاح هذه و ب الصحيحة حول هذا اليوم. آسف، جديدة في هذا. 127، 131، وأنا لا أريد أن يكون هذا معقدة، ولكن لماذا لم أغير أرقام هناك؟ لأنني أريد أن رجات ل يكون في الواقع أربعة بايت. لذلك دعونا نكون السوبر الشرج حول هذا الموضوع. بحيث إذا 1 يحدث لمعالجتها 123، 2 ستكون في العنوان 127 لأنه فقط 4 اعفي بعيدا. هذا كل شيء. ونحن سوف ننسى كل من عناوين أخرى في العالم. بحيث x هو في موقع 123، ذ هو في موقع 127. والآن، ماذا يمكنني في الواقع تريد أن تفعل؟ عندما أدعو مبادلة الآن، ما هو يحدث فعلا؟ حسنا، عندما أدعو المبادلة، وأنا يمر في عنوان x و عنوان ذ. هكذا على سبيل المثال، إذا كانت هذه قطعتين من الورق تمثل الآن اثنين الحجج أ و ب لمبادلة، ما أنا أريد أن أكتب في الأول من هذه، الذي أنا ذاهب لاستدعاء الرجوع إليها بوصفها؟ بالضبط، 123. حتى هذا الادعاء الأول هو. هذه هي المعلمة. أنا أضع عنوان x في هناك. ما هذا؟ ما هذا؟ لا، لا. وهذا موافق. لا تزال جيدة، لا تزال جيدة. لذلك هذا هو. والآن على القطعة الثانية من الورق، هذه ستكون ب، وما أنا ستكون الكتابة على هذه قطعة من الورق؟ 127. وبالتالي فإن الشيء الوحيد الذي تغير منذ لدينا قول السابقة من هذه القصة، بدلا من حرفيا 1 و 2، وأنا سوف تمر في 123 و 127. وأنا الآن بصدد وضع هذه داخل من هذا المربع، كل الحق؟ بحيث الصندوق الأسود يمثل الآن وظيفة المبادلة. وفي الوقت نفسه، دعونا الآن شخص تنفيذ وظيفة المبادلة. سيكون شخص ما هنا ترغب في التطوع؟ تأتي على ما يصل. ما اسمك؟ تشارلي. كل الحق، تشارلي. تأتي على ما يصل. حتى تشارلي سوف تلعب دور الصندوق الاسود لدينا. وتشارلي، ما أود منك أن تفعل الآن يتم تنفيذ المبادلة في مثل هذه الطريقة أنه بالنظر هذه العناوين اثنين، كنت ذاهب فعلا لتغيير القيم. وأنا أهمس في أذنك كيفية تشغيل التلفزيون هنا. لذلك يذهب إلى الأمام، وكنت على الصندوق الاسود. تصل إلى هناك. ما هي القيم تنظرون لذلك، و ما هي القيم تنظرون لب؟ تشارلي: أ هو 123 و ب 127. DAVID مالان: OK، بالضبط. الآن هناك وقفة لمجرد لحظة. أول شيء كنت تنوي القيام به الآن، وفقا لمدونة - التي أنا الآن سحب ما يصل على الشاشة - سيكون لتخصيص قليلا قليلا من الذاكرة يسمى درجة الحرارة. لذلك انا ذاهب الى المضي قدما و تعطيك تلك الذاكرة. ولذلك فإن هذا سيكون متغير ثالث أن يكون لديك في متناول كنت تسمى درجة الحرارة. وماذا أريد أن أكتب على قطعة من الورق درجة الحرارة؟ تشارلي: مؤشرات، أليس كذلك؟ DAVID مالان: حسنا، حسنا لا مؤشرات بالضرورة. وبالتالي فإن سطر من التعليمات البرمجية التي لدي وأبرزت على الجهة اليمنى، دعونا نبدأ هناك. يقول نجم أ. لذلك يتم تخزين حاليا عدد 123. وحدسي فقط، ما لم نجمة 123 يعني؟ ولكن على وجه التحديد، إذا كان غير 123، نجمة ويعني ماذا؟ قيمة. أو أكثر عرضا، والذهاب إلى هناك. لذلك اسمحوا لي أن أقترح، وعقد لفي يدك، والمضي قدما وعلاج ذلك كما لو انها الخريطة. والسير على نفسك إلى الكمبيوتر الذاكرة، وتجد لنا ما هو في الموقع 123. بالضبط. ولذا فإننا نرى في الموقع 123 ما، من الواضح؟ حسنا، ما قيمة الآن أنت الذهاب إلى ضعت في درجة الحرارة؟ بالضبط. حتى نمضي قدما ونفعل ذلك. وكتابة رقم 1 على قطعة من الورقة التي بعنوان حاليا درجة الحرارة. والآن الخطوة التالية التي وأنت تسير في تنفيذ ستكون ما. أيضا، على الجانب الأيمن من خط التالي من التعليمات البرمجية هو نجم ب. ب، من بالطبع، يخزن عنوان. يعالج 127. نجمة ب يعني ما تحدث عرضا؟ انتقل إلى هذا الموقع. لذلك يذهب إلى الأمام وتجد لنا ما هو في الموقع 127. موافق. بطبيعة الحال، في موقع 127، لا تزال قيمة 2. فما انت ذاهب الآن في متجر كل ما هو في الموقع في؟ حتى النجوم وسيلة الذهاب الى موقع أ. ما هو موقع ل؟ بالضبط. وحتى الآن، إذا كنت تريد تغيير ما هو في هذا المكان - سأذهب إلى الأمام وتشغيل الممحاة هنا. ووضعها الآن مرة أخرى على الفرشاة. ما عدد انت ذاهب لكتابة في هذا المربع فارغا الآن؟ بالضبط. لذلك هذا السطر من التعليمات البرمجية، أن تكون واضحة - واسمحوا استوقفني ما تشارلي به و نشير هنا، ما فعله فقط هو إرسال إلى هذا المربع في الموقع 123 القيمة التي كانت سابقا في ب. ولذا فإننا قد نفذت بالفعل الآن هذا السطر الثاني من التعليمات البرمجية. الآن للأسف، هناك لا يزال سطر واحد المتبقية. الآن ما هو في درجة الحرارة، حرفيا؟ فمن الواضح أنه رقم واحد. هذا ليس عنوان. انها مجرد رقم، نوع من متغير من أسبوع واحد. والآن عندما تقول نجمة ب، وهذا يعني الانتقال إلى العنوان ب، وهو من بالطبع هنا. لذلك بمجرد الوصول إلى هناك - سأذهب إلى الأمام ومحو ما هو في الواقع هناك - وما أنت أريد أن أكتب الآن في موقع 127؟ تشارلي: درجة الحرارة، والتي هي واحدة. DAVID مالان: درجة الحرارة، والتي هي واحدة. وماذا يحدث لدرجة الحرارة في نهاية المطاف؟ حسنا، نحن لا نعرف حقا. نحن لا نهتم حقا. أي وقت قمنا بتنفيذ وظيفة حتى الآن، أية متغيرات المحلية لديك هي في الواقع المحلي. وأنها تختفي تماما. انهم المستصلحة من قبل التشغيل النظام في نهاية المطاف. وبالتالي فإن حقيقة أن درجة الحرارة لا تزال لديه قيمة 1 هو نوع من الأساس رتيبا بالنسبة لنا. كل الحق، ولذلك فإن جولة من التصفيق إذا استطعنا لتشارلي. جيد جدا. كل الحق، لذلك أكثر ما يفعل هذا يعني أننا يمكن أن نفعل؟ لذلك تبين أن كنا يقول بعض الأكاذيب البيضاء لبعض الوقت. في الواقع، اتضح أن سلسلة، كل هذا الوقت، ليست في الحقيقة تسلسل الأحرف في حد ذاتها. انها نوع من هي أن حدسي. ولكن من الناحية الفنية، هو سلسلة نوع البيانات التي أعلنا داخل مكتبة CS50 لتبسيط العالم في الأسابيع القليلة الأولى من الصف. ما هو سلسلة حقا هو عنوان من حرف مكان ما في ذاكرة الوصول العشوائي. سلسلة حقا هو العدد، مثل 123 أو 127، وهذا يحدث لترسيم حيث يبدأ سلسلة في ذاكرة الكمبيوتر الخاص بك. ولكنه لا يمثل سلسلة، في حد ذاتها، في حد ذاته. ويمكننا أن نرى هذا على النحو التالي. اسمحوا لي المضي قدما وفتح بعض التعليمات البرمجية التي من بين أمثلة التعليمات البرمجية المصدر اليوم. وانا ذاهب الى المضي قدما وفتح حتى، دعنا نقول، قارن-0.c. هذا هو برنامج عربات التي تجرها الدواب التي يجري التي سيتم تنفيذها على النحو التالي. أولا. انا ذاهب أن أقول شيئا. ثم انا ذاهب الى المضي قدما و الحصول على سلسلة من المستخدم في هذا السطر التالي. ثم أنا ذاهب لأقول مرة أخرى. ثم أنا ذاهب للحصول على آخر سلسلة من المستخدم. والإشعار، أنا تظهر واحدة من سلاسل في متغير يسمى ثانية، و آخر من هذه السلاسل في متغير يسمى ر. والآن أنا ذاهب للمطالبة، للغاية معقول، أنه إذا ق يساوي يساوي ر، السلاسل هي نفسها. قمت بكتابة نفس الشيء. آخر، سلاسل هي ليس نفس الشيء. بعد كل شيء، واذا كنا اثنين من المدخلات رجات، وهما حرف، واثنين من العوامات، وهما الزوجي، أي من أنواع البيانات التي تحدثنا عنها حتى الآن لمقارنتها - أذكر أوضحنا للغاية منذ فترة ان كنت لا تفعل هذا، لأن علامة المساواة احد هو بالطبع عامل التعيين. بحيث يكون خطأ. نستخدم علامة المساواة على قدم المساواة، الذي يقارن الواقع أشياء من أجل المساواة الحقيقية. ولكن أزعم هذا هو عربات التي تجرها الدواب. إذا ذهبت إلى الأمام وجعل مقارنة الصفر، ومن ثم لا مائلة نقطة مقارنة الصفر. وأنا اكتب في، دعنا نقول، مرحبا. ثم دعونا نقول مرحبا مرة أخرى. حرفيا نفس الشيء، والكمبيوتر مطالبات كتبت أشياء مختلفة. الآن ربما أنا فقط أخطأت شيئا. أنا اكتب اسمي هذا الوقت. أعني، مرحبا. مرحبا. انها مختلفة في كل مرة واحدة. حسنا، لماذا؟ ما يحدث في الواقع تحت غطاء محرك السيارة؟ حسنا، ما يحدث في الواقع تحت غطاء محرك السيارة هو سلسلة ثم أنا كتبته في ذلك الوقت أول على سبيل المثال هي الكلمة مرحبا، بطبيعة الحال. ولكن إذا كان لنا أن تمثل هذه تحت غطاء محرك السيارة، أذكر أن السلسلة في صفيف. وقلنا قدر في الماضي. إذا كان الأمر كذلك أود أن ألفت أن مجموعة من هذا القبيل، وأنا سوف تمثل شيئا تماما على غرار ما فعلنا قبل لحظة. وهناك في الواقع شيئا خاص هنا، أيضا. ما لم نحدد في نهاية كل سلسلة؟ نعم، هذا مائل الصفر، والتي هي مجرد وسيلة لتمثيل، حرفيا، 00000000. 0 ثمانية بت على التوالي. أنا لا أعرف، بصراحة، ما بعد هذا. هذا مجرد حفنة أكثر من ذاكرة الوصول العشوائي داخل جهاز الكمبيوتر الخاص بي. ولكن هذا هو صفيف. تحدثنا عن المصفوفات من قبل. ونحن نتحدث عادة عن المصفوفات كونه موقع الصفر، ثم واحد، ثم اثنين. ولكن هذا فقط للراحة. وهذا هو نسبي تماما. عندما كنت في الواقع الحصول على الذاكرة من الكمبيوتر، انها بالطبع أي 2000000000 بعض بايت ونيف، يحتمل. ذلك حقا تحت غطاء محرك السيارة، كل هذا الوقت، نعم. قد يكون هذا جيدا قوس الصفر. ولكن إذا كنت حفر أعمق تحت غطاء محرك السيارة، وهذا هو حقا معالجة عدد 123. هذا هو عنوان 124. هذا هو عنوان 125. وأنا لم المسمار هذا الوقت. هذه هي الآن واحدة بايت وبصرف النظر عن ما السبب؟ كيف كبيرة هو شار؟ وشار هو بايت واحد فقط. والباحث هو عادة أربعة بايت. ولهذا السبب أنا جعلت من 123، 127، 131 وهكذا دواليك. الآن أنا يمكن أن تبقي على أبسط الرياضيات ومجرد القيام زائد 1. وهذا هو الآن ما يحدث في الواقع تحت غطاء محرك السيارة. لذلك عندما يعلن شيئا من هذا القبيل، سلسلة ثانية، وهذا هو الواقع - اتضح - نجمة شار. نجمة، بطبيعة الحال، وسيلة العنوان، ويعرف أيضا باسم مؤشر. لذلك فمن عنوان لشيء ما. ما هو عنوان؟ كذلك - أنا الوحيد الذي يمكن أن نرى جدا نقطة مهمة أنا صنع، أو التفكير أنا صنع. حتى سلسلة - الشيء المحزن هو لدي جهاز الحق هناك حيث أنا قد شهدت ذلك. كل الحق، لذلك سلسلة ليالي هو ما أنا أعلن سابقا. لكن اتضح، وذلك بفضل قليلا السحر في المكتبة CS50، كل هذا سلسلة الوقت قد حرفيا كانت نجمة شار. يعني النجم مرة أخرى مؤشر أو العنوان. حقيقة أنه هو المرافقة كلمة شار يعني انها عنوان حرف. لذلك يطلق سلسلة إذا تحصل، وأنا اكتب في H-E-L-L-O، تقترح الآن ما تحصل سلسلة حرفيا تم إعادة كل من هذه المرة، على الرغم من أننا قمت بدلا التبسيط العالم؟ ماذا يحصل في الواقع سلسلة العودة كقيمة عودتها؟ 123 في هذه الحالة، على سبيل المثال. قلنا سابقا أن سلسلة الحصول على ببساطة بإرجاع سلسلة، سلسلة من حرفا. ولكن هذا قليلا من كذبة بيضاء. طريقة الحصول على سلسلة يعمل حقا تحت غطاء محرك السيارة هو يحصل على سلسلة من المستخدم. انها تغمر افضلها الأحرف التي هو أو هي أنواع في الذاكرة. فإنه يضع مائل الصفر في نهاية هذه سلسلة من الأحرف. ولكن بعد ذلك ماذا يحصل السلسلة العودة حرفيا؟ فإنها ترجع حرفيا عنوان بايت الأولى في ذاكرة الوصول العشوائي التي استخدامه لتلك القوة. وتبين أن فقط من خلال العودة عنوان واحد لل الحرف الأول في السلسلة، وهذا هو كافية من أجل العثور على مجمل السلسلة. وبعبارة أخرى، لا يكون الحصول على سلسلة للعودة 123 و 124 و 125. فإنه ليس من الضروري أن تعطيني طويلة قائمة بكافة وحدات البايت التي سلسلة بلدي يستخدم. لأن واحدا، وانهم جميعا العودة إلى الوراء. واثنين، استنادا إلى العنوان الأول، وأنا يمكن معرفة حيث ينتهي السلسلة. كيف؟ الطابع فارغة الخاصة، و مائل الصفر في نهاية المطاف. لذلك وبعبارة أخرى، إذا يمكنك تمرير حول - داخل المتغيرات - عنوان شار، والتي تفترض أنه في نهاية أي سلسلة، أي تسلسل الأحرف كما نحن البشر نفكر في سلاسل، إذا كنت تفترض أن في نهاية هذه السلسلة أي هناك مائل الصفر، وكنت الذهبي. لأنك يمكن أن تجد دائما نهاية السلسلة. الآن ما ثم حقا على في هذا البرنامج؟ لماذا هذا البرنامج، قارن-0.c، عربات التي تجرها الدواب؟ ما هو في الواقع يجري مقارنة؟ نعم؟ الطالب: [غير مسموع]. DAVID مالان: بالضبط. انها مقارنة المواقع من السلاسل. حتى إذا تمت كتابة المستخدم في مرحبا مرة واحدة، كما فعلت، قد ينتهي ذاكرة تصل يبحث مثل هذا. إذا كان المستخدم ثم في أنواع مرحبا مرة أخرى، ولكن عن طريق استدعاء سلسلة الحصول مرة أخرى، هو ج لا ذكي ولا سيما إلا إذا كنت تعلم أن تكون ذكية عن طريق كتابة التعليمات البرمجية. C - وأجهزة الكمبيوتر بشكل عام - إذا كنت اكتب في كلمة مرحبا مرة أخرى، كنت أعرف ما كنت تريد الذهاب للحصول على. كنت مجرد الذهاب للحصول على مجموعة الثانية الذاكرة التي، نعم، يحدث أن يكون تخزين H-E-L-L-O وهكذا دواليك. انها سوف ننظر نفسه ل نحن البشر، ولكن هذا العنوان قد لا تكون 123. أنه قد يحدث فقط حتى أن نظام التشغيل لديها بعض متاحة الفضاء على سبيل المثال في موقع - دعونا نقول شيئا التعسفي، مثل هذا الموقع 200. وهذا هو الموقع 201. وهذا هو الموقع 202. ليس لدينا أي فكرة عن مكان هذا ستكون في الذاكرة. ولكن ما يعنيه هذا هو أن ما هو الذهاب الى خزنها في نهاية المطاف في ليالي؟ عدد 123. ما يحدث ليتم تخزينها في ر، في هذا المثال التعسفي؟ عدد 200. وكل هذا يعني ثم من الواضح، 123 لا يساوي 200. وحتى هذا اذا كان الشرط أبدا يقيم إلى true. لأن الحصول على سلسلة يستخدم مختلفة قطع من الذاكرة في كل مرة. الآن يمكننا أن نرى هذا مرة أخرى في مثال آخر. اسمحوا لي المضي قدما وفتح نسخ 0.c. أزعم أن هذا المثال هو الذهاب الى محاولة - لكنه يفشل - في نسخ سلسلتين على النحو التالي. انا ذاهب أن أقول شيئا للمستخدم. أنا ثم الذهاب للحصول على سلسلة ونسميها ق. والآن، وأنا أفعل هذا الاختيار هنا. ذكرنا هذا في حين يعود. ولكن عندما قد تحصل سلسلة العودة فارغة، طابع خاص آخر، أو خاصة دعونا نقول رمزا. لو كان خارج الذاكرة. على سبيل المثال، إذا كان المستخدم هو حقا كونها صعبة وأنواع وفظيعة عدد الأحرف في لوحة المفاتيح وأدخل الفعالية. إذا كان هذا عدد الأحرف لا يمكن فقط تناسب في ذاكرة الوصول العشوائي لأي مجنون السبب، وأيضا الحصول على سلسلة القوة العودة بشكل جيد للغاية خالية. أو إذا كان البرنامج نفسه يفعل الكثير من الأشياء الأخرى وهناك فقط الذاكرة لا تكفي لسلسلة الحصول على لتحقيق النجاح، قد ينتهي حتى تعود فارغة. ولكن دعونا نكون أكثر دقة على ما هو هذا. ما هو نوع البيانات في ق حقا؟ نجمة شار. حتى اتضح الآن يمكننا أن قشر دعم طبقة من فارغة. تبين، غير فارغة - نعم، من الواضح رمز خاص. ولكن ما هو حقا؟ حقا، لاغية هو مجرد رمز أننا استخدام البشر لتمثيل الصفر أيضا. وبالتالي فإن الكتاب من C، وأجهزة الكمبيوتر بشكل أعم، قررت منذ سنوات ذلك، كما تعلمون ما. لماذا لا يمكننا ضمان عدم وجود المستخدم البيانات من أي وقت مضى، من أي وقت مضى، من أي وقت مضى تخزينها في داعا الصفر؟ في الواقع، حتى في بلدي على سبيل المثال التعسفي من قبل، لم أكن بدء ترقيم بايت عند مستوى الصفر. بدأت في واحدة. لأنني كنت أعرف أن الناس في العالم لقد قررت أن نحتفظ الصفر بايت من ذاكرة الوصول العشوائي في أي شخص كما شيء خاص. والسبب، في أي وقت تريد إشارة إلى أن شيئا ما قد حصل من خطأ فيما يتعلق العناوين، التي عادت خالية - والمعروف باسم الصفر - ولأنك تعرف أنه لا يوجد البيانات شرعي في عنوان الصفر، بوضوح وهذا يعني وجود خطأ. وهذا هو السبب في أننا، من خلال الاتفاقية، والتحقق لاغية وعودة شيء مثل واحد في تلك الحالات. حتى إذا كنا الآن انتقل لأسفل، وهذا هو فقط ثم بعض تدقيق الأخطاء، فقط في حالة شيء ذهب على نحو خاطئ مع [؟ إنقاذ؟] تماما وإنهاء البرنامج من خلال العودة في وقت مبكر. هذا الخط الآن يمكن إعادة كتابة لأن هذا، مما يعني ماذا؟ على الجانب الأيسر، أعطني أخرى مؤشر إلى حرف، والذي يطلق عليه ر. ما أنا تخزين داخل ر، استنادا على هذا سطر واحد من التعليمات البرمجية؟ أنا تخزين الموقع. على وجه التحديد الموقع الذي كان في ليالي. حتى إذا تمت كتابة المستخدم في مرحبا، و مرحبا أول أن يحدث في نهاية المطاف هنا، ثم عدد 123 هو سوف يأتي مرة أخرى من الحصول على سلسلة وخزنها - كما قلنا سابقا - في ليالي. عندما أعلن الآن مؤشر آخر ل شار والذي يطلق عليه طن، ما هو عدد حرفيا الذهاب الى نهاية المطاف في ر وفقا لهذه القصة؟ حتى 123. حتى الآن من الناحية الفنية على حد سواء ق و ر تشير إلى الدقيق نفس قطع من الذاكرة. حتى إشعار ما انا ذاهب الى القيام به الآن ل إثبات أن هذا البرنامج هو عربات التي تجرها الدواب. أولا أنا ذاهب للمطالبة، مع وو الطباعة، والاستفادة نسخة من السلسلة. ثم انا ذاهب الى القيام به قليلا تدقيق الأخطاء. انا ذاهب للتأكد. دعونا نتأكد من أن ر السلسلة في الأقل أكبر من الصفر في الطول، ولذلك لا يوجد هناك بعض الحرف للاستفادة فعلا. ثم كنت قد يتذكر هذا من الأمثلة السابقة. 2 العليا - والتي هي في ملف ctype.h. T قوس صفر يعطيني صفر طابع ر السلسلة. و2 العلوي من تلك القيمة نفسها، من بالطبع، يحوله إلى أحرف كبيرة. حتى حدسي، وهذا أبرز الخط من التعليمات البرمجية يتم الاستفادة أول رسالة في ر. ولكنها ليست مستغلة، حدسي، الحرف الأول في ليالي. ولكن إذا كنت تفكر للمستقبل، ما أنا على وشك أن نرى عند تشغيل هذا البرنامج وطباعة كل من النص الأصلي، ق، ويسمى نسخة، ر؟ انهم ذاهبون فعلا أن تكون هي نفسها. ولماذا هم ذاهبون لتكون هي نفسها؟ انهم على حد سواء لافتا إلى بالضبط نفس الشيء. لذلك دعونا نفعل ذلك. جعل نسخة الصفر. فإنه يجمع موافق. اسمحوا لي أن تشغيل نسخة الصفر. اسمحوا لي أن اكتب شيئا مثل مرحبا في ثم ضرب كل صغيرة أدخل. وتدعي أن كلا من ليالي الأصلي والنسخة هي في الواقع متطابقة. وذلك ما حدث فعلا هنا؟ اسمحوا لي أن رسم هذه الصورة فقط ليحكي قصة في بطريقة مختلفة قليلا. ما يحدث في الواقع تحت هود عندما أعلن شيء من هذا القبيل شار تبدأ ثانية، أو سلسلة ثانية، أنا على الحصول على مؤشر - الذي صادف أن يكون أربعة بايت في الأجهزة CS50 وفي الكثير من أجهزة الكمبيوتر. وانا ذاهب لاستدعاء هذا ق. ويحتوي هذا حاليا بعض قيمة غير معروفة. عندما تقوم بتعريف متغير، إلا إذا كنت نفسك وضع قيمة هناك، الذين يعرف ما هو هناك. يمكن أن يكون بعض تسلسل عشوائي من بت من التنفيذ السابق. حتى عندما كنت في بلدي خط من التعليمات البرمجية لا تحصل سلسلة، ومن ثم تخزين عودة القيمة في الحصول على سلسلة ثانية بطريقة أو بأخرى - وسنقوم في نهاية المطاف يعود قشر كيفية الحصول على سلسلة الأعمال، تخصص بطريقة ما مجموعة التي ربما تبدو قليلا من هذا القبيل. H-E-L-L-O، مائل الصفر. دعونا نفترض أن هذا هو عنوان 123 الاتساق فقط الأول. حتى الحصول على عوائد سلسلة، في أبرزت خط هناك، فإنها ترجع وقال عدد أننا، 123. وذلك ما يذهب حقا داخل و هنا؟ حسنا، ما يدور حقا داخل ق 123. ولكن بصراحة، انني اتلقى قليلا الخلط من جانب كل من هذه العناوين، كل هذه الأرقام التعسفي. 123، 124، 127. لذلك دعونا تبسيط الواقع العالم قليلا. عندما نتحدث عن مؤشرات، بصراحة، ل نحن البشر، الذي يهتم هيك حيث أشياء في الذاكرة؟ هذا تعسفية تماما. انها سوف تعتمد على كيفية بكثير من ذاكرة الوصول العشوائي لدى المستخدم. انها سوف تعتمد على عندما تكون في اليوم قمت بتشغيل البرنامج، وربما، و ما يتيح للمستخدم إدخال لك. نحن الخوض في التفاصيل غير مهم. لذلك دعونا مجردة بعيدا وأقول ذلك، عند تشغيل سطر من التعليمات البرمجية مثل هذا، نجمة شار ق يحصل على العودة الحصول على قيمة سلسلة. لماذا لا يمكننا بدلا من ذلك رسم فقط ما كنا الحفاظ على استدعاء مؤشر كما لو انها مشيرا في شيء؟ لذلك أنا يدعون الآن بأن متروك هناك مؤشر - تحت غطاء محرك السيارة انها عنوان. ولكن انها مجرد لافتا إلى البايت الأول في سلسلة التي تم إرجاعها. إذا أنا الآن العودة إلى رمز هنا، ما يحدث في هذا الخط؟ كذلك، سلط الضوء في هذا الخط الآن، أنا على ما يبدو معلنا أخرى متغير يسمى ر. لكنه أيضا مؤشر، لذلك أنا ذاهب لاستدراجه كما، من الناحية النظرية، بالضبط نفس حجم مربع. وانا ذاهب الى نسميها ر. والآن إذا عدنا إلى رمز مرة أخرى، عندما كنت تخزين داخل ق ر، ما أنا تقنيا وضع داخل ر؟ جيدا من الناحية الفنية، وهذا كان عدد 123. ذلك حقا أنني يجب أن تكون الكتابة عدد 123 هناك. ولكن دعونا أعتبر مستوى أعلى. ر، إذا كان هو مجرد مؤشر، حدسي، هو ذلك تماما. هذا هو كل ما يجري المخزنة في هناك. وحتى الآن في السطور الأخيرة مثيرة للاهتمام من التعليمات البرمجية، عندما كنت في الواقع تذهب نحو الاستفادة الطابع الصفر في ر، ما الذي يجري؟ حسنا، ر قوس الصفر يشير الآن لماذا الحرف، ويفترض؟ انها لافتا إلى ح. بسبب ر قوس صفر - أذكر، وهذا هو جملة القديمة. ر قوس الصفر يعني فقط إذا ر هي سلسلة، ر قوس الصفر يعني الحصول على الصفر حرف في تلك القوة. ذلك ما يعنيه ذلك حقا هو الذهاب إلى هذه المجموعة - ونعم، قد يكون هذا 123، هذا قد يكون 124. ولكن كل شيء نسبي، وتذكر. كلما نتحدث عن مجموعة، لدينا ميزة من الحديث عن مؤشرات نسبية. وحتى الآن يمكننا أن نفترض فقط أن ر قوس الصفر هو ح. إذا كان الأمر كذلك أدعو 2 العليا على ذلك، وهذا ما به حقا هو الاستفادة ح صغيرة إلى أحرف كبيرة H. ولكن بطبيعة الحال، ما هو ق؟ انها لافتا إلى سلسلة الرتق نفسه. لذلك هذا هو كل ما كان يحدث في هذه المدونة حتى الآن. فما ثم ضمنا؟ كيف يمكننا إصلاح هاتين المشكلتين؟ كيف يمكننا مقارنة سلاسل الفعلية؟ كذلك حدسي، وكيف يمكن أن يمكنك أن تذهب نحو المقارنة بين اثنين سلاسل للمساواة حقيقية؟ ماذا يعني إذا كان اثنان سلاسل متساوون؟ بوضوح لا أن عناوينهم و يساوي في الذاكرة، لأن هذا هو أدنى مستوى التفاصيل تنفيذ المستوى. جميع الشخصيات هي نفسها. لذلك اسمحوا لي اقتراح، واسمحوا لي أن أعرض في إصدار واحد من compare.c هنا، لذلك مقارنة-1.C. اسمحوا لي أن أقترح أننا لا تزال تحصل على مؤشر يسمى ثانية، وتخزينها في ذلك و عودة قيمة سلسلة GET. دعونا نفعل نفس الشيء مع ر. لذلك لا شيء من رمز مختلف. انا ذاهب لإضافة قليلا أكثر خطأ التحقق الآن. حتى الآن أننا نوع من تقشير الظهر هذه الطبقات في CS50 ما سلسلة هو في الواقع، نحن بحاجة إلى أن يكون أكثر الشرج عن التأكد من أننا لا يسيئون قيم غير صالحة مثل فارغة. لذلك أنا مجرد الذهاب للتحقق. إذا ق يفعل فارغة لا تساوي ور لا فارغة متساوية، وهذا يعني أننا موافق. الحصول على سلسلة لم المسمار الحصول على أي من تلك السلاسل. ويمكنك تخمين ربما الآن، ما لا STR CMP يفترض القيام به؟ سلسلة مقارنة. لذلك إذا كنت قد البرنامج في جافا من قبل، هذا هو مثل طريقة متساوين في فئة السلسلة. لكن بالنسبة لأولئك منكم الذين لديهم لا مبرمجة من قبل، هذا هو مجرد وظيفة ج. كان يحدث أن تأتي في ملف يسمى string.h. هذا حيث انها اعلنت انها. وسلسلة مقارنة - أنا فعلا نسيت استخدامه، ولكن لا يهم ذلك. أذكر ما يمكن أن نفعله الرجل، وإثارة مقارنة. وهذا هو ذاهب لإحضار لينكس المبرمجين دليل. وانها، بصراحة، خفي قليلا. ولكن أستطيع أن أرى هنا أنه موافق. لدي لتشمل string.h. وتقول هنا تحت وصف "، و يقارن سلسلة وظيفة مقارنة اثنين من سلاسل S1 و S2. "وS1 وعلى ما يبدو S2 اثنين الحجج تمريره. أنا لا أتذكر حقا ما const تساوي، ولكن لاحظ الآن - وكنت قد رأيت هذا بالفعل عندما كنت قد استخدام صفحات رجل إذا كنت أن يكون كل شيء - هذا النجم شار هو مجرد مرادف مع السلسلة. لذلك يقارن السلسلتين، S1 و S2، وتقوم بإرجاع عدد صحيح أقل من أو يساوي أو أكبر من الصفر إذا تم العثور S1، على التوالي، لتكون أقل من، أو مباراة، أو تكون أكبر من S2. هذا هو مجرد وسيلة معقدة للغاية للقول هذه السلسلة مقارنة العوائد صفر إذا سلسلتين هي حدسي متطابقة، وحرف ل حرف حرف. تقوم بإرجاع رقم سالب إذا ق، حسب الترتيب الأبجدي، من المفترض أن يأتي قبل طن. أو بإرجاع عدد إيجابية إذا ومن المفترض أن تأتي بعد ق ر أبجديا. حتى مع هذا وظيفة بسيطة، يمكن كنت، على سبيل المثال، فرز مجمله مجموعة من الكلمات؟ حتى في هذا الإصدار الجديد، وانا ذاهب المضي قدما وجعل compare1. نقطة مقارنة خفض واحد. سوف اكتب في مرحبا في كل حالة السفلية. انا ذاهب الى اكتب في مرحبا في كل صغيرة مرة أخرى. والحمد لله الآن أنها تدرك كتبت نفس الشيء. وفي الوقت نفسه، إذا كنت اكتب في مرحبا في انخفاض القضية ومرحبا في حالة العلوي و مقارنتها، وأنا كتبته أشياء مختلفة. لأنه ليس فقط هي عناوين مختلفة، لكننا مقارنة شخصيات مختلفة مرة أخرى ومرة ​​أخرى. حسنا دعونا نذهب وإصلاح واحد مشكلة أخرى الآن. اسمحوا لي أن فتح إصدار واحد من نسخة، والتي الآن عناوين هذه المسألة على النحو التالي. وهذا واحد يجري لتبدو قليلا أكثر تعقيدا. ولكن إذا كنت تفكر في ما هي المشكلة نحن تحتاج إلى حل، ونأمل أن هذا سوف يكون مسح في مجرد لحظة الآن. لذلك هذا السطر الأول، شار بدء ر، في شروط للشخص العادي يمكن أن يقترح شخص ما ما هذا الخط يعني هنا؟ شار نجمة ر، ما هو أن تفعل؟ جيدة. إنشاء مؤشر لبعض بقعة في الذاكرة. واسمحوا لي أن تحسينه قليلا. تعريف متغير الذي سيخزن عنوان بعض شار في الذاكرة، فقط أن تكون أكثر من ذلك بقليل المناسبة. موافق، وحتى الآن على الجانب الأيمن، لقد لم يسبق له مثيل واحد من هذه الوظائف من قبل، malloc. ولكن ما قد يعني ذلك؟ تخصيص الذاكرة. تخصيص الذاكرة. لذلك تبين، حتى الآن، ونحن لم يكن حقا وسيلة قوية لل طرح نظام التشغيل، تعطيني بعض الذاكرة. بدلا من ذلك، لدينا الآن وظيفة تسمى malloc أن يفعل ذلك بالضبط. على الرغم من أن هذا هو قليلا من الهاء الآن، لاحظ أنه في بين الأقواس هو مجرد الذهاب الى أن عددا. حيث كنت قد كتبته في السؤال يمكن أن تكون علامات عددا. وهذا العدد يعني، أعطني 10 بايت. أعطني 20 بايت. تعطيني 100 بايت. وmalloc سوف تبذل قصارى جهدها ل نطلب من نظام التشغيل - لينكس، في هذه الحالة - مهلا، هي على 100 بايت من ذاكرة الوصول العشوائي المتاحة؟ إذا كان الأمر كذلك، والعودة تلك بايت لي من قبل العودة عنوان أي من تلك بايت، ربما؟ أول واحد للغاية. حتى هنا أيضا - وهذا هو الغالب في C، أي وقت كنت التعامل مع عناوين؟ كنت تتعامل دائما تقريبا مع أول هذه العناوين، مهما كانت كبيرة قطعة من الذاكرة التي يجري سلمت، إذا جاز التعبير. لذلك دعونا الغوص في هنا. واني اسعى الى تخصيص كيف العديد من بايت، بالضبط؟ أيضا. طول سلسلة من ليالي - دعنا القيام مثالا ملموسا. إذا ق هو مرحبا، H-E-L-L-O، ما هو طول سلسلة من ليالي، من الواضح؟ لذلك فمن الخمسة. ولكن أفعله زائد 1 على ذلك، لماذا؟ لماذا أريد ستة بايت بدلا من خمسة؟ الطابع فارغة. أنا لا أريد أن أترك من هذا حرف فارغة خاصة. لأنه إذا قمت بعمل نسخة من مرحبا و مجرد القيام H-E-L-L-O، ولكن أنا لا تضع أن طابع خاص، الكمبيوتر قد لا يكون، عن طريق الصدفة، وهو مائل الصفر هناك بالنسبة لي. وإذا كان الأمر كذلك أحاول معرفة طول نسخة، وأنا قد تعتقد أن انها 20 حرفا، أو مليون حرفا إذا أنا فقط يحدث أبدا لتصل إلى الصفر مائل. لذلك نحن بحاجة ستة بايت لتخزين H-E-L-L-O، مائل الصفر. ثم وهذا هو فقط أن تكون الشرج عظمى. لنفترض أن أنسى ما حجم شار هو. علينا أن نحافظ قائلا انها بايت واحد. وعادة ما يكون. من الناحية النظرية، يمكن أن يكون شيئا مختلفة، على مختلف ماك أو الكمبيوتر المختلفة. حتى اتضح هناك هذا المشغل دعا sizeof أنه إذا كنت تمر عليه اسم نوع البيانات - مثل شار، أو الباحث، أو تعويم - وسوف اقول لكم، حيوي، وكم بايت شار يستغرق على هذا كمبيوتر معين. لذلك هذا هو فعال فقط مثل 1 أو مرات قائلا مرات لا شيء على الإطلاق. ولكن أنا أفعل ذلك لمجرد أن يكون الشرج عظمى، فقط في حالة أن أحد يختلف شار على جهاز الكمبيوتر الخاص بك مقابل الألغام، وبهذه الطريقة الرياضيات دائما ما تحقق من. أخيرا، إلى هنا وأنا تحقق لاغية، الذي هو دائما ممارسة جيدة - مرة أخرى، أي وقت نتعامل مع مؤشرات. إذا كان malloc يست قادرة على إعطاء لي ستة اعفي - الذي هو من غير المحتمل، ولكن فقط في حالة - العودة احدة على الفور. والآن، والمضي قدما ونسخ السلسلة على النحو التالي. وهذا هو بناء جملة مألوفة، وإن كان في دور مختلف. انا ذاهب الى المضي قدما والحصول على السلسلة طول من ليالي وتخزينها في ن. أنا ثم الذهاب الى تكرار من ط يساوي الصفر، وذلك حتى ن، أكبر من أو يساوي. بحيث على كل التكرار، أضع حرف إيث من ليالي في إيث حرف ر. وذلك ما يحدث في الواقع تحت غطاء محرك السيارة هنا؟ حسنا إذا كان هذا، على سبيل المثال، هو ق - ولقد كتبته في كلمة H-E-L-L-O وهناك الصفر مائل. ومرة أخرى، وهذا هو ق التأشير هنا. وهنا الآن ر. وهذا يشير إلى الآن نسخة من الذاكرة، أليس كذلك؟ لقد أعطاني Malloc ككل جزء من الذاكرة. أنا لا أعرف ما هو البداية في أي من هذه المواقع. لذلك أنا ذاهب الى التفكير في هذه كما في مجمله مجموعة من علامات الاستفهام. ولكن بمجرد أن تبدأ حلقات من الصفر على ما يصل من خلال طول ق، ر قوس الصفر ور قوس 1 - وأنا وضعت هذا الآن على النفقات العامة - ر قوس الصفر والصفر يعني قوس ق انني ذاهب الى أن نسخ ح تكرارا هنا، E-L-L-O. بالاضافة الى ذلك، لأنني فعلت زائد 1، مائل الصفر. وحتى الآن في حالة مقارنة-1.C، في النهاية، إذا كنت تطبع رسملة ر، يجب علينا نرى أن ق هو دون تغيير. اسمحوا لي الآن المضي قدما ونفعل ذلك. لذا تأكد copy1. نقطة خفض copy1. أنا ذاهب لكتابة مرحبا، أدخل. والآن لاحظ، فقط نسخة تم رسملتها. لأن لدي حقا اثنين قطع من الذاكرة. للأسف، يمكنك القيام ببعض جميلة أشياء سيئة وخطيرة جدا هنا. اسمحوا لي سحب ما يصل مثالا هنا الآن، أن يعطينا مثالا على عدد قليل خطوط مختلفة. حتى مجرد حدسي هنا، السطر الأول من التعليمات البرمجية، نجمة الباحث العاشر، يعلن دعا متغير س. وما هو نوع البيانات هذا المتغير؟ ما هو نوع بيانات هذا المتغير؟ لم يكن هذا هو التشويق. نوع البيانات هو نجم كثافة العمليات. فماذا يعني ذلك؟ س الإرادة تخزين عنوان لكثافة العمليات. البساطة. Y هو ذاهب لتخزين عنوان لكثافة العمليات. ما هو الخط الثالث من التعليمات البرمجية تفعل هناك؟ انها تخصيص وكم بايت، وعلى الأرجح؟ أربعة. بسبب حجم وكثافة العمليات هو عموما الأربعة، malloc أربع يعطي لي نسخ عنوان قطعة من الذاكرة، وهو الأول من الذي هو بايت تخزين الآن في العاشر. ونحن الآن نسير قليلا بسرعة. نجمة س يعني ماذا؟ ذلك يعني الذهاب الى هذا العنوان ووضع ما عدد هناك؟ وضع عدد 42 هناك. وسائل ذ نجمة تذهب إلى ما هو في ذ ووضع عدد 13 هناك. ولكن الانتظار لمدة دقيقة. ما هو في ذ في هذه اللحظة؟ ما هو عنوان ذ تخزين؟ نحن لا نعرف، أليس كذلك؟ نحن لم تستخدم مرة واحدة الاحالة مشغل تنطوي ذ. ذ ذلك أعلن على السطر الثاني من الكود هو فقط بعض القيمة القمامة، كبيرة علامة استفهام إذا جاز التعبير. فإنه يمكن الإشارة بشكل عشوائي إلى أي شيء في الذاكرة، والتي سيئة عموما. ذلك في أقرب وقت نحن ضرب هذا الخط هناك، نجمة ذ يساوي 13، شيئا سيئا، شيئا سيئا جدا حوالي ليحدث لبينكي. لذلك دعونا نرى ما يحدث في نهاية المطاف يحدث بينكي هنا في هذه اللحظة أو هكذا تبدو. [تشغيل الفيديو] يا، بينكي. يستيقظون. حان الوقت لمؤشر المرح. -ما هذا؟ تعلم عن المؤشرات؟ أوه، الجيد. حسنا، للبدء، أعتقد أننا تسير في حاجة إلى مؤشرات زوجين. -OK. هذا الرمز يخصص اثنين من مؤشرات والتي يمكن أن نشير إلى أعداد صحيحة. -OK، حسنا، أرى مؤشرات اثنين. لكنهم لا يبدو أن مشيرا إلى أي شيء. ذلك صحيح. في البداية، لا مؤشرات إشارة إلى أي شيء. وتسمى الأشياء التي تشير إلى pointees، وإقامتها هو خطوة منفصلة. أوه، والحق، والحق. كنت أعرف ذلك. وpointees منفصلة. لذلك كيف يمكنك تخصيص pointee؟ -OK. حسنا، هذا الرمز يخصص الأعداد الصحيحة جديدة pointee، وهذا الجزء مجموعات X للإشارة إلى ذلك. يا، التي تبدو أفضل. حتى جعله يفعل شيئا. -OK. أنا dereference المؤشر العاشر لتخزين عدد 42 في pointee لها. لهذه الخدعة، أنا بحاجة بلدي السحر عصا من يعتبر إلغاء مرجعية. الخاص بك عصا سحرية من يعتبر إلغاء مرجعية؟ اه، هذا أمر عظيم. وهذا هو ما يبدو رمز مثل. أنا تأسيسها لأول مرة في العدد، و- يا، نظرة. هناك تذهب. ذلك القيام على إلغاء مرجعية خ يلي السهم للوصول pointee لها. في هذه الحالة، لتخزين 42 في هناك. مهلا، حاول استخدامه لتخزين عدد 13 من خلال الآخر المؤشر، ذ. -OK. سأذهب فقط أكثر من هنا إلى ذ و الحصول على عدد 13 اقامة. ثم أخذ عصا من يعتبر إلغاء مرجعية وفقط - قف! أوه، مهلا. ان لم ينجح. ويقول، بينكي، وأنا لا أعتقد أن يعتبر إلغاء مرجعية ذ هو فكرة جيدة، لأن إعداد pointee خطوة منفصلة. وأنا لا أعتقد أننا أي وقت مضى فعل ذلك. -هم. نقطة جيدة. نعم، نحن خصصت ذ المؤشر. لكننا أبدا تعيينها إلى تشير إلى pointee. -هم. ملاحظ جدا. يا، كنت أبحث جيدة هناك، بينكي. يمكنك إصلاحه بحيث نقطة ذ لنفس pointee كما س؟ -بالتأكيد. سوف تستخدم بلدي عصا سحرية ل مؤشر الاحالة. * هل أن سيكون المشكلة مثل قبل؟ ، لا. هذا لا تلمس pointees. يتغير مؤشر واحد فقط أن نشير إلى نفس الشيء وذاك. أوه، أرى. الآن نقطة y إلى نفس المكان س. حتى الانتظار. الآن يتم إصلاح ذ. أنه يحتوي على pointee. لذلك يمكنك محاولة عصا من يعتبر إلغاء مرجعية مرة أخرى لارسال اكثر من 13. -OK. هنا يذهب. يا، أن ننظر في ذلك. يعتبر إلغاء مرجعية الآن يعمل على ذ. ولأن تقاسم مؤشرات أن pointee واحدة، فإنها كل من يرى 13. -نعم. تقاسم. أيا كان. لذلك نحن ذاهبون الأماكن التبديل الآن؟ أوه، نظرة. نحن في الخارج من الوقت. ولكن - -فقط تذكر الثلاثة قواعد المؤشر. رقم واحد، والبنية الأساسية هو أن يكون لديك مؤشر. ويشير أكثر إلى pointee. لكن المؤشر وpointee هي منفصلة. والخطأ الشائع هو إعداد المؤشر، ولكن ل تنسى أن يعطى pointee. عدد اثنين، يبدأ المؤشر يعتبر إلغاء مرجعية في مؤشر ويتبع لها سهم على الوصول إلى pointee لها. كما نعلم جميعا، وهذا يعمل فقط إذا كان هناك هو pointee، الذي يعود إلى حكم رقم واحد. رقم ثلاثة، ويأخذ المؤشر الاحالة مؤشر واحد والتغييرات التي للإشارة إلى نفس pointee كما مؤشر آخر. وذلك بعد الاحالة، سوف المؤشرات اثنين تشير إلى نفس pointee. في بعض الأحيان أن يسمى تقاسم. وهذا كل ما في الامر، حقا. وداعا وداعا الآن. [END تشغيل الفيديو] DAVID مالان: أكثر من ذلك على مؤشرات، أكثر على بينكي الاسبوع المقبل. سنرى لك يوم الاثنين.