JASON هيرشهورن: مرحبا بكم لA5، الجميع. لدينا أسبوع مثيرة أمامنا، في الغالب لأن هناك الكثير من الجديد يواجه في هذه الغرفة. أنه لأمر رائع. وهناك الكثير من وجودك هنا عن طريق الصدفة، الذي هو أفضل. لذلك نأمل عليك أن تبقي الانضمام إلينا. هذا الاسبوع ونحن في طريقنا لقضاء الجزء الأكبر من القسم التحضير للمسابقة. لذلك في جدول أعمالنا، ونحن ذاهبون الى الحديث قليلا عن موارد للفئة، ولكن أيضا لهذه المسابقة، وبعد ذلك، مرة أخرى، تنفق الجزء الأكبر من الطبقة الكلام حول الأسئلة. مرة واحدة ننتهي الإجابة الخاصة بك أسئلة، أو إذا أسئلتك يقودنا بطبيعة الحال إلى بعض الترميز، وأنا لديك مشاكل عينة من انتخابات التجديد النصفي الماضي بأننا سوف رمز حي في القسم معا التي تجلب أيضا بعض الدول الاخرى مواضيع جيدة لتغطية. حتى الأولى، ونحن قد ذهبت من خلال ل الأسبوعين الماضيين أن أذكركم الرجال، وهناك من نصف طن من الموارد يتوفر لهذه الدورة. وكثير منهم تكون مفيدة بشكل لا يصدق لكم وأنتم تواصلون ل دراسة لمسابقة 0، لأن انها بعد ظهر اليوم الثلاثاء. لذلك كانت كل واحد منكم دراسة لبعض الشيء. هناك ملاحظات المحاضرات ومصدر التعليمات البرمجية التي يجب عليك بالتأكيد إنهاء إجراءات المغادرة. مشاهدة السراويل. تحقق من study.cs50.net. ومن ثم، المدرجة أدناه، عددا من الموارد الأخرى. مرة أخرى، مسابقة 0 غدا في 01:00. إذا لم تكن قد فعلت ذلك بالفعل، وتحقق خارج عن مسابقة 0 الوثيقة على الصفحة الرئيسية بالطبع لمعرفة حيث كنت تتناولين هذه المسابقة. يبدأ الاختبار الساعة 1:10 و ينتهي في وقت لاحق الدقيقة 70. حتى إذا كنت تظهر بعد 01:10، كنت ذاهب للحصول على أن العديد من أقل دقيقة من 70 إلى اتخاذ هذه المسابقة. لذلك تأكد من كنت هناك في الوقت المحدد. إذا كنت طالبا أو التمديد لها بعض الاعتبارات اختبار أخرى، قد لا يكون في 1:00 غدا. ولكن مرة أخرى، والتحقق من معلومات عن مسابقة 0 توثيق للتأكد من أنك تعرف متى كنت تتناولين هذه المسابقة. كتبت 75 دقيقة هنا. أعتقد أن هذا حق، وليس 70. وهو يغطي جميع المواد من أسبوع 0 لمحاضرة الاسبوع الماضي يوم الاربعاء. ومرة أخرى، لهذا الاختبار، في أن الوثيقة، يمكنك الحصول على واحدة ذات وجهين و 8 1/2 بنسبة 11 ورقة من الورق التي تحصل لاستخدام الملاحظات خلال هذه المسابقة. كثير من الناس، إن لم يكن معظم الناس، لديها وجدت أن الطريقة الوحيدة الأكثر مفيدة لدراسة هذه المسابقة هو جعل ورقة الدراسة، و سدر واحد، خاصة بهم. حتى ننظر في تلك الماضي إذا كنت قد رأيت تلك الماضية. الوصول للأصدقاء لمعرفة ما انهم يضعون على رغبتهم. ولكن اليدين باستمرار، فإن أفضل طريقة يمكنك الدراسة هو أن يذهب من خلال كل شيء و برى عليه إلى ما ينبغي أو لا تنتمي على تلك الورقة من ورقة، لأن هذا هو مجرد حقا الطريقة مفيدة بالنسبة لك للتأكد من وأنت تسير من خلال كل شيء و لديك بعض الألفة معها. معظم الناس، نجد، على الرغم من أنها والورقة يجلس بجانبها على هذه المسابقة، لا تتحول لذلك، لأنه، مرة أخرى، أن جدا عملية الانتقال من خلال المعلومات وقد ساعد على تعلم ذلك. هل لدى أي شخص أي أسئلة حول مسابقة 0؟ لديه الجميع - أنا لا أذهب للقيام برفع الأيدي. لا تهتم. كنت ذاهبا لنسأل الذين بدأت الدراسة. لكنني لا أريد أن تجعلك جميع لن ترفع يديك. لذلك كما قلت - نعم، آفي، والمضي قدما. AVI: ماذا سيكون أمرا مفيدا لوضعه على بيجر واحد؟ الطالب: هذا متروك لكم. JASON هيرشهورن: يمكنك الحصول على لاستخدام حكمك. أشياء مفيدة لوضعه على بيجر واحد، إذا كنت الخلط حول يا كبير وقت التشغيل من أنواع مختلفة من عمليات البحث والأنواع، التي وضعت على هناك في الرسم البياني مدهش في متناول يدي. بهذه الطريقة، إذا كنت طلبت أن على مسابقة، لا تحتاج لمحاولة والشكل بها أو سبب من خلال وقت التشغيل. يمكنك فقط نسخ عليه. إذا نظرتم المسابقات الماضية، والكثير من مرات، يركض هناك أسئلة الزمن. بحيث سيكون مثالا جيدا شيء وضعت على جهاز النداء الخاص بك واحدة. الأشياء الجيدة الأخرى لوضع جرا، وإذا كنت الخلط حول كيفية إعلان وظيفة أو ما أجزاء مختلفة من تعريف الدالة هي، والكتابة أن هناك، إصدار عام وربما بعد ذلك مثال على ذلك. إذا كنت في حيرة من المؤشرات، رسم تخطيطي لكيفية مؤشرات العمل ربما من المفيد حقا. إذا كنت في حيرة من أمري العودية، و عينة دالة العودية على وجود ويمكن أيضا أن يكون مفيدا حقا. لا أن أقدم لكم بعض الأفكار؟ AVI: أنت بحاجة إلى فهم عملية تجميع بأكملها، مثل كيف أن جميع الأعمال؟ JASON هيرشهورن: كل شيء التي تم تغطيتها يمكن تظهر على هذه المسابقة. الأسئلة - ولكن مرة أخرى، وبعض الأمور ستكون مرجح بشدة أكثر من غيرها. قد تأتي بعض الأمور مرة أخرى ومرة أخرى في الصف، في محاضرة، والباب. أشياء أخرى لم يأتي ذلك في كثير من الأحيان. لقد تحدثنا كثيرا عن # تشمل و -L شيء وما يعني في تلك عملية تجميع. لقد تحدثنا كثيرا عن GDB، التشبث، تلك الأعلام المختلفة التي نستخدمها عندما نحن تجميع شيء، وماذا make15، على سبيل المثال، حقا ويعني حقا. ونحن لن نتحدث الكثير عن كل خطوة واحدة في عملية تجميع. لقد زالت تحدث حول هذا الموضوع. لذلك ما زال ما كنت يجب أن تكون على دراية. ولكن مرة أخرى، ونحن لن يكون - الأشياء التي تأتي في كثير من الأحيان في الصف من المرجح أن يأتي مزيد من في كثير من الأحيان ويكون بشكل أكبر المرجحة في هذه المسابقة. بارد. أي أسئلة أخرى حول مسابقة 0؟ موافق، لذلك أنا وضعت قائمة الموضوعات المدرجة على متنها. ذهبت من خلال المنهج. ذهبت من خلال استعراض القسم من الليلة الماضية وتلك الشرائح من أجل التوصل إلى مع قائمة غير حصرية من المواضيع أننا قد غطت حتى الآن في CS50 والأشياء التي قد تظهر على هذه المسابقة. لذلك أنا لن تذهب من خلال كل واحد من هؤلاء. التي من شأنها أن تأخذ أكثر من ذلك بكثير الوقت من لدينا الآن. ولكن أنا وضعت هذا الأمر هنا على أمل هرول الذاكرة الخاصة بك لالأشياء التي قد أو قد لا تكون مألوفة كما هو الحال مع لكم. وأحب أن تنفق الجزء الأكبر من قسم الإجابة على أسئلتكم حول هذه المواضيع، والمواضيع التي لم تتم تغطيتها هنا. يمكننا إرسال رمز زائف. يمكننا كتابة التعليمات البرمجية الحقيقي للتأكد من أنك - أستطيع أن أجيب على سؤالك ومساعدة الجميع فهم في الأساس الكثير من هذه المواضيع لذلك عليك أن تشعر استعداد ومريحة الخوض مسابقة غدا. وقراءة ذلك على القائمة. نأمل كنت قد وصلنا إلى القسم مع بعض الأسئلة كذلك. عندما تكون مستعدا، ورفع يدك ونحن سوف تبدأ. نضع في اعتبارنا، والأسئلة التي لديك، لم تكن هناك أسئلة غبية. سمعنا أن الكثير. والأسئلة التي لديك، وأنا على استعداد للمراهنة، العديد من الأشخاص الآخرين على حد سواء يجلس هنا ومشاهدة يكون كذلك عبر الإنترنت. حتى تتمكن من مساعدة الناس فقط عن طريق طرح الأسئلة. ماركوس. ماركوس: بين كومة و كومة، هناك ما قبل تخصيصها النسبة المئوية من الذاكرة وهذا ما يعرف بأنه وهذا هو مكدس أو الكومة؟ أو كيف يمكن أن تعمل بالضبط؟ JASON هيرشهورن: السؤال الكبير. أنا ذاهب إلى الوراء تتبع قليلا. لا الجميع - يرجى نكون صادقين هنا. أعرف أنني أطلب منك أن رفع الخاص اليد أمام زملائك. ولكن هناك الناس الذين يشعرون غير مريح مع مكدس كومة و وأود أن يذهب أكثر من ذلك وماذا يعني تلك؟ ارفع يدك إذا - موافق. شكرا لك. لذلك نحن في طريقنا للذهاب أكثر من المكدس و كومة حقا بسرعة ثم الانتقال إلى الإجابة على سؤالك. لذلك إذا وضعنا خارج مربع لتمثيل الذاكرة على جهاز الكمبيوتر الخاص بك، ما هي بعض الأشياء التي تذهب في هذا المربع؟ الرئيسية. وتتمثل المهمة الرئيسية. أين تذهب الرئيسي؟ الطالب: [غير مسموع]. JASON هيرشهورن: لذا سنقوم وضعت الرئيسي هنا. ماذا يذهب في هذا المربع؟ الطالب: إن الوظائف التي تقوم بالاتصال. JASON هيرشهورن: وظائف التي نسميها. وأين يذهبون؟ الطالب: في المكدس. JASON هيرشهورن: إنهم تذهب في المكدس. لذلك نحن ذاهبون لهذه الكلمة الشيء إلى هنا المكدس. ويصل أعلى، لدينا الكومة. حتى الذاكرة ليست مجرد صندوق من هذا القبيل. ولكنه في الواقع مشابهة جدا. انها سوف يكون هناك الكثير من صناديق على وأكثر، اعتمادا على كيفية كبيرة الخاص الكمبيوتر هو أو كيف كبيرة الذاكرة الخاصة بك. في الاقتباس، نهاية الاقتباس "القاع" هو المكدس. وهناك أشياء متعددة التي تذهب على المكدس. وهذه تعتمد على وظائف لديك في التعليمات البرمجية. لديك دائما وظيفة واحدة في حياتك كود يسمى الرئيسي، لذلك هناك دائما القسم أسفل هنا في كومة المكرسة لالرئيسي. هذه الأقسام في المكدس وتسمى إطارات المكدس. عند استدعاء وظيفة أخرى، ويقول الرئيسية يستدعي دالة البحث الثنائي، نضع إطار آخر على المكدس. وبشكل أكثر تحديدا، ونحن نذهب ل التبرع جزءا من الذاكرة على لدينا الكمبيوتر لتخزين ثنائي البحث في المحلية المتغيرات وتشغيل ثنائي رمز البحث. لذلك نحن ندعو البحث الثنائي. في هذا جزء من الذاكرة، ونحن في طريقنا لتخزين المتغيرات المحلية. ونحن في طريقنا لتخزين دعواتها printf. أيا كان ما سيحدث، وهذا هو وظيفة الذهاب ليتم تخزينها هناك. البحث الثنائي هو الذهاب الى تنفيذ. هو ذاهب لاستكمال التنفيذ. ما هي الكلمة التي تعني في C التي ينبغي وظيفة استكمال تنفيذه؟ الطالب: العودة. JASON هيرشهورن: الرجوع. لذلك كلما رأيت بيان المقابل، نهايات ظيفة عندما يضرب ذلك. والبحث الثنائي حتى ضرب عودتها. هذا الجزء من الذاكرة سوف أساسا تقرر الافراج عنه. والرئيسي يعود الى التنفيذ. لذلك سوف الرئيسي قفة أينما كان، والدعوة البحث الثنائي، والحصول على بعض قيمة الإرجاع، ومتابعة التنفيذ. وهذا الإطار مكدس يذهب بعيدا. إذا كنا استدعاء دالة العودية التي هي وظيفة تطلق على نفسها أكثر وأكثر، ونحن قد تحصل - يقول نحن فعلت البحث الثنائية بشكل متكرر. ونحن قد تحصل ثنائي البحث إصدار واحد، البحث الثنائي اثنين، البحث الثنائي ثلاثة، أربعة البحث الثنائي، البحث الثنائي الخمسة. ثم هذا البحث ثنائي الخمس الاخيرة سوف تصل الى حالة قاعدة، والمكدس سوف نعود إطارات والحفاظ إغلاق حتى نعود إلى الرئيسية. يمكننا أن نذهب أكثر في العودية قليلا. ولكن كل هذا هو أن أقول، إذا كنت استدعاء وظائف متعددة في وقت واحد، سوف يكون هناك كومة متعددة الإطارات على المكدس. كومة، من ناحية أخرى، يصل هنا، ليس عن وظائف، ليس للمتغيرات المحلية. انها لالمخصصة بشكل حيوي المتغيرات. لذلك فان هذه هي المتغيرات التي يمكن أن تكون تهيئة إما الرئيسي أو تعمل تلك المكالمات الرئيسي. في أي مكان في التعليمات البرمجية الخاصة بك، فإنها يمكن تهيئة. وتهيئة حيوي متغير المخصصة. ما وظيفة في C لا نستخدمها؟ الطالب: Malloc. JASON هيرشهورن: Malloc. استدعاء malloc. تحصل على مساحة من الذاكرة. وهذه المساحة من الذاكرة هو على كومة. وهذه المساحة من الذاكرة يبقى هناك حتى الكلمة الحرة. المتغيرات المخصصة بشكل حيوي في ذلك سوف كومة موجودة لطالما كنت نريدهم في الوجود، وأنها لن يذهب بعيدا حتى تقوم صراحة نقول لهم للذهاب بعيدا. يمكنك إنشاء لهم في وظيفة واحدة. مكدس الدالة سوف الإطار يذهب بعيدا. ولكن هذا المتغير سوف لا تزال موجودة في كومة حتى يتم تحريرها، يحتمل بواسطة الدالة التي تسمى البحث الثنائي أو أيا كان. حتى تلك المتغيرات كومة البقاء هناك لطالما كنت تريد لهم بالبقاء هناك. ويحصلون على وضع هنا. ثم المرحلة التالية يحصل على وضع هناك. أنها تبقي الحصول على شغل في، وأنها البقاء هناك حتى الكلمة الحرة. وأساسا، وكومة كومة، الحصول على سؤال ماركوس، و تنمو تجاه بعضهم البعض. وإذا ما واجهت بعضها البعض، وكنت قد استخدام ما يصل كل الذاكرة في جهازك وجهاز الكمبيوتر، والبرنامج إنهاء لأنك لا تملك أي ذاكرة أكثر من اليسار إلى استخدامها. بينهما، وهناك أشياء أخرى محتملة. ولكن بالنسبة للنطاق هذا بالطبع، كنت لا داعي للقلق بشأن ذلك. بحيث كان الجواب على سؤالك. لا تقلق. لكن ذلك كان الجواب طويل. كل ما تحتاج إلى معرفته هو سوف كومة كومة و- واحد يبدأ في الجزء السفلي. كومة لا. كومة من هناك. وسوف تنمو أقرب إلى بعضها البعض. وإذا ما تلمس، وهذا هو المشكلة. كنت نفدت الذاكرة. ولكن أيضا، بالإضافة إلى معرفة مكان و، ما تخزينها في كل من كومة كومة و. كورتيس. CURTIS: عندما تتصادم، غير أن تجاوز سعة مكدس؟ JASON هيرشهورن: عندما تتصادم، هذا ليس تجاوز سعة مكدس. تجاوز سعة المكدس هو منطقة مختلفة يمكننا أن نذهب أكثر إذا كنت ترغب في ذلك. حسنا، سوف نعود إلى ذلك في بعض الشيء. الطالب: ما هي كلمة دعا عندما ضرب بعضهم البعض، و كومة كومة و؟ JASON هيرشهورن: الآن، لا تقلق. أعرف فقط - سأجيب على هذا السؤال بعد انتهاء اليوم الدراسي. إذا ما واجهت بعضها البعض، كنت نفد من الذاكرة، لأنه ليس هناك المزيد الفضاء هناك. الطالب: عفوا، ما هو خطأ ثوانى؟ JASON هيرشهورن: إن القطاع يمكن أن يسمى خطأ ل- ذلك يعتمد ماذا يسمى خطأ في ثوانى. في بعض الأحيان، تجاوز الكدسة، وأنها سوف ويقول خطأ ثوانى كما الخطأ. الطالب: وماذا عن يعتبر إلغاء مرجعية متغير فارغة؟ غير أن خطأ ثوانى؟ JASON هيرشهورن: يعتبر إلغاء مرجعية مؤشر فارغة - حسنا، إذا كان لديك مؤشر بأنك تعيين يساوي فارغة، المؤشرات، الاستدعاء، عناوين الذاكرة مخزن كما قيمهم. ومؤشر فارغة هي في جوهرها تخزين 0، 0 عشر معالجة في هذا المتغير. حتى 0X، 0، 0، 0، 0، وهلم جرا. هذا العنوان 0 عشر في الذاكرة التي ليست في الصورة لدينا، وهذا حتى هناك في مكان ما، وهذا محفوظة للكمبيوتر. نحن لا يسمح لمسها. حتى عندما يكون تنفيذ البرنامج الخاص بك، إذا شيء يحاول أن يذهب إلى الذاكرة عنوان 0، فهو يعرف أن وهذا هو قيمة فارغة. فهو يعرف أن لا شيء هناك. حتى إذا حاولت استخدام شيء وهناك وشيء من هذا القبيل هناك علاج أو يحاول أن يذهب إلى هذا الموقع، وكنت سوف تحصل على خطأ ثوانى أو خطأ. لا أن أجيب على سؤالك؟ والآن سنذهب إلى الوراء لكومة تجاوز. الأشياء في المكدس، ويا ​​رفاق لديهم تشاهد من قبل، في - دعونا رسم قريبة تتكون من إطار المكدس. يمكن أن نرى أن الجميع؟ لذلك لدينا إطار المكدس لدينا. نحن توفير مجموعة واسعة باعتباره المحلية في المتغير في هذه الوظيفة. لذلك نقول لدينا مجموعة من خمسة البقع. سيتم تخزين كل خمسة من هؤلاء في هذا الإطار المكدس. إذا بدأنا الكتابة خارج حدود هذه المجموعة - لذلك إذا بدأنا في كتابة، دعنا نقول هذا هو 0. تلك هي مؤشرات خمسة من مجموعة لدينا. إذا بدأنا الكتابة في مؤشر 5، والتي ليس لدينا عندما يكون لدينا مجموعة من حجم 5، نبدأ الكتابة في المؤشر 6، 7، 8، 9، يمكن أن نحصل على المكدس خطأ تجاوز. عموما انها ليست - ربما كنت سوف ندخل في ورطة إذا ذهبت أكثر من جانب واحد. ولكن عموما، وسوف تحصل في معظم المتاعب إذا تذهب أكثر من قبل الكثير وتذهب حتى الآن أكثر من أن تكتب أكثر من عنوان المرسل من أن وظيفة، والذي يقع في الجزء السفلي من الإطار المكدس. لأنه، أليس كذلك؟ كنت - في - آسف. لا "لأن الحق." في إطار المكدس، لديك المتغيرات المحلية الخاصة بك. في الجزء السفلي جدا من المكدس الإطار هو عنوان المرسل. حيث ان وظيفة يذهب عندما انتهى. وإذا قمت بالكتابة فوق تلك العودة العنوان، ثم عندما يكون هذا الإطار المكدس، عندما كنت تمر مكدس تأطير وتنفيذ كل سطر، وكنت سوف تذهب إلى عنوانك عودة جديدة أن الذي كتبت هناك بدلا من واحد الفعلية. وهذه هي الطريقة التي شهدناها بعض الخروقات الأمنية يمكن أن يحدث مع أجهزة الكمبيوتر. تجاوز سعة مكدس ذلك، باختصار، هو عندما قمت بالكتابة فوق جزء في المكدس كنت من المفترض أن تستخدم والمحلية متغير كنت من المفترض أن تستخدم، و ولا سيما عند بدء الكتابة الأمور الهامة مثل العودة عنوان. وهذا هو المكان الذي سوف تحصل على خطأ. أو ربما حتى يمكن أن تبدأ حتى الكتابة في - يقول كان البحث الثنائي الحق فوق الرئيسي. إذا كنت بالكتابة فوق الكثير، كنت يمكن أن يكتب في الرئيسية. ولكن عموما، وتحصل على خطأ قبل ثم، وذلك لأن الكمبيوتر يعرف كنت تفعل شيئا كنت لا ينبغي أن تفعل. نعم. الطالب: ما الفرق بين تجاوز سعة مكدس وتجاوز سعة المخزن المؤقت؟ JASON هيرشهورن: تجاوز سعة المخزن المؤقت هو نوع أكثر عمومية من ما كنت وصفتها للتو. الطالب: إذن تجاوز سعة مكدس هو مثال على تجاوز سعة المخزن المؤقت. JASON هيرشهورن: بالضبط. هذا هو صفيف يمكن أن نفكر فيه باعتباره العازلة، مساحة للأشياء للذهاب. هذا هو كومة تجاوز سعة المخزن المؤقت. أننا يمكن أن يكون تجاوز سعة المخزن المؤقت الكومة. إذا كان هناك منطقة عازلة، والتي غالبا ما تكون هناك هو مجموعة الكومة، ونحن بالكتابة فوق تلك الحدود، ثم فإننا لديك كومة تجاوز سعة المخزن المؤقت. وخارج نطاق هذه الدورة، انهم الكشف بطريقة مختلفة قليلا. المترجم له خاصة طرق الكشف عن كل منها. ولكن تجاوز سعة المخزن المؤقت هو أكثر عمومية نوع ما وصفت، الذي كان كومة تجاوز سعة المخزن المؤقت. لم أن أجيب على سؤالك؟ الحلو. كان هناك أي أسئلة أخرى ذات صلة إلى المكدس أو كومة؟ نعم. الطالب: أنا أعلم أنك يجب أن سلاسل الحرة لأنهم في كومة وكنت لا تريد أن تسرب الذاكرة. لكن هل لديك لتحرير المتغيرات العالمية وأشياء من هذا القبيل؟ أم أنها تحررت تلقائيا؟ JASON هيرشهورن: سؤال جيد. حتى في CS50.H، ونحن خلق هذا الشيء بالنسبة لك ودعا سلسلة. سلسلة هو حقا ما؟ الطالب: شار نجوم. JASON هيرشهورن: نجم شار، وهو مؤشر إلى حرف، مؤشر إلى مجموعة من الأحرف. هذا ما هو السلسلة. لذلك نحن بحاجة لتحريره، لأن getstring، والتي استخدمنا الكثير - اسم السلسلة يساوي getstring - أن mallocs لنا بعض الذاكرة على كومة ومن ثم إرجاع المؤشر إلى الحرف الأول من ذلك سلسلة، نجم شار. لذلك ظاهريا، إذا لم تكن الكتابة الحرة على أي من سلاسل الخاص بك بعد أن كنت قد يسمى حتى الآن، لديك تم تسريب بعض الذاكرة. بالطبع نحن لم نتحدث عن عليه، حتى انها حصلت على أحد في مشكلة لفعل ذلك. ولكن للمضي قدما، نعم. عند استدعاء getstring، وكنت mallocing بعض المساحة على الكومة. وإذا لم يكن الكلمة الحرة في وقت لاحق على أن سلسلة، لديك تسرب الذاكرة. أن الإجابة على سؤالك؟ نعم الطالب: إذن للقيام بذلك، لا نستخدم الحق حرة قبل العودة؟ مثل، ضمن نطاق، وأنا أعتقد إذا نقول، مثل، الباحث الرئيسي، ضمن نطاق رمز هذا داخل تلك الأقواس المتعرجة، والحق قبل - كنت أعرف أين كنت عادة ما تضع العودة. هل وضعت حرة قبل ذلك؟ JASON هيرشهورن: وهكذا يمكنك وضع الحرة أينما كنت تريد أن تضع مجانية. لأن هذه يتم تخصيص حيوي متغيرات، لأن ما في وسعهم يعيش خارج نطاق معين وظيفة، إذا كنت استدعاء malloc في وظيفة منفصلة، ​​على سبيل المثال، getstring، يمكنك الكلمة الحرة في الرئيسية. لا تحتاج أن نسميها في وظيفة محددة حيث يتم استدعاء malloc. ولكنك تحتاج أن نسميها قبل أن تعود الرئيسي. وذلك يعتمد حقا. ذلك يعتمد على ماذا كنت malloced أن الفضاء في المقام الأول. بعض الناس سوف ندعو تحرير بسرعة كبيرة. بعض الناس لن الكلمة الحرة حتى نهاية برنامجهم. وأنها سوف تذهب من خلال وكل شيء مجاني. ذلك يعتمد على السبب الذي دعا malloc. الطالب: وماذا ستقول إذا كنت قد قمت بالإتصال استخدام getstring؟ وكنت أقول مجانية ماذا؟ JASON هيرشهورن: إذن بناء الجملة مجانا هو ببساطة الحرة، PAREN مفتوحة، على مقربة PAREN، واسم المؤشر. لذلك إذا كنت أكتب سلسلة متساوين اسم getstring، كنت وضعت اسم هنا. هذا هو اسم المؤشر. وكان يعرف لتحرير تلك الذاكرة. الطالب: لذلك عندما يحرر تلك الذاكرة، المؤشر لا يزال يشير إلى ذلك المكان في الذاكرة؟ أو هو مؤشر أفرغت أيضا العنوان الذي يشير إلى. JASON هيرشهورن: نحن يجب أن تحاول ذلك. يجب علينا أن رمز. دعونا نعود عندما نصل إلى الترميز، ودعونا رمز ذلك. وإذا كنت ترغب في معرفة الجواب إلى ذلك، يمكنك أيضا التعليمات البرمجية التي في هذه الأثناء. ولكن هذا سؤال كبير. الطالب: هل من الممكن ل شيء مجانا قريبا جدا؟ لذلك كنت لا تزال في حاجة إليها لبرنامجك، وكنت حررت أن مساحة الذاكرة؟ JASON هيرشهورن: نعم. فمن الممكن، إذا كنت شيء مجانا ومن ثم يمكنك استخدامه مرة أخرى، وسوف واجهت خطأ. ولكن هذا عليك، لأنك حررت شيء ثم يطلق عليه في وقت لاحق. بحيث كان خطأ من مبرمج. ولكن نعم. هل يمكن أن يكتب ذلك. أي أسئلة أخرى حول - نعم. الطالب: حتى إذا كان من المفترض أن كنت للتو تحريرها في العام قبل ينتهي البرنامج، فهل هذا يعني إذا كان البرنامج ينتهي وأنت لا تحريرها، لا يزال تخصيص الذاكرة؟ JASON هيرشهورن: إذا ينتهي البرنامج وكنت قد نسيت لتحرير شيء، ثم تم تخصيص تلك الذاكرة طوال عمر البرنامج. عندما يغلق البرنامج تماما، أن الذاكرة لن البقاء هناك إلى الأبد. الكمبيوتر ذكي بما فيه الكفاية لمعرفة أن عند إغلاق البرنامج، فإنه يجب التخلص من كل من الذاكرة التي كان مرتبطا مع هذا البرنامج. ومع ذلك، هناك الأدوات التي يمكن تشغيلها على برنامج للكشف إذا، عندما انتهى البرنامج، كنت قد نسيت لتحرير بعض الذاكرة. وعن مشكلتك المقبل حيث تحدد عليك أن تكون باستخدام malloc واستخدام مؤشرات، وسوف يتم تشغيل هذا برنامج على برنامج لمعرفة ما إذا كان، عندما يعود الرئيسي، كان لديك بعض الأشياء التي تركت unfreed. حتى انهم لا تنوي البقاء malloced إلى الأبد في جهاز الكمبيوتر الخاص بك. من شأنها أن تكون الإسراف، لأن بسرعة كبيرة، وأجهزة الكمبيوتر سوف نفاد الذاكرة. ولكن إذا كانت تستمر حتى نهاية الخاص برمجة وانهم لم يطلق سراح والخاص إنهاء البرنامج، وهذا لا يزال يمثل مشكلة أن هذه الأداة سوف تساعدك على معالجتها. الطالب: هل هذا Valgrind؟ JASON هيرشهورن: انها دعا Valgrind. وعليك أن تكون - الطالب: ولكن ليس لدينا لمعرفة أن لهذه المسابقة، على الرغم من؟ أعني، وقد تحدثت عن ذلك قليلا في المحاضرة. JASON هيرشهورن: حتى Valgrind هو اسم تلك الأداة. معرفة ما تقوم به هو بما فيه الكفاية لهذه المسابقة. ولكنك لم تستخدم حتى الآن على هاتفك مشكلة تعيين لأننا لم تكن لديهم مجموعة المشكلة التي تعاملت بشكل صريح مع malloc أو هل تستخدم malloc. لذلك كنت لم تستخدم Valgrind حتى الآن. ولكن سوف تستخدم ذلك عاجلا وليس آجلا. الطالب: هل يمكن أن يتكرر ما هو Valgrind؟ JASON هيرشهورن: عذرا؟ الطالب: هل يمكنك تكرار ما الغرض من Valgring هو؟ JASON هيرشهورن: Valgrind هو اسم - مثل GDB يساعدك على تصحيح البرنامج الخاص بك، Valgrind يساعدك على معرفة ما اذا كان لم يتم اطلاق سراح الأمور عندما يغلق البرنامج. لذلك عليك تشغيلها على البرنامج. ويخرج البرنامج، وأنه سوف يقول ودعا البرنامج malloc هذا العدد الكبير من مرات عديدة لهذا بايت، وكنت دعا حرة فقط هذا مرات عديدة. وهكذا تركت هذه العديد من بايت دون أن يطلق سراحه. أو أنها سوف نقول لكم لقد تحررت كل شيء. وظيفة جيدة. الطالب: OK. وانه دعا Valgring؟ JASON هيرشهورن: V-A-L-G-R-I-N-D. الطالب: سؤال حول المؤشرات. لذلك نقول لكم لقد نجم ن x تساوي شيئا. الذي يساوي، مهما كنت وضع هناك، هو أن ما يجري وضعها داخل س ما يتم الإشارة إلى، أو المؤشر س؟ JASON هيرشهورن: هل لك تكرار السؤال؟ يمكننا استدراجه بينما كنت أقول ذلك؟ الطالب: في هذه المسابقة، في الواقع، و واحد كنت أرسلت لنا، وكان مثل، شار نجمة الحقيقة يساوي الصخور CS50، أليس كذلك؟ فهل يعني ذلك أن تلك الصخور CS50 ما الحقيقة يشير إلى؟ JASON هيرشهورن: إذن أنت تتحدث حول نجم شار في سلسلة، كيف الذي يعمل؟ نعم. موافق. دعونا رسم هذا أكثر من هنا. [SIDE حوار] JASON هيرشهورن: إذن هذا المتغير سيكون من نوع شار نجوم. كيف كبيرة هو متغير نجم نوع شار؟ كم عدد وحدات البايت؟ الطلبة: أربعة. JASON هيرشهورن: انها أربعة بايت. كيف كثير من الحقوق هو متغير نجم نوع int؟ الطلبة: أربعة. JASON هيرشهورن: أربعة بايت. إذا كان مؤشر، ثم هو دائما أربعة بايت، لأن المؤشرات، على القيمة هو عنوان الذاكرة. وعناوين الذاكرة على CS50 الأجهزة أربعة بايت. لذلك عندما نطالب getstring أو عند قيامنا مثلا، يساوي stringname، ثم في التنصيص وضع سلسلة، نحن نضع - حسنا، هذا هو مختلف قليلا. سنفعل getstring كما في المثال. أو شيء نجمة شار تساوي السلسلة. آسف، أعطني مثال أن تقرأ؟ الطالب: شار نجمة الحقيقة يساوي "الصخور CS50" في علامات اقتباس مزدوجة. JASON هيرشهورن: إذن هذا النجم، وهذا وسوف ندعو هذا المتغير س لدينا أغراض عامة. قمنا بإنشاء متغير يسمى خ. انها نوع شار نجوم. بل هو مؤشر إلى سلسلة من الأحرف. حتى أسفل هنا - لذلك هذا هو كيف أن هذا من شأنه العمل في الذاكرة. وهذا من شأنه تخزين عنوان الذاكرة. فإنه تخزين عنوان الذاكرة الحرف الأول في المصفوفة. ثم عند يتبع المؤشر، تفعل الحصول على الحرف الأول. وإذا كنت تقرأ هذا الشيء مثل سلسلة، الكمبيوتر الذكية يكفي أن نعرف، وقراءة هذا الشيء كله حتى يحصل على رد فعل عنيف 0. ولكن إذا كنت تقرأ ذلك الطابع في وقت واحد، لذلك كنت بالتكرار عبر هذه السلسلة، فإنك سوف مجرد قراءة الحرف في وقت واحد حتى تحصل على مائل 0. قد لا يجيب لكم السؤال، وإن كان. الطالب: نعم، ولكن ليس لديك malloced أن الفضاء بعد لهذا المؤشر. JASON هيرشهورن: لذلك أنا لست متأكدا تماما بالضبط ما كنت تبحث في، لأنني لم أكن جعل هذا الاختبار. كان من المفترض أن تكون مفيدة أن الموارد من TF آخر. إذا كنت تقوم بإنشاء سلسلة على كومة أو كمتغير المحلية، وأنها سوف يكون مجرد مجموعة من التهم بدلا من عموما نجم شار لافتا إلى سلسلة أخرى. ولكني لا أعرف. يمكن أن تكون مؤشر لآخر سلسلة على المكدس كذلك. نعم. الطالب: أنا أعلم أنك تحتاج إلى تخصيص الذاكرة إذا كان المؤشر أعلن الحصول على داخل من وظيفة أخرى. لا تحتاج إلى أن تفعل الشيء نفسه لو كان أعلن يجري داخل الرئيسي، كنت استخدامه داخل الرئيسي؟ JASON هيرشهورن: لذا نعم. يمكنك يعلن مؤشر إلى أي عنوان الذاكرة في الذاكرة. يمكن أن يكون عنوان ذاكرة المحلية متغير، على الرغم من كثير من الأحيان، الناس لا تعلن عناوين الذاكرة إلى المتغيرات المحلية لأنها تذهب بعيدا مرة واحدة أن يعود ظيفة، والتي هو السبب في أننا malloc عموما الأشياء. ولكن نعم، هل يمكن أن تعلن مؤشر لمتغير محلي آخر. مجرد عادة لا يتم ذلك. ولكن يمكنني أن نلقي نظرة على ذلك شيء محدد بعد انتهاء اليوم الدراسي. نعم. الطالب: أعتقد أن هذا هو نوع ما هو المطلوب. فإنه لا يبدو غريبا أن يتم تهيئة مؤشر ليس بوصفه عنوان، ولكن كما ما يبدو وكأنه القيمة. يبدو أن CS50 هو ما يدور في داخل الشيء الذي أشار إلى و ليس العنوان الفعلي، أليس كذلك؟ JASON هيرشهورن: ولهذا لم يكن الأمر كذلك، وإن كان. هذا ليس ما يحدث. عندما تقوم بتعريف نجم شار، انها عنوان الذاكرة. المؤشرات كلها عناوين الذاكرة لافتا إلى شيء آخر. ان هناك شيئا آخر يمكن أن يكون على المكدس، ولكن هو دائما تقريبا على كومة في الطريق سنرى استخدامه. ولكن stringname يساوي اقتباس مزدوجة "getstring،" يمكننا أن نرى ذلك ونحن يمكن أن ننظر من خلال ذلك، ورمز ذلك. لا يتم حفظها في سلسلة getstring هذا المتغير، أو أيا كان السلسلة يتم لا يتم حفظ الاسم في ذلك متغير، لأن هذا ليس كيف العمل المؤشرات. فهل هذا يعقل؟ الطالب: نعم. JASON هيرشهورن: OK. نأمل، أن لم يكن مربكة لأحد. ولكن إذا كان، يمكننا أن ننظر في الامر مرة اخرى في بعض الشيء، لأننا ذاهبون فعلا إلى رمز الشيء الذي يؤمل العمل مع سلاسل وتساعدك على الشعور أكثر راحة معهم. أي أسئلة أخرى تتعلق بهذه الموضوعات أو الموضوعات الأخرى التي أنا وضعت نسخة احتياطية؟ و- الآن. نعم، الدن. ALDEN: لذلك هذا هو لا علاقة لها تماما، ولكن يمكننا فقط يذهب أكثر بسرعة حقا ما نحتاج إلى معرفته حول الفرق بين 32 و جهاز 64 بت؟ JASON هيرشهورن: نعم. حتى 32 بت هو عدد وحدات البايت؟ ALDEN: انها أربعة بايت. JASON هيرشهورن: انها أربعة بايت. و 64 بت هو عدد وحدات البايت؟ الطالب: ثمانية. JASON هيرشهورن: ثمانية بايت. ذلك مرة أخرى، وثمانية بت بايت واحد. الأجهزة CS50 الخاص بك هو آلة 32 بت. حتى عناوين الذاكرة أربعة بايت. هناك 2 إلى 32 عناوين الذاكرة. 0-2 إلى ناقص 1 32. وأنا لست إيجابية، ولكن هذا ربما في نطاق ما تحتاج إلى نعرف على وجه آلة 32 بت، تلك الذاكرة عناوين هي، مرة أخرى، أربعة بايت، وهذا هو الحد الأقصى للمبلغ من عناوين الذاكرة. أيضا، وأنواع البيانات - هذا قد يكون شيء ما جيدا أن من الجدير بالذكر. حجم نوع البيانات يعتمد على الجهاز كنت تعمل مع. لذلك شار، حرف واحد، هو كيف العديد من وحدات البايت على موقعنا على الأجهزة CS50؟ بايت واحد. وانها في الواقع بايت واحد كما بشكل جيد على جهاز 64 بت. ومعظم أنواع البيانات هي نفس العدد من بايت على الجهازين. ولكن بعض أنواع البيانات ستكون مختلفة على الجهازين. بحيث سيكون يحتمل أن الشيء الوحيد الذي تحتاج إلى معرفته. ولكن حتى هذا، كما أعتقد، هو أبعد حدود - أنا واثق تقريبا، إذا كنت ننظر إلى الوراء في مسابقات القديمة، فإنه يقول، تفترض ل الترميز المشاكل التي تستخدمه آلة 32 بت. ولكن هناك، للذهاب إلى جانب أنه في حال كنت مهتما، وهناك أنواع البيانات التي هي نفسها حجم على كافة الأجهزة. إذا كنت قد رأيت شيئا من هذا القبيل uint32_t، كنت قد تكون أو لا لم أر ذلك. هذا هو نوع البيانات. هذا ما يقول، يكون 32 بت بغض النظر عن ما هذا الجهاز في وضع التشغيل. حتى عندما يكون الناس الكتابة المحمولة رمز، وأنها ربما لن تستخدم رجات. بدلا من ذلك أنها سوف تستخدم هذه البيانات الأخرى سوف أنواع أنهم يعرفون أن تكون هي نفسها الحجم على كل جهاز واحد. مادو. مادو: كان لي سؤال حول عملية تجميع. لذلك إذا كنت تكتب برنامج يستخدم مكتبة مثل CS50 أو شيء من هذا القبيل، وأنا أعلم أن تلك المكتبة لديه، في مرحلة ما، يكون جمعت وربطت فيها. ولكن كم من هذا يحدث أثناء تجميع برنامجك؟ ما هو جزء من تلك العملية المكتبة يحدث عندما كنت تجميع البرنامج الخاص بك؟ JASON هيرشهورن: لذا دعونا نذهب أكثر عموما خطوات هذه العملية. تكتب الخاص بك. ملف ج. في الخاص بك. ملف ج، كنت # تتضمن الخاص المكتبات رأس، على سبيل المثال، cs50.h. ماذا يفعل ذلك حادة تشمل خط القيام به لبرنامجك؟ Akchar. AKCHAR: وتضيف النماذج من وظائف من رأس الملفات في المكتبات. JASON هيرشهورن: بالضبط. وتضيف تلك النماذج الدالة إلى التعليمات البرمجية. لذلك عندما يتم ترجمة التعليمات البرمجية الخاصة بك في في المراحل المبكرة، يعرف المترجم أن هذه الوظائف موجودة حقا، و أنه في مكان ما أنها تم تعريفها. الملفات. ح لا تشمل تعريفات لهذه الوظائف أو كيف أنها تعمل في الواقع. Cs50.h يشمل مجرد شيء أن يقول getstring هو الشيء الحقيقي الذي يمكن أن يحدث. ويقول standardio.h printf هو شيء حقيقي يمكن أن يحدث. رأس ذلك لغة ج الخاص بك مع هذا. يحصل تحول الملف إلى بعض كود المقروءة آليا والتي في النهاية يحصل تحول إلى ثنائي رمز، و0 1 في. وهذا هو الرمز الذي في نهاية المطاف يعدم. للل خط CS50 - على سبيل المثال، عندما كنت تكتب ضجيج - ثم قمت بتضمين-L CS50، كنت اكتب فيها أن وأنت ترى ذلك. عند إرسال جعل، عليك نرى أن التشكيلة هنا. وسنرى ذلك في الثانية عندما نحن رمز أو في وقت لاحق عندما كنا التعليمات البرمجية. ولكن هذا الخط CS50-L لا شيء مختلفة بعض الشيء من تشمل # cs50.h. ماذا الخط الذي CS50-L تفعل؟ افي؟ AVI: أريد أن أقول أنه يربط ما بين المكتبة إلى وظيفة الدعوة، مثل ملفات س. JASON هيرشهورن: إذن جدا وثيقة، إن لم يكن على الفور. للل CS50 يأخذ ملف ثنائي و يدمج مع ملف ثنائي لديك. حتى cs50.h، وليس هناك نقطة تحول في cs50.h من لغة C إلى ثنائي كل مرة واحدة يجري استخدامها. من شأنها أن تكون سخيفة، لأن ذلك سوف تضيع الكثير من الوقت. لذلك تم بالفعل تحويلها برمجيا وتحولت إلى ملف قابل للتنفيذ. والآن سوف يتم دمج مع الملف الخاص بك في نهاية المطاف. حتى أولئك في 1 و 0 تسير دمج مع اولادكم و0 في نهاية. وحتى الآن سيكون لديك في الواقع الفعلي 1 و 0 التي تحدد كيفية getstring، على سبيل المثال، يعمل، أو كيف printf، على سبيل المثال، يعمل. ولمزيد من المعلومات، هناك المجمعين القصيرة التي نيت يعطي أن يجب أن تحقق من أن يذهب من خلال هذه الخطوات. ولكن - نعم. الطالب: هل هم دائما في ملفات س. عندما يكونون في شكل مكتبة، جاهزة للدمج، ربط - مثل انهم في الشفرة الثنائية؟ JASON هيرشهورن: OK. ما - الطالب: هل هذا هو الحال دائما ل المكتبات عند ربطها؟ JASON هيرشهورن: نعم. ولذلك لا يوجد. ق الملفات، والتي ستكون رمز الجهاز، والتي ستكون أيضا خفي لك. كنت لا داعي للقلق بشأن هؤلاء. ولكن عموما، نعم، أنها سوف يكون في. س ملفات جاهزة للذهاب. الطالب: حتى عندما كنت السفينة مكتبة، لا تقوم بشحن فقط و. ح و. س؟ كنت لا السفينة أو ج. ق. JASON هيرشهورن: وهكذا - وهذا هو في هذا قصيرة وكذلك، إذا ويبدو أن هذه المعلومات القادمة من قليلا بسرعة. ولكن على المدى القصير على المجمعين يتحدث عن هذا أيضا. عند شحنه مكتبة، إذا كنت السفينة و. ح، ملف الرأس، وتلك نماذج وظيفة، وعلى 1 و 0، وهذا كل ما عليك أن تعطي. لا تحتاج لإعطاء كيف تعمل وظيفة، وملف ج. لأن نقطة من التجريد، أو وتشير واجهات برمجة التطبيقات، وهذه النقطة في هذه SPL، المكتبة المحمولة ستانفورد، انها لك أن لا تقلق حول كيفية جديدة GRect يعمل، أو كيف يتحرك الأعمال، أو كيف تضيف الأعمال. كل ما تحتاج إلى معرفته هو أن الوظيفة هي الدالة التي يمكن استخدام، وأنه يفعل ذلك. لذلك كنت حقا لا تحتاج إلى معرفة كيفية انها مكتوبة في C. تحتاج فقط ل تعرف، هنا وظائف، ما القيام به، وهنا ال 1 و 0 عندما كنت تريد حقا أن استخدامها. بارد. أي أسئلة أخرى على المجمعين أو مواضيع أخرى على متن الطائرة؟ الطالب: لدي سؤال من تنفيذ المهام العودية. سؤال عن العودية. كان لدي شعور التي من شأنها أن تأتي. لذلك دعونا نذهب بسرعة من خلال العودية مع محددة سبيل المثال، وهي وظيفة مضروب. لأن هذا هو مثال غالبا ما يأتي أو يستخدم لتوضيح العودية. حتى "4"! ونصها كما 4 مضروب. وماذا يعني 4 مضروب؟ ماذا تفعل ذلك؟ كيف يمكن حساب 4 مضروب؟ 4 مرات 3 مرات 2 مرات 1. حتى طريقة أخرى لإرسال 4 مضروب هو أن أكتب هذا. 4 مرات 3 مضروب. لأن مضروب هو 3 3 مرات 2 مرات 1. حتى 4 مرات 3 مضروب هو 4 مرة 3 مرات 2 مرات 1. هذا هو السبب في مضروب هو عظيم مرشح لالعودية، لأنه من الواضح أن هناك شيء ما يحدث مرارا ومرارا وتكرارا على عدد أصغر من الأمور حتى تصل إلى نهاية. عندما تصل إلى 1، 1 مضروب هو 1. لا يمكنك الذهاب أبعد من ذلك بكثير. ويعرف أيضا مضروب 0 ك 1. لذلك عندما تحصل على 1 أو 0، كنت في النهاية، ويمكنك بدء تسير احتياطية. لذلك إذا أردنا أن يكتب العودية وظيفة لحساب مضروب، ونحن في طريقنا إلى كتابة بعض شبة الكود لذلك الآن. قبل أن نكتب شبة الكود - سأعطيك الرجال بضع دقائق لكتابة التعليمات البرمجية الزائفة أو مجرد التفكير عن ذلك - هناك نوعان من الأشياء كل يحتاج وظيفة العودية. ما هي تلك الأشياء اثنين؟ جاك: انها لاستدعاء نفسها. JASON هيرشهورن: نوح؟ أوه، جاك. المضي قدما. جاك: انها لاستدعاء نفسها. JASON هيرشهورن: حتى العودية يحتاج وظيفة مكالمة العودية، و دعوة إلى نفسه. هذا هو واحد. وما هو الشيء الآخر؟ جاك: هناك حالة من القاعدة. JASON هيرشهورن: هناك حالة من القاعدة. وهناك حالة القاعدة، وهنا عندما نتوقف. حتى يحصل على وظيفة تسمى الخاص بك. الحالة الأساسية يأتي أولا. كنت تريد أن تعرف إذا كنت في نهاية المطاف. وإذا كنت لا في النهاية، كنت إجراء مكالمة العودية الخاص بك. وتذهب من خلال هذه الوظيفة مرة أخرى، تحقق حالة الأساسي الخاص بك مرة أخرى. إذا كنت لا نهاية، وجعل لكم دعوة العودية آخر، وهلم جرا، وهلم جرا. هذا هو السبب في وظائف العودية دائما تحتاج تلك الحالات وتلك قاعدة دعوات متكررة. إذا لم يكن لديك مكالمة العودية، فإنه لن تكون وظيفة متكررة. إذا لم يكن لديك حالة الأساس، كنت أذهب إلى الأبد، و لن تكون هناك نهاية. والحالة الأساسية دائما يأتي أولا، لأنك سوف تحتاج دائما للتحقق إذا كنت في نهاية العشرين. حتى قبل ان نفعل بعض شبة الكود، لماذا لا تأخذ دقيقة واحدة للتفكير كيف وظيفة مضروب العودية أن تكون مكتوبة؟ أيضا، العديد من مثل تقومون به، والكتابة من ذلك على ورقة من الورق ما كنت ستكون لدينا ل القيام على مسابقة غدا. الممارسة حتى ربما جيدة لجعل تأكد رمز كنت تكتب أسفل على ورقة من الورق - أو يمكنك أن تفعل ذلك. كنت أعرف أين هي المنقوطة. تتذكر بناء الجملة. لأنك لن تكون قادرا على أن يكون مترجم اقول لكم ارتكب خطأ. أيضا، على هذا المنوال، وغدا، عندما لديك مشاكل الترميز، إذا كنت وهرعت للوقت، أو إذا كنت جدا الخلط حول كيفية كنت من المفترض أن كتابة شيء معين في ج، فإنه سيكون لزاما عليك أن تكتب الزائفة رمز أو إرسال تعليقات في كذلك. لأن هناك الائتمان الجزئي ل الكثير من الأسئلة على هذه المسابقة. لذلك قد تكون متسرعة، أو لك قد يكون مجرد الخلط. الكتابة في تصريحات أو الزائفة رمز وغالبا ما تكون الطرق التي يمكن الحصول على الائتمان الجزئي. حتى لا تترك شيئا فارغا على هذه المسابقة. ليس هناك عقوبات ل وضع الأشياء فيه. في الواقع، واضعين في الزائفة رمز أو تعليقات هو الذهاب الى مساعدة الصف معرفة إذا كنت تعرف فعلا ما كنت تتحدث عن، وربما جائزة لك بعض الائتمان الجزئي لذلك. أيضا على طول تلك الخطوط، الكتابة بشكل واضح. إذا لا يمكننا حقا ما كنت تكتب، نحن لن ندعو لكم في منتصف الليل غدا لشخصية ما كتبته. نحن ذاهبون لمجرد خلع نقطة. الكتابة بشكل واضح حتى نتمكن من سماع، أو بالأحرى، يمكننا قراءة ما كتبته. وإذا كان يقول جملتين، لا تكتب فقرة. اتبع الإرشادات. الكتابة بشكل واضح. والكتابة في تلك التعليقات أو شبة الكود للأسئلة التي يمكن أن جائزة الائتمان الجزئي. حسنا، دعونا نذهب إلى مضروب. لذلك لدينا وظيفة مضروب. إذا كان لي أن أكتب هذا في الواقع في C، ما الذي أحتاجه لوضع قبل اسم وظيفة؟ نوع الإرجاع، والتي، في هذا الحالة، فإننا سوف تعطيه كثافة العمليات. ثم داخل الأقواس المتعرجة، هو ما يدور داخل الأقواس المتعرجة ل وظيفة؟ الطلاب: نوع وسيطة. JASON هيرشهورن: حججه. مضروب ذلك سوف ربما اتخاذ حجة. انها سوف ربما يستغرق سوى حجة واحدة. وسوف نقول انها سوف تتخذ عدد صحيح يسمى خ. ومرة أخرى، عند كتابة النموذج الأولي وظيفة أو كتابة وظيفة في التعليمات البرمجية قبل تحديد ذلك، ل إرسال نوع البيانات واسم هذا المتغير لتلك الوظيفة فقط. حتى تتمكن من تمرير بعض الرقم في هذا وظيفة، فإنه سوف يكون ويشار إلى خ داخليا. لدينا وظيفة مضروب لدينا. نحتاج شيئين، والحالة الأساسية ودعوة العودية. ما هي الحالة الأساسية للمضروب؟ شخص الذي كتب بها والذين لم تحدث بعد، ما هو الأساس الحال بالنسبة للمضروب؟ الطالب: إذا كان n أقل من 2، 1 العودة. JASON هيرشهورن: إذا كانت n هي أقل من 2، 1 العودة. وأنا أحب ذلك، لأن ذلك يعتني 0 و 1. ولذا فإننا سوف نبذل س <2، والعودة 1. إذا كنا الحصول على تمرير 0، اذا حصلنا على مرت 1، وهذه وظيفة العودة فورا 1. إذا كنا الحصول على تمرير بعض أكبر عدد من أو يساوي 2، ونحن في طريقنا ل وجود مكالمة العودية لدينا. وفكيف هو أن الذهاب إلى العمل؟ يمكن شخص آخر الذين عملوا على هذا الذي لم يتحدث بعد تعطيني دعوة متكررة لهذه الوظيفة في شبة الكود؟ إذا كنا في الحصول على تمرير العدد x وانها أكبر من 2، ما لا نريد أن نفعل؟ لدينا أيضا مثال مكتوبة على الجانبية التي قد تعطيك تلميحا. الطالب: دعوة مرات س و مضروب س ناقص 1؟ JASON هيرشهورن: الحق بالضبط. ونحن في طريقنا للعودة مرة س مضروب س ناقص 1. وأنه، على الرغم من أنني كتبت حتى، أساسا، ما قلته في اللغة الإنجليزية، هذه الوظيفة مضروب سوف الحصول على استدعاء مرة أخرى. انها سوف تنفذ على س ناقص 1. انها سوف تعود مع بعض صحيحا، و ثم أنها سوف تتضاعف هذين معا، وهذه القيمة ستكون عاد إلى ما يسمى هذا وظيفة مضروب، والتي قد يكون مثيل آخر من هذه الوظيفة مضروب. لذلك هذا هو مثال على العودية وظيفة، وهو جدا وظيفة بسيطة متكررة. ولكن معظمها سيكون مثل هذا. إذا كنت ترغب في الحصول على العودية جيدة تحدي للمسابقة، في محاولة الترميز البحث الثنائية بشكل متكرر. لأنه إذا فعلتم البحث الثنائي ل مشكلة تعيين ثلاثة، وربما كنت فعلت هذا تكراري في حلقة من الوقت. ولكن يمكن أيضا أن تكون مكتوبة بشكل متكرر. وأنت تسير في حاجة إلى الكتابة الخاصة بك وظيفة منفصلة أن يأخذ بعض مختلف وسائط سطر الأوامر - أو لا سائط سطر الأوامر، وبعض مختلف الحجج مجرد العادية. ولكن هل يمكن إرسال البحث الثنائي بشكل متكرر أيضا. الطالب: إذن كنت قد كتبت أيضا، بدلا من العاشر ناقص 1، كنت قد كتبت أيضا س ناقص ناقص، أو هل يمكن أن يكون كتابة ناقص ناقص س. يمكنك فقط شرح بسرعة حقا لماذا تلك ستكون الأمور مختلفة، مثل ما هو الفرق بين س ناقص ناقص وناقص ناقص س؟ JASON هيرشهورن: لا، أنا لست سوف يذهب الى ذلك. ولكنني لن أتحدث إليكم عن بعد الطبقة. س ناقص ناقص، ناقص ناقص س إنقاص x عن طريق 1. لكنها تفعل ذلك بطريقة مختلفة قليلا. ولكن أنا لا أريد أن أخوض في ذلك. أسئلة أخرى حول العودية أو هذه الوظيفة؟ هذا ليس حقا حتى شبة الكود. هذا في الأساس هو رمز في سي يو سيكتب لهذا الغرض. OK، أي أسئلة أخرى حول مواضيع هنا؟ نعم. الطالب: لدي سريع المتهدمة النقطة العائمة والدقة. JASON هيرشهورن: العائمة نقطة والدقة. يمكن للشخص حقا بسرعة تعطيني المتهدمة من النقطة العائمة والدقة؟ كان بكم جميعا في القيام بذلك لديك مشكلة تعيين، لذلك كنت كل على دراية به. أو ربما ليس كل واحد منكم. أي شخص؟ أعطني بقعة بدأت. النقطة العائمة والدقة. ما هي المشكلة؟ نعم. فيكتوريا؟ VANESSA: فانيسا. JASON هيرشهورن: فانيسا. آسف. VANESSA: هناك سوى عدد محدود من الأرقام التي يمكن أن تكون ممثلة لأنك على ذلك، في منطقتنا حالة، ونظام 32 بت. بحيث يكون لديك نوع من ل تشكل بعض الأرقام. JASON هيرشهورن: ولهذا صحيح تماما. لا يوجد سوى كمية معينة من الأرقام التي يمكن أن تكون ممثلة. إذا كنت ضرب رقمين كبيرة جدا، أنه قد تجاوز مبلغ من المساحات لديك لتمثيل عدد صحيح. هذا هو السبب في بعض الأحيان نستخدم طويل بدلا من كثافة العمليات. الذي يحتوي على أكثر مسافات. يمكن أن تعقد عددا أكبر. الدقة العائمة نقطة له علاقة مع ذلك، ولكن أيضا له علاقة مع حقيقة أن الأرقام العشرية هي لا يمثل دائما. آسف. اسمحوا لي أن أطرح هذا احتياطية. عدد عشري 1.0 ليست دائما ممثلة مثل تتوقعون، 1.000000000. ويمثل في بعض الأحيان على أنها 1.000000001 0.999999999 أو. أنه قد يكون حتى 89 القيت في مكان ما هناك. حتى تلك الأرقام العشرية ليست ممثلة بالضبط كأنك نتوقع منهم أن تكون ممثلة. حتى في مشكلة تعيين - كان اثنين؟ - مشكلة تعيين اثنين، حيث تعاملنا مع أرقام النقطة العائمة، عندما كنا نريد منهم لتمثيل بالضبط ما كنا نريد منهم لتمثيل، وعدد من البنسات، أو عدد سنتا، ضربنا لهم من قبل 100. نحن تقريب لهم. ثم نقطع كل شيء وراء الفاصلة العشرية. كان ذلك للتأكد من أنها سوف متساوية في الواقع بالضبط ما أردنا لهم على قدم المساواة. لأنه عندما كنت تأخذ شيئا هذا وتطفو وتحويلها إلى كثافة العمليات، كنت تقطع كل شيء إلى اليمين الفاصلة العشرية. لأن هناك بعض النقطة العائمة عدم الدقة، قد يكون 100.000 ممثلة 99،999999999. وإذا كنت خفض قبالة كل شيء ل الحق الحق بعيدا، وأنت تسير ل الحصول على رقم خاطئ. نعم. الطالب: كان لي سؤال عن الصب. ما يحدث في النظام؟ إذا كنت تفعل تطفو، بين قوسين، 1 تقسيم بنسبة 10، وأنها لا تفعل 1 مقسوما على 10، ثم الحصول على 0.1، ثم اتجه قبل أن تتحول إلى تعويم؟ JASON هيرشهورن: إذا قمت بذلك تطفو 1 مقسوما على 10 - الطالب: نعم، ويساوي ثم - حسنا، انها تفعل عادة يكون ذلك على قدم المساواة في - نعم. كنت تريد أن تجعل من تعويم، أليس كذلك؟ JASON هيرشهورن: موافق، لذلك نحن ذاهبون ل استخدام ذلك لسغ] إلى معرفة إجابات لهذه الأسئلة من خلال الترميز. لأنك سوف ربما لديك الكثير من الأسئلة هذه اللحظة، وسيلة جيدة لحلها من خلال الترميز. لذلك نحن ذاهبون الى رمز هذا الحق الآن، ثم ونحن في طريقنا للعودة و رمز السؤال كان لديك. وبالتالي فإن السطر الأول - أنا لا ينبغي أن يكون مكتوب - ما هو أول شيء نريد أن نفعله عندما كنا فتح ملف جديد في gedit؟ الطالب: وتشمل. JASON هيرشهورن: تضمين ماذا؟ الطالب: مكتبة CS50. JASON هيرشهورن: OK. ماذا ينبغي أن ندرج؟ نحن مجرد الذهاب للتحقق من ما يحدث عند يلقي شيئا لتعويم. ولكن ما نحتاج لتشمل إذا كنا أريد أن أكتب برنامج C؟ الطالب: عادي I / O. JASON هيرشهورن: stdio.h. ونحن في الواقع لا تحتاج، لهذا البرنامج، cs50.h، على الرغم من انها دائما مفيدة إدراجه. لكننا بحاجة stdio.h دائما. الطالب: عندما الترميز في C؟ JASON هيرشهورن: عندما الترميز في C. ولذا فإنني حفظه لأن هذا ملف ج. أحصل على بعض لطيفة تسليط الضوء على تركيب. كتبت الفراغ داخل الرئيسي. ماذا يعني الفراغ؟ الطالب: لا تتخذ أي وسائط سطر الأوامر. JASON هيرشهورن: وسائل الفراغ، في هذا الحالة، الرئيسي لا يأخذ أي وسائط سطر الأوامر. في حالات أخرى، فهذا يعني أن وظيفة لا تأخذ وسيطات سطر الأوامر. أو وظيفة، وإذا كان لي أن أكتب الفراغ الرئيسية (الفراغ)، من شأنها أن أقول الرئيسي لا يعود أي شيء. الفراغ بحيث يعني فقط لا شيء. ما أود الكتابة إذا كان لي أن تأخذ وسيطات سطر الأوامر؟ الطالب: كثافة قوس ج سلسلة قوس ضد JASON هيرشهورن: كثافة العمليات ARGC سلسلة ARGV. هل هذا صحيح؟ الطالب: انها شار قوسين نجمة ARGV. JASON هيرشهورن: وهكذا يمكن أن تكتب بين قوسين سلسلة ARGV أو نجمة شار ARGV بين قوسين، ولكن كنت في حاجة إلى أقواس. لأن ARGV هو صفيف سلاسل، وتذكر. انها ليست سلسلة واحدة فقط. ذلك هو سلسلة ARGV، وهنا سلسلة واحدة تسمى ARGV. و، وهنا بين قوسين سلسلة ARGV مجموعة من السلاسل. الباحث ذلك بين قوسين ARGV سلسلة ARGC سيكون شيئا بأنني ربما الكتابة. لذلك أردت أن توفر في عدد صحيح؟ الطالب: نعم، صحيح. أو في تعويم. JASON هيرشهورن: في تعويم؟ مثل، تعويم x تساوي 1 مقسوما على 10. JASON هيرشهورن: OK. كيف يمكنني طباعة تعويم في printf؟ ماذا؟ الطالب:٪ و. JASON هيرشهورن:٪ و. ما هو عدد صحيح؟ د أو ط. ما هو سلسلة؟ الطالب: ق. JASON هيرشهورن: ق. كيف يمكنني الحصول على خط جديد؟ الطالب: خط مائل عكسي ن. JASON هيرشهورن: ما يمكنني العودة إذا أشواط الرئيسية بشكل صحيح؟ الطالب: 0. أحتاج لكتابة هذا الخط، على الرغم من؟ الطالب: رقم حسنا، نحن لن اكتبها، ثم. يمكن الجميع قراءة ذلك؟ أنها تبدو صغيرة بعض الشيء. يمكن أن نرى الجميع، أو ينبغي أنا جعله أكبر؟ أعتقد للكاميرا، اننا سنحقق أنها أكبر قليلا، وإن كان. JASON هيرشهورن: إذا كنت تريد أن تتحول هذه ج في ملف قابل للتنفيذ، ما يمكنني الكتابة؟ الطالب: جعل الاختبار. JASON هيرشهورن: عذرا؟ الطالب: جعل الاختبار. JASON هيرشهورن: جعل الاختبار. كنا نتحدث عن هذا الخط في وقت سابق. رنة. ما هو رنة؟ اسم المترجم. ما هو هذا الخط؟ الطالب: مجموعات ليصل لاستخدام GDB. JASON هيرشهورن: مجموعات الامر لاستخدام GDB. هذا الخط، ما هذا؟ الطالب: شفرة المصدر. JASON هيرشهورن: هذا هو الملف المصدر، وملف ج. ماذا هذين الخطين تفعل؟ أو هذين لا خطوط. الطالب: أسماء انها اختبار. JASON هيرشهورن: إذن اندفاعة س يقول: تسميته شيء مختلف. وهنا كنت واصفا إياه الاختبار. إذا لم يكن لديك هذا في، ما من شأنه أن اسم هذا؟ الطالب: A.out. JASON هيرشهورن: A.out. ماذا يعني هذا القيام؟ الطالب: روابط مكتبة الرياضيات. JASON هيرشهورن: وهو يربط في مكتبة الرياضيات. نحن لم تشمل مكتبة الرياضيات، ولكن منذ ذلك أمر شائع جدا، وانهم جعل خطية لتشمل دائما مكتبة الرياضيات. وبالمثل، وهذا يشمل مكتبة CS50. موافق، لذلك إذا نحن قائمة، لدينا الآن قابل للتنفيذ يسمى الاختبار. لتنفيذ ذلك، أنا أكتب الاختبار. وأرى أن وجهة نظري العائمة، كما هو متوقع، يساوي 0. يفعل ذلك - لذلك - الطالب: ثم إذا وضعت تطفو الآن، مثلك يلقي أنها تعويم - JASON هيرشهورن: المصبوب 1 إلى تعويم؟ الطالب: لا، ويلقي الشيء الكامل - نعم. إذا كنت لم يفعلوا ذلك، سوف التي تجعل من 0.1؟ JASON هيرشهورن: موافق، لذلك بسرعة حقا، 1 مقسوما على 10، وتلك هي الأعداد الصحيحة يجري تقسيمها. لذلك عندما تقوم بتقسيم الأعداد الصحيحة، وانهم 0، وكنت تحفظ في أن 0 تطفو، وذلك لأن الخط المائل هو قسمة عدد صحيح فقط. لذلك نحن الآن تحول شيئا الى تعويم. دعونا نرى ما سيحدث. اننا سنحقق الاختبار. وحتى الآن نرى أن هذا الخط المائل لم يكن قسمة عدد صحيح، انها عائمة تقسيم نقطة. لأن واحدا من حججها قد يلقي لتعويم. حتى الآن انه كان يقول، وعلاج هذا التقسيم وكأننا نتعامل مع نقطة عائمة، وليس مع أعداد صحيحة. وهكذا نحصل على الجواب نتوقع. دعونا نرى ما سيحدث - عفوا. إذا أردت أن طباعة أكثر العشرية البقع، وكيف يمكن أن أفعل ذلك؟ الطالب: نقطة نقطة و، أو ما يصل المنازل العشرية على النحو الذي تريد. JASON هيرشهورن: حتى أنا طباعة 10 نقاط عشرية. ونحن نرى الآن نحن نحصل بعض الاشياء الغريبة. والتي تعود على سؤالك حول النقطة العائمة الدقة. هناك أشياء غريبة المخزنة في هنا. حسنا، لا أن أجيب على سؤالك؟ ماذا لم تريد إلى رمز بسرعة؟ الطالب: أردت فقط أن نرى ما إذا كان أو لا، إذا كنت حررت بعض المؤشر، سواء كان ذلك مؤشر لا يزال خزنت في انها عنوان ما كانت عليه مشيرا إلى سابقا. JASON هيرشهورن: OK، لذلك دعونا نفعل ذلك. شار نجمة PTR، وهذا يخلق متغير دعا PTR من نوع شار نجوم. كيف يمكنني إرسال malloc؟ ألدين؟ ALDEN: فقط malloc. ولكن بعد ذلك يجب أن يكون حجم و في هذه الحالة، أعتقد كنت مشيرا الى أن شار. لذلك سيكون من شار. JASON هيرشهورن: موافق، لذلك أكثر بشكل عام، داخل - دعونا تحريرها. داخل malloc، تريد رقم من بايت على الكومة. عموما، ما رأيناه أننا به هو ونحن في طريقنا إلى malloc سلاسل، على سبيل المثال، أو صفائف من الأعداد الصحيحة. لذلك إذا كنا نريد 10 الأعداد الصحيحة، أو 10 حرف، 10 سيعطينا 10. ثم أن حجم حرف إعطاء لنا أن حجم حرف، والتي في هذه الحالة هو 1 بايت. نحصل على 10 بايت. إذا كان لنا أن إرسال حجم كثافة العمليات، التي من شأنها أن تعطينا 40 بايت. أكثر من ذلك بشكل عام، داخل malloc هو عدد البايتات التي تريدها. في هذه الحالة، نحن نحصل على 1 بايت. والذي يبدو وكأنه استخدام غريب من malloc، ولكن لدينا أغراض المنطقي. ولذلك لا يوجد ذلك. ونحن في طريقنا إلى الكلمة الحرة. نتخلص من ذلك، ونحن استخدام PTR مرة أخرى. وماذا تريد أن تحقق؟ الطالب: أردت فقط أن تحقق ما إذا كان أو لم يكن هناك أي شيء داخل منه. JASON هيرشهورن: حتى ما إذا فإنه أشار إلى أي شيء؟ الطالب: نعم، بالضبط، سواء فإنه لا يزال لديها عنوان الذاكرة. JASON هيرشهورن: إذن أنت تريد للتحقق من قيمة PTR؟ الطالب: نعم، بالضبط. JASON هيرشهورن: ماذا أنا أكتب هنا إذا كنت تريد أن تحقق قيمة نقطة - ما هو، الأردن وقال، قيمة؟ أو ما يتم تخزينها داخل PTR؟ الطالب: عنوان الذاكرة. JASON هيرشهورن: عنوان الذاكرة. حتى لو كنت مجرد كتابة هذا، وأنها سوف أعطني قيمة PTR. وكيف يمكنني طباعة عنوان ذاكرة؟ ما هو شكل سلسلة لعنوان الذاكرة؟ الطالب: ص٪. JASON هيرشهورن:٪ ع. ٪ s غير سلسلة. ع٪ للمؤشر. هل هذا صحيح؟ وهذا هو الصحيح. حتى PTR يساوي - فإنه لا يزال لديه شيء في ذلك. وربما هذا هو أكثر مسألة مثيرة للاهتمام. ماذا تفعل هذا الخط؟ الطالب: أخطاء SEG و. JASON هيرشهورن: ماذا؟ الطالب: أعتقد أنه SEG أخطاء. JASON هيرشهورن: صاحبة الجلالة؟ الطالب: وأعتقد أنه سوف SEG خطأ. JASON هيرشهورن: إذن هذا الخط من التعليمات البرمجية، نجم PTR، ما لا نجم يعني؟ الطالب: محتوى. JASON هيرشهورن: نعم. يذهب للحصول على محتوى. لذلك هذا هو سبيلنا للذهاب إلى الذاكرة هناك معالجة وتعطيني ذلك. اعتدت٪ ج الحق هنا لأن هناك والأحرف المخزنة هناك. لذلك نحن في طريقنا للذهاب إلى أننا عنوان مجرد رأى - أو على الأرجح سوف يكون هذه مختلفة قليلا مرة ونحن تشغيل البرنامج. ولكن سوف نذهب إلى هذا العنوان الذي نعرفه لا يزال موجودا وانظر ما هو هناك. لذلك لم SEG خطأ. انها فقط لا تعطينا أي شيء. قد يكون الواقع أعطانا شيء من هذا، إلا أننا لا نستطيع رؤيته. والتي تعود إلى هذه الفكرة - ونحن لن تحصل على الكثير في هذا، لأن هذا هو ما وراء نطاق هذه الدورة. ولكن تحدثنا عن الحق هنا، وإذا كنا تتجاوز حدود الصفيف من قبل 1، ونحن لا يمكن أن تحصل في ورطة. في بعض الأحيان، عندما تذهب قبالة بنسبة 1، كنت تفعل شيئا خاطئا، وكنت يمكن أن تحصل في ورطة. ولكنك لا تحصل دائما في ورطة. ذلك يعتمد على كيفية الكثير من شيئا سيئا لك لا، وأنت تسير في الحصول على المتاعب. الذي لا يعني، أن تكون قذرة مع التعليمات البرمجية الخاصة بك. ولكنه يعني، أن البرنامج لن استقال دائما، حتى إذا كنت تذهب إلى مكان ما كنت ليس من المفترض أن تذهب. وخير مثال على ذلك هو، والكثير من الناس في مشكلتهم تعيين 3، والتي و15، لم تحقق حدود اللوحة. لذلك كنت تتطلع إلى اليسار، وتطلعت إلى الحق، وتطلعت إلى أعلى، وبدا إلى أسفل. لكنك لم تحقق لمعرفة ما إذا كان الجزء العلوي كان يجري في الواقع أن يكون على متن الطائرة. والكثير من الناس الذين فعلوا ذلك و تحولت أنه في، عملت برنامجهم تماما، لأن حيث كان هذا المجلس المخزنة في الذاكرة، وإذا ذهبت واحدة فوقه أو التحقق من أن الذاكرة عنوان، لم يكن هناك أي شيء الرهيبة لا سيما حول ذلك، لذلك كان برنامجك لا الذهاب الى الصراخ لك. لكننا لا تزال تقلع النقاط إذا أنت لم تحقق ذلك، لأنك كانوا يفعلون شيئا أنك لم تكن من المفترض القيام به، وعملتم حصلت في ورطة. الاحتمالات هي، رغم ذلك، وربما كنت لم تفعل ذلك. لذلك هذا هو إظهار أن، نعم، لا يزال بوسعنا أن تذهب إليه. ونحن لا تحصل في مشكلة في هذه القضية. إذا حاولنا أن نفعل قراءة 100 حرفا المقبل، لكنا ربما تحصل في ورطة. ويمكنك قراءة رمز 100 القادمة أحرف إذا كنت تريد عن طريق القيام ببعض نوع من لحلقة. نعم. الطالب: وبما أننا خصصت التي الفضاء على القيمة الفعلية، ونحن لن يكون في الواقع قادرا على رؤية أي شيء. ينبغي لنا أن نحاول ذلك مع الإعداد الذي يساوي مثل ج أو شيء من هذا؟ JASON هيرشهورن: السؤال الكبير. كيف يمكنني ضبط هذه القيمة - ما سطر من التعليمات البرمجية يمكنني الكتابة على السطر سبعة لتفعل ما قال لك؟ الطالب: النجم PTR يساوي واحد ج انتهى الاقتباس واحدة. JASON هيرشهورن: ولهذا وضع حرف، ج، في هذا الموقع، لأن مرة أخرى، أن نجم يعني الذهاب الى هناك. وعند استخدامها على الجانب الأيسر من وعامل التعيين، الذي يساوي توقيع، ونحن لن تحصل على هذا قيمة بقدر ما هو ضبط تلك القيمة. الآن دعونا نرى ما سيحدث. وضعنا شيء هناك وكان هناك. دعونا الحرة. بعض الاشياء ربما حدث على الكومة. حتى انها ليست هناك بعد الآن. ولكن مرة أخرى، نحن لا يحصلون في ورطة للذهاب هناك. أنا أفعل هذا في التعليمات البرمجية لتوضيح أن الكثير من هذه الأسئلة التي لديك، وانهم مثيرة للاهتمام حقا يجيب الكثير من الوقت. وانهم أسئلة جيدة حقا. ويمكنك معرفة بها على الخاصة بك إذا، على سبيل المثال، نحن لسنا في القسم. نعم. الطالب: لأنك لم ترسل الماوس للفي أي مكان، لا تحتاج إلى استخدام malloc؟ JASON هيرشهورن: ولذلك فإن هذا يعود على سؤالك الأول. [؟ ؟] هل هو مجرد متغير محلي؟ Malloc هنا ليست مقنعة. استخدام malloc هنا ليس ان مقنعة لأنها مجرد متغير محلي. الطالب: إذن هل يمكن أن تفعل شار نجمة PTR يساوي مرحبا؟ JASON هيرشهورن: أوه. لذلك نحن في طريقنا للحصول على العودة الآن على سؤالك الأول. أعتقد أنك لم تكن راض مع جوابي. موافق؟ مثل ذلك؟ الطالب: نعم. الانتظار. JASON هيرشهورن: وأين هل تريد أن تطبع؟ لذلك سنقوم بطباعة سلسلة من هذا القبيل؟ الطالب: مثيرة للاهتمام. JASON هيرشهورن: هكذا يقول هذا هذا حجة لديه نوع من حرف. لذلك ينبغي أن يكون هذا الطابع. الطالب: فقط يأخذ أول واحد. JASON هيرشهورن: ولذلك فإن هذا هو ما قلته من قبل. كما قلت، انها ليست تخزين سلسلة داخل المؤشر متغير. انها تخزين - الطالب: القيمة الأولى من السلسلة. JASON هيرشهورن: عنوان القيمة الأولى من السلسلة. إذا كان لنا أن طباعة هذا، نحن الحصول على قيمة داخل المؤشر. وسنرى أنه، في الواقع، عنوان الذاكرة. فهل هذا يعقل؟ آسف. الانتظار، لا أن يجيب لكم المسألة، على الرغم من؟ الطالب: نعم. JASON هيرشهورن: هذا هو سطر من التعليمات البرمجية خلق سلسلة ثم آخر مؤشر متغير وهذا ما يشير لهذه السلسلة، أن مجموعة. نعم. الطالب: حتى إذا ذهبنا ذاكرة واحدة معالجة أخرى، سوف نحصل على ح؟ تم تخزينه كسلسلة؟ JASON هيرشهورن: مثل، فعلنا - لذلك هذا هو قيمة للقيام به. هذا هو الحساب النقطة التي يا رفاق شهدت قبل ويجب أن يكون مريحة نسبيا مع. هذا هو أقرب إلى كتابة - إذا كان لنا أن إرسال هذا السطر من التعليمات البرمجية، رأيناه تدوين مجموعة من قبل. هذا يجب أن تعطينا الثاني القيمة في هذه المجموعة، ح. إذا فعلنا هذا، وهذا ينبغي أيضا إعطاء لنا قيمة الثانية في هذا الصفيف. لأنه لا يجري لذكرى عنوان أول شيء، ولكن عنوان ذاكرة من شيء واحد أكثر. ثم dereferences مشغل نجمة هذا المؤشر. ومرة أخرى، دعونا نرى. نحصل على ح مرة أخرى. الطالب: ماذا يفعل بالضبط إلغاء مرجعية يعني؟ JASON هيرشهورن: إلغاء مرجعية هي كلمة يتوهم للذهاب الى. تذهب إلى ذلك والحصول على ما هو هناك هو dereference مؤشر. انها مجرد كلمة يتوهم لذلك. الطالب: إذا أردنا الطباعة السلسلة بأكملها، يمكن لنا تفعل مؤشر العطف؟ JASON هيرشهورن: OK، نحن سوف أتوقف هنا. نحن نذهب لتنتهي هنا. العطف يعطيك عنوان موقع، لذلك عند القيام من العطف متغير، فهو يوفر لك عنوان حيث يتم تخزين هذا المتغير. سوف مؤشر العطف تعطيك عنوان PTR حيث PTR في الذاكرة. نحن لن تستمر مع هذا المثال. يمكنك معرفة هذه الأشياء بنفسك. ولكن مرة أخرى، وهذا قد يكون حتى يشارف على بت يتجاوز ما تحتاج إلى معرفته ل نطاق هذا المصطلح منتصف - أو هذا الاختبار، إلى حد ما. آسف. نحن ذاهبون للمضي قدما، لأنني سوف تريد أن تفعل واحدة مشكلة الترميز قبل انتهاء الوقت. ونحن نذهب إلى رمز ما أعتقد هو الأكثر إلحاحا من هذه أمثلة، atoi. لذلك كان هذا السؤال على مسابقة قبل عامين. ولدي على متن هنا. وطلب من الناس على هذه المسابقة - انها منحت أكثر من ذلك بقليل في tesxt السؤال، لكنني القضاء على النص لأنه كان لا لزوم لها لأغراضنا الآن. كان مجرد بعض المعلومات الأساسية على ما atoi فعلت. ولكن تعلمون جميعا هي غاية و دراية atoi. أقترح عليك أن رمز هذا على ورقة من الورق. وأود أيضا أن أقترح عليك استخدام استراتيجية أننا قد ذهبت أكثر الكثير في القسم لدينا. أولا، تأكد من أنك تفهم تفعل ما atoi ل. رسم صورة أو الخروج مع بعض الصورة الذهنية منه في رأسك. المقبل، الكتابة خارج شبة الكود لهذا الغرض. على هذه المسابقة، إذا كان كل ما عليه هو شبة الكود، على الأقل كنت وضع شيء أسفل. ومن ثم تعيين شبة الكود على أن C. إذا كان لديك الاختيار في حياتك شبة الكود، مثل معرفة ما اذا كان شيء و1، التي تعين على وإذا حالة وهكذا دواليك. وأخيرا، رمز البرنامج في C. لذلك يذهب إلى atoi وتأخذ خمس دقائق إلى رمز هذا على ورقة الورق، والذي هو على الارجح حول مقدار الوقت الذي سيستغرق على مسابقة لatoi التعليمات البرمجية. خمس إلى 15 دقائق، وخمسة إلى 12، وخمسة ل 10 دقيقة، تدور حول مبلغ الوقت كنت تنفق على هذه السؤال في هذه المسابقة. حتى تأخذ خمس دقائق الآن، من فضلك. وإذا كان لديك أي أسئلة، ورفع يدك وسآتي حولها. [من المحادثات الجانبية] JASON هيرشهورن: حسنا، التي كانت خمس دقائق. كان ذلك على الارجح حول كمية الوقت كنت تنفق على أنه في مسابقة، ربما نهاية منخفضة من ذلك الوقت. سنقوم باختصار في بعض الشيء. دعونا نبدأ هذا الترميز. وإذا لم نحصل على كل طريق، إجابات لهذا وهذا هي مسألة مسابقة المتاحة، مرة أخرى، سقوط 2011 هو عندما يكون هذا السؤال ظهرت على هذه المسابقة. وأنه كان يستحق ثماني نقاط على مسابقة ثم. ثماني نقاط على نهاية عالية من قدر من النقاط شيئا يستحق. معظم الأسئلة هي في حدود من واحد إلى ست نقاط. لذلك هذا هو أكثر تحديا السؤال، لعلى يقين. أي شخص يمكن أن يحصل لي بدأت؟ عموما، ما نحن ذاهبون تريد أن تفعل مع هذا تعمل atoi، منطقيا؟ ماذا نريد أن نفعل؟ لذلك نحن ذاهبون الى الكتابة بعض شبة الكود. الطالب: تحويل الأحرف إلى أعداد صحيحة. JASON هيرشهورن: تحويل الأحرف إلى أعداد صحيحة. موافق. فكيف العديد من الشخصيات نحن بحاجة الى الذهاب الى الذهاب من خلال؟ الطالب: كل منهم. الطالب: جميع الشخصيات في السلسلة. JASON هيرشهورن: كل من الأحرف في السلسلة. لذلك إذا كنا نريد الذهاب من خلال كل حرف في السلسلة، ما هو الشيء في C رأيناه الذي سمح لنا أن نذهب من خلال كل حرف في السلسلة؟ الطلاب: ألف لحلقة. JASON هيرشهورن: A للحلقة. لذلك نحن ذاهبون الى حلقة من خلال كل حرف في ليالي. ثم ما نحن ذاهبون تريد أن تفعل عندما نحصل على حرف معين؟ يقول أننا الحصول على تمرير 90. نحصل على 9. انها حرف. ماذا نريد أن نفعل مع هذا الحرف 9؟ الطالب: طرح عليه من الطابع 0؟ الطالب: إضافة 0؟ JASON هيرشهورن: طرح فإنه من الطابع 0؟ الطالب: نعم. JASON هيرشهورن: لماذا كنت تريد أن تفعل ذلك؟ الطالب: [غير مسموع] القيمة. قيمتها كثافة العمليات. JASON هيرشهورن: موافق، لذلك أخذنا الطابع 9، تطرحه من حرف 0 للحصول على صحيح الفعلية 9. الحلو. وكيف يمكنك أن تعرف ذلك الحرف 9 ناقص 0 الحرف هو 9؟ ما لم الرسم البياني نظرتم؟ الطالب: هناك تسعة منطقيا الأماكن بين 9 و 0. أو هل يمكن أن ننظر في جدول ASCII. JASON هيرشهورن: جدول ASCII. ولكن نعم، كنت الصحيح كذلك. لذلك طرحنا 0. حتى الآن لدينا عدد صحيح 9. وماذا نريد أن نفعل مع ذلك؟ اذا كان لدينا 90، انها أول عدد صحيح لدينا ما نريد أن نفعله؟ الطالب: كنت وضعت في عدد صحيح مؤقتة مجموعة، ثم القيام الرياضيات إليها في وقت لاحق لجعله إلى النهاية. JASON هيرشهورن: OK. الطالب: أنت يمكن أن تبدأ في نهاية مجموعة ومن ثم المضي قدما حتى انه في كل مرة كنت المضي قدما، كنت اضربها 10. JASON هيرشهورن: OK. هذا يبدو وكأنه جميلة فكرة مقنعة. يمكننا أن نبدأ في نهاية مجموعة لدينا، ويمكننا استخدام strleng. يمكننا استخدام strleng هنا. فسوف نحصل على طول سلسلة لدينا. نبدأ في نهاية المطاف. و+ أول واحد، ونحن نأخذ فقط أن صحيح، وربما نخلق مثل متغير عدد صحيح مطابق أعلى حيث نحن تخزين كل شيء. لذلك نحن من خلال كل حلقة شار في ليالي من الخلف إلى الأمام، ونحن طرح 0، و ثم نأخذه، واعتمادا على حيث هو، ونحن اضربها من قبل قوة من 10. لأن أول واحد، فماذا نحن مضاعفة الحرف أقصى اليمين من قبل؟ الطالب: 10 إلى 0. JASON هيرشهورن: 10 إلى 0. ماذا نضرب الثانية أقصى اليمين حرف؟ الطالب: [غير مسموع]. JASON هيرشهورن: ماذا؟ الطالب: 10 إلى 1. JASON هيرشهورن: 10 إلى 1. الحرف أقصى اليمين ثالث؟ الطالب: 10 إلى 2. JASON هيرشهورن: 10 إلى 2. الطالب: آسف، أنا لا أفهم ما نقوم به هنا. JASON هيرشهورن: OK، دعونا نعود، ثم. لذلك نحن في طريقنا للحصول على مرت في سلسلة. لأننا كتابة atoi. لذلك نحن في الحصول على تمرير سلسلة. ويقول نحن نحصل على مر في سلسلة 90. تم تعيين أول شيء نحن في طريقنا للقيام متغير عدد صحيح أننا الجديدة مجرد الذهاب الى خلق كما صحيحا الجديد. هذا ما نحن ذاهبون للعودة في نهاية المطاف. نحن في حاجة للذهاب من خلال كل حرف في سلسلة لأننا قررنا أننا في حاجة إلى لمس كل واحد و ثم إضافته إلى عدد صحيح الجديد. ولكن لا يمكننا فقط إضافته كرقم. نحن لا يمكن أن تأخذ فقط 9 و إضافة 9 إلى عدد صحيح لدينا. ذلك يعتمد على مكان ما هو في السلسلة. نحن بحاجة الى الذهاب الى مضاعفة من قبل قوة من 10. لأن هذه هي الطريقة يعمل 10 قاعدة. لذلك نحن في طريقنا للحصول على الفعلية حرف، أو عدد صحيح الفعلية عدد، وذلك بطرح الطابع 0 من الطابع 9 كما فعلنا مع يحذف حرف A من رأس المال أيا كان الطابع كان لدينا في واحدة من تلك المشاكل. لذلك سنقوم في الواقع الحصول على رقم من 0 إلى 9 حفظها كملف العدد الحقيقي، وسنقوم اضربها من قبل قوة من 10 تبعا على ما نحن فيه في السلسلة. ثم ونحن في طريقنا لإضافة إعادته لدينا في متغير عدد صحيح جديد. فما هذا من شأنه أن تبدو وكأنها من شأنه أن - سنقوم رسم أكثر من هنا. إذا كان لنا أن تحصل مرت في سلسلة 90 - الطالب: [غير مسموع]. JASON هيرشهورن: ولكن atoi تأخذ سلسلة. لذلك نحن في طريقنا للذهاب من خلال عقد. سنقوم الحصول على تمرير في 90. نذهب من الخلف إلى الأمام. أخذنا 0. الطالب: أنا آسف. ربما هذا هو غبي. إذا نحن الحصول على تمريرها في سلسلة، لماذا هو 90 ما نحن الحصول على تمريرها في؟ لأن 90 هو عدد صحيح. JASON هيرشهورن: لأن يأخذ atoi سلسلة وتحويله إلى عدد صحيح تمثيل هذه السلسلة. ولكن السلسلة 90 ليس صحيحا 90 أو رقم 90. السلسلة 90 هو مجموعة من اثنين، أو ثلاثة أحرف، بالأحرى، 9 حرف، حرف 0، و مائل 0 حرف. ونحن كتابة atoi لأنه، ل سبيل المثال، عندما كنت تأخذ الأمر وسيطة سطر، ويتم حفظه في ARGV، يتم حفظه كسلسلة. ولكن إذا كنت ترغب في التعامل معها كرقم، تحتاج إلى تحويله إلى صحيح الفعلية. وهذا ما فعلناه واحدة من مجموعات مشكلتنا. وهذا ما فعلناه في عدد مجموعات مشكلتنا. استغرق الجميع بأن عدد صحيح كما وسيطة سطر الأوامر. ولهذا السبب لدينا وظيفة atoi تأخذ سلسلة. ذلك مرة أخرى، في مثالنا هنا، نحن ذاهب الى اتخاذ واحد آخر. ونحن في طريقنا لطرح الطابع 0 منه، لأن أحرف 0 تطرح من قبل حرف 0 يمنحك العدد الفعلي 0، وفقا ل وASCII الرياضيات الذي نقوم به. لأن يتم تمثيل الأحرف مختلفة من الفعلية - و حرف، على سبيل المثال، صغيرة على 97. انها ليست - عفوا! انها ليست كل ما تتوقعون أن يكون، 0، على سبيل المثال. ولذلك عليك أن طرح حرف للحصول على 0. لذلك نحن في طريقنا للقيام بذلك هنا للحصول على العدد الفعلي. ثم نحن نذهب لاضربها قوة من 10 اعتمادا على حيث هو في السلسلة، ثم أخذ ذلك وإضافته إلى حامل مكاننا متغير حتى نتمكن من الخروج مع لدينا عدد صحيح جديدة النهائية. فهل هذا من المنطقي أن الجميع؟ لذلك نحن لن رمز هذا في الوقت الراهن، لأننا الحصول في وقت قصير. اعتذر عن توقيت ذلك. ولكن هذا هو ما، ونأمل، تفعل تكون قادرة على القيام على هذه المسابقة - في جدا الأقل، والحصول على هذه شبة الكود مكتوبة. ومن ثم، إذا كنا لكتابة شبة الكود، في الواقع، يمكننا أن نفعل هذا بسرعة كبيرة. كل سطر من تعليقات ونحن كتبنا هنا يترجم إلى حوالي سطر واحد من التعليمات البرمجية C. إعلان جديد متغير والكتابة حلقة، وبعض الطرح، وبعض الضرب، وبعض الاحالة. ربما كنا نريد أيضا أن كتابة سطر والعودة. ونحن قد ترغب أيضا في وضع بعض الشيكات هنا. نعم. الطالب: إذن يمكننا علاج ق كسلسلة الفعلية؟ لأنني أعرف انها مجرد عنوان. مثل، كيف تحصل على طول السلسلة التي يتم تمريرها من خلال؟ JASON هيرشهورن: فكيف فعلت طول سلسلة؟ Strlen. الطالب: strlen، نعم. ولكن يمكنك وضع ق ك حجة لذلك؟ JASON هيرشهورن: strlen ذلك يأخذ نجم شار. ويترتب على ذلك أن النجم شار، و يحتفظ العد حتى يحصل على مائل 0. كان strlen الواقع واحد من البرامج الأخرى التي كانوا في طريقهم إلى رمز. هذا هو واحد جيد آخر إلى رمز. أن واحدة من أسهل قليلا، لأنه إذا وأنت تسير في التفكير في ذلك من الناحية النظرية - قلت للتو بصوت عال - يتبع strlen مؤشر واستمر على هذه الحال و عد وتتبع حتى تصل إلى مائل 0. الطالب: حسنا، حصلت عليه. JASON هيرشهورن: حتى أفضل من الحظ في مسابقة 0 غدا. إذا كان لديك أي أسئلة، وسوف أكون تكون خارج بعد ذلك. لا تتردد في الكتابة لي. وصول إلى TF الخاصة بك إذا كنت ليس في القسم الخاص بي، أو الحصول على بلدي البريد الالكتروني إذا كنت تريد ذلك. إذا كنت تريد أن يفزع وترسل فقط لي رسالة بالبريد الالكتروني، والبريد الإلكتروني freakout، وسوف أكون نرسل لك مرة أخرى، مثل، وجه مبتسم، أو، مثل، نكتة أو شيء من هذا. لذا لا تتردد في أن تفعل ذلك أيضا. حظا سعيدا مرة أخرى، وسوف أكون أراك كل أسبوع المقبل.