[موضوع الموسيقى] رئيس 1: مرحبا، الجميع. أهلا بكم من جديد إلى القسم. يوم جميل out-- وهذا هو السبب، وأنا بالتأكيد، لا يوجد سوى أربعة منكم هنا وليس لدينا حزمة العادية. لقد كنت مريضة في نهاية هذا الاسبوع. لذلك ليس لدي النجمي ليا رفاق. وأنا قد يبدأ السعال رهيب طوال هذه. لذلك تحمل فقط معي. انا ذاهب الى محاولة حقا وتحصل من خلال هذا أولا، رغم ذلك، قبل أن يصابون بنوبة سعال. ولكن مجرد أن يكون من السهل على لي قليلا bit-- هذا كل ما أطلب. لذلك جدول أعمالنا لاليوم- مجرد reminder-- مسابقة الخاص بك هو الأسبوع المقبل. قلت لكم هذا في الأسبوع الماضي لذلك لن قبض عليك على حين غرة. لذلك أنا تذكيرك مرة أخرى. الأسبوع القادم مسابقة لديك. تحقيقا لهذه الغاية، الأسبوع المقبل سوف يكون القسم أكثر بكثير of-- وسأحاول العمل في بعض المراجعة. حتى إذا استطاع رفاق مساعدتي من خلال ارسال لي الأشياء التي كنت مرتاحا مع أن كنت قلقا، المواضيع التي ترغب ل لي لتغطية، التي تريد ان تكون كبيرة. حتى أستطيع أن محاولة والعمل لهم في القسم لدينا في الأسبوع القادم أو نرسل لك مواد إضافية أو الإعدادية التي قد لا تحصل في أي مكان آخر. نعم! المزيد من الناس يأتون! فكرت، لم أفعل هذا الأخير بشكل سيئ الأسبوع، أن لا أحد يريد أن يعود؟ أنا خائفة. حتى الأشياء الثلاثة الأخرى أننا في طريقنا للذهاب أكثر هي إعادة توجيه، وملف I / O، و ثم مؤشرات والذاكرة الديناميكية. أنا متأكد من أنك كنت كل متحمسون السوبر pointers-- الموضوع المفضل للجميع، بسيطة جدا لفهم. أنا متأكد يا رفاق حصلت على كل ذلك، أليس كذلك؟ أول الأشياء أولا لذلك، redirection-- هذا هو في الأساس مجرد وسيلة للتحكم في كيفية مساهمة الأمور في البرنامج، كيف لك أشياء الإخراج من البرنامج. الطرق الرئيسية التي يا رفاق تم التفاعل معها هو فقط من خلال الخروج القياسية مع شاشة الطباعة الخاصة بك هنا. ولكن هناك طرق ل pipe-- كما نرى هنا هي واحدة من لدينا نوع words-- من الأنابيب هذه المعلومات أو أن البيانات إلى ملف من الملفات. انها مجرد طرق مختلفة لل الحصول على الأشياء في برنامجك والخروج من البرنامج، بدلا من مجرد طباعتها على هذه الشاشة أو إدخال أشياء من سطر الأوامر. لذلك أول واحد هو القليل أكبر من الإقحام. حتى output-- فإنه يطبع فقط إخراج إلى ملف بدلا من الشاشة. حتى إذا كان لديك شيء المطبوعة "مرحبا، العالم!" على الشاشة، إذا وضعت بدلا من ذلك لoutput.text، أن يخلق هذا الملف يسمى output.text. وعند فتحه، وأنها سوف يقول "مرحبا، العالم!" في هناك. وهذا يمكن أن يكون مفيدا السوبر إذا كان لديك طن من الأخطاء في الواقع، كما نرى في هذا واحد. إذا كنت تفعل اثنين من الإقحام، وأنها سوف طباعة رسائل الخطأ. لذا إذا كنت تواجه مشكلة مع تجميع، فإنه لديه الكثير من الأخطاء وكنت التورط في محاولة للتمرير عبر في سطر الأوامر الخاص بك من خلال كل منهم، يمكنك مجرد طباعتها إلى ملف، فتح هذا الملف حتى يتسنى لك يمكن التمرير من خلالهم أسهل. أنا في الواقع أن تستخدم الكثير عندما كنت التصحيح بلدي 181 psets لتعلم الآلة. لذلك يمكن أن يكون مفيدا عظمى في وقت لاحق. كما انها مفيدة إذا كان لديك برنامج التي ربما تولد مكتبة أو توليد بعض مجموعة سلاسل، ولك تحتاج إلى أن تكون قادرا على رؤية ذلك انها تولد لهم بشكل صحيح. هذه هي الطريقة للقيام بذلك. حتى إذا كنت طباعتها إلى ملف، كنت يمكن فحص أكثر سهولة لهم، أليس كذلك؟ مقابل محاولة للتمرير من خلال سطر الأوامر الخاص بك. ثم شيء واحد أن نلاحظ غير أنه مع مجرد كلما من الإقحام، إذا كنت تكتب إلى ملف exists-- بالفعل حتى لو ركضنا مثل هذا أول الوقت، وضعنا لoutput.text، ومن ثم كان لدينا البرنامج الثاني أن طبع من هذه كبرنامج اثنين وقام أكثر من لoutput.text، فإنه سيتم الكتابة that-- ذلك الكتابة ما كان في أي وقت مضى هذا الملف لتبدأ. حتى إذا كنت تريد إلحاق إلى ملف، وكما نرى هنا، أنت فقط تفعل اثنين من أكبر العلامات. وأنه سيتم إلحاق إليه. لن الكتابة فوقه. حتى إذا كنت تحتاج إلى تشغيل متعددة برامج ونوع من الحفاظ تتبع ما كل منهم يعود لكم في الملف، هذا هو وسيلة للقيام بذلك. إذا كنت لا تهتم ما في الملف الخاص بك ولقد سمح لها أن تكون الكتابة، يمكنك فقط استخدام واحد من أكبر. فهل يعقل أن الجميع؟ الجمهور: مثل نقطة خفض مرحبا أكبر من إخراج النص نقطة، مثل مرتين، انها سوف تظهر فقط فقط على الانتاج نقطة النص على time-- الثانية رئيس 1: الحق. لذلك سيكون أساسا مجرد تماما الكتابة ما كان هناك لتبدأ. إذا كان هذا الملف هنا، و output.text بالفعل موجودا، أساسا ما تسمونه ذلك مرة أخرى مع أكبر واحد مما يمكنك مجرد التفكير في الأمر كما مثل ذلك استبدال الملف. مثل عندما كنت تقوم بحفظ كلمة وثيقة لم باستثناء ما، واصلتم نفس الاسم، و ذلك بالكتابة تماما it-- هذا هو نفس النوع من الشيء. أي شخص لديه أي أسئلة حول مجرد إخراج للملف؟ رهيبة. لذلك من الواضح، إذا كنت عكس السهم الاتجاه، فإنه يمكن القيام الإدخال. حتى عندما كان يا رفاق مثل قيصر أو Visioneer وكان لديك لإدخال شيء، هل كان لديك حجة سطر الأوامر أن مدخلات فعلا. وهذه طريقة أخرى للقيام بذلك. وذلك بدلا من الانتظار لموجه الأوامر، مثل عند طلب الخاص بك رسالة من قيصر أو Visioneer، إذا كان لديك ملف نصي التي كان رسالتك، هل يمكن أن مجرد كتابته في ذلك. حتى لو كان هذا مثل نقطة خفض قيصر 3 أقل من السهم إدخال النص، الذي هي رسالتك، أن سيرشح نفسه على ما يرام. عندما برنامج قيصر بك فعلا طلب مدخلات من المستخدم، كان يمكن أن يكون بالفعل ل كنت قد كتبته في هذا الملف. هذا هو مجرد وسيلة أخرى. مجرد عكس output-- فقط لإدخال البيانات الخاصة بك. ثم آخر واحد هو أنبوب. حتى تبرد هذا المرء جميلة. لأنه يسمح لك ل أخذ الناتج واحد برنامج ووضعها كما مدخل إلى برنامج آخر. أنا لا أعرف إذا كان أي منكم لعب مع فك قد يكون هذا CS50 نظرا للكم، ولكن سيكون تسمح لك أن تأخذ بعض العينات ملف، اكتبه في التشفير الخاص بك، ثم من هناك اكتب هذا في فك التشفير الخاص بك للتأكد من أنه تبين نفسها. حتى انها نوع من مثل ثلاثية الحلقة. لأنها تذهب. الجمهور: إذا كان برنامج له إسهامات متعددة، هل هناك طريقة لمعرفة ما الذي المدخلات استخدام ملف نصي أو الإخراج؟ رئيس 1: من لديه مدخلات متعددة. أيا كان ملف input-- الخاص بك عندما يكون طلب الإدخال الذي أول مرة، انها سوف نفترض، كما أعتقد، أنه من الذهاب إلى الأنابيب في الملف بأكمله. حتى إذا كان لديك مدخلات متعددة، كنت ستكون الأنابيب في ملفات متعددة. حتى إذا كنت طالبا للرسائل ثلاث مرات في التعليمات البرمجية، كنت على وشك أن تضع في ثلاثة ملفات مختلفة. ويحصل مجنون. ويجب أن لا يكون ل تقلق بشأن ذلك الآن. ولكن هذه هي الفكرة. لذلك نعم، والأنابيب يتم إخراج عادل واحد يستخدم برنامج مدخلات أخرى. الجميع جيدة هناك؟ بارد. موافق. ربما لن يكون أن تفعل الكثير معها. ولكن يجب أن نفهم الطرق التي يمكنك استخدام هذا. وهناك بعض الحالات التي قد ترغب في استخدامها. حتى ملف I / O-- أنا أعرف ما كنت saying-- اعتدنا على قراءة من والكتابة على الشاشة لدينا هناك، الذي هو المعيار في ومعيار خارج. وهذا ما كان يا رفاق به منذ بداية الدرجة هنا. ولكن يمكنك أيضا قراءة وكتابة الملفات، وهو كل ملف I / O-- ذلك تقديم المدخلات، الإخراج هو كل ما ترمز إليه. ولذلك فإن هذا يعني أساسا أن يمكنك تخزين البيانات الخاصة بك الآن. عند طباعته فقط ل الشاشة، انها ذهبت أساسا، أليس كذلك؟ بمجرد جعل "مرحبا العالم "وتشغيل" أهلا بالعالم " فإنه يطبع "مرحبا العالم" إلى الشاشة. ولكنك لا تستطيع أن تفعل حقا أي شيء معها من هناك. إذا قمت بتخزين في النص ملف، ثم فجأة لديك هذه البيانات التي كنت يسمح التلاعب أو وضعه في ملف، أو وضعه في البرنامج في وقت لاحق. أحد الأسباب لماذا نفعل هذا هو مجرد باعتبارها وسيلة لتخزين البيانات لاستخدامها لاحقا. لدي بضعة خطوات من هنا مجرد المشي من خلال معيار I / O. في خطوة واحدة، ل تحتاج إلى إنشاء مرجع إلى ملف مع جميع قبعات للملف نجم. بحيث يخلق مؤشر إلى ملف. حتى ذلك الحين تريد فتحه. ونقول لكم، حرفيا، ملف عادل يساوي FOPEN. وهذا يحدث لإرجاع مؤشر الملف الذي فتحته للتو. رأيت بضع لك الرجال في ساعات العمل. ولكن واحدة من الأشياء هي مؤشرات remember-- يمكن أن تكون بعض العناوين أو باطل، أليس كذلك؟ إذا كان لدينا حالة من أي وقت مضى شيء يمكن أن يعود لاغية، ماذا علينا أن نفعل قبل أن أبدا استخدامه؟ نحن بحاجة لمعرفة ما اذا كان انها باطلة أم لا، أليس كذلك؟ لأن البعض منكم ربما كان المشكلة حيث أيا كان الكائن تم إعادتهم في الاختراق كانت فارغة. حاولت أداء بعض الدالة على ذلك. وانتقد الموقع جهاز الكمبيوتر الخاص بك. أليس كذلك؟ أراهن بضع لك قد يكون لهذه المسألة. حتى مع FOPEN، FOPEN إما عودة مؤشر إلى ملف، أو إذا كان هناك شيء يذهب على نحو خاطئ، انها سوف تعود فارغة. لذا عليك دائما أن تحقق أنه لم يعد لاغيا قبل محاولة القيام بأي شيء آخر. هذا هو مثل نموذج قياسي أن وأنت تسير في حاجة إلى هنا. إذا كان هناك أي وقت مضى فرصة ل شيء يمكن أن يعود لاغية، تحقق للتأكد من ذلك لا قبل المتابعة. خلاف ذلك، وأنت تسير للحصول على أخطاء الموقع جميلة. ولا أحد يحب أن التعامل مع هؤلاء. لذلك كما نرى هنا، فإن الحجة الأولى هو مجرد المسار إلى الملف. حالة عدم وجود هذا الملف، انها تسير لإنشاء هذا الملف. وانها فقط ستكون فارغة. ثم الوسيطة الثانية هو الوضع الذي تريده. نريد أن نقرأ عن هذا الملف؟ هل تريد أن تكتب عنه؟ هل تريد إلحاق؟ ذلك في الواقع ما كنت للتو said-- حالة عدم وجود الملف وكنت تحاول قراءتها من ذلك، فإنه سيكون لرمي خطأ. إذا كان الملف name-- إذا أحب file.text لا وجود له حتى الآن وكنت أريد أن أكتب لذلك، فإنه سيخلق ملف فارغ يسمى file.text بالنسبة لك. وإذا كنت ترغب في إلحاق، يجب عليك أن تفعل الشيء نفسه. هل هذا يعقل؟ إذا كنت تحاول قراءتها من ملف غير موجود بعد، انها سوف رمي خطأ. خلاف ذلك، فإنه سيتم إنشاء ملف لتفعل ما تريد لذلك. بارد. الآن يمكننا أن نقرأ من الملف. وهذا هو مجرد نوع من الذهاب من خلال وظائف مختلفة أن لدينا لملف I / O. هذه الإرادة يكون ضروريا في PSET هذا الأسبوع، إذا كنت أتذكر بشكل صحيح. نعم، قطعا سيكون الضرورة في PSET هذا الأسبوع. حتى fgetc إرجاع الحرف التالي. fgets فقط إرجاع سطر من النص. فإنه سيعود كل شيء إلى خط جديد، وسوف كسر. حتى fread يقرأ بعض عدد البايتات وأماكن لهم في صفيف، الذي هو شيء كنت قد تريد أن تفعل مع إعادة size--- قد يكون مفيدا. كم من الناس قد قرأت المواصفات PSET، بالمناسبة؟ موافق. [غير مسموع] رئيس 1: OK. حسنا. بالتأكيد قراءة that-- انها PSET متعة. تحصل لاستعادة الذاكرة المحذوفة card-- مثيرة حقا عندما يعمل. ولكن بالتأكيد، أن تبدأ القراءة. يأتي الحديث لي إذا كنت لديك أسئلة حول هذا الموضوع. حسنا، كما كنت أقول، fread قراءة عدد معين من وحدات البايت. هذا بعض رقم التعسفي ان كنت تريد الذهاب لتعيين. ثم fseek التحركات فقط لموقف معين. لذلك ربما كنت لا تهتم حول بايت 10 القادمة. كنت ترغب فقط في القفز إلى الأمام. أنت لا تبالي تلك. كنت ترغب في قراءة ابتداء من الساعة 11 بايت. fseek يسمح لك أن تفعل ذلك. لذلك يسمح لك أن تكون انتقائية حول ما كنت تقرأ. لأن fgetc، fgets، وfread قراءة من مكان معين في الملف. وهناك طريقة للتفكير في ذلك هو إذا كان هذا هو ملف لدينا، عند فتحه لأول مرة، لديك هذا الموقف في ملف الذي يبدأ في البداية. كلما استدعاء fgetc، fgetf، أو fread، انها سوف تبدأ من هذا الموقف علامة. دعونا نقول لكم نريد فقط أن تقرأ هذا جزء من الذاكرة أكثر من هنا. لا يمكنك الاتصال فقط. لديك للحصول على أكثر من هنا ثم قرأ من هناك أو القراءة، يحصل، أو getc، اعتمادا على ما تريد. لذلك تسعى يسمح فقط لأنك ل تخطي أجزاء من الذاكرة. وهذا هو فقط بهذه الطريقة يمكنك تخطي الأشياء دون قراءتها في المخزن الخاص بك. فهل يعقل أن الجميع؟ ومن الواضح أن هناك الكثير من here-- مواز إعادة توجيه الإنتاج لدينا، أو المدخلات، كنت قد قرأت والكتابة. fputc حتى يكتب فقط حرف في الملف. fputs يكتب السطر. Fprintf بطباعة الناتج تنسيقها. حتى إذا كان لديك علامات التبويب، أو الفضاء، أو غيرها. ثم يكتب بعض fwrite صفيف من البايت إلى ملف. لذلك هذا هو نفس الطريق وfread fwrite هي مشابهة fgets opposites--، fputs، و ثم الكثير fputc وfgetc-- ، أشياء سريعة لمجنونة. مجرد نوع من الحفاظ على هذا handy-- سيكون لديك أوقات مختلفة حيث ربما كنت ترغب فقط حرف واحد في وقت واحد. ربما كنت ترغب في خط كامل. مع pset-- قاموسك وهو في اثنين psets، أعتقد، نقدم لكم ككل قاموس في شكل النص الذي لديه كل كلمة يفصل بينهما خط. لذلك إذا أردت قراءة في كلمة واحدة في كل مرة، ما يمكن أن تستخدمها إذا كنت تقرأ وانهم منفصلون جميعا على الخطوط الجديدة، وتريد فقط كلمة واحدة في وقت واحد؟ الجمهور: Fgets رئيس 1: الحق. Fgets-- لأن ذلك يعود كل ما هو على سطر واحد. وإذا كانت كل كلمة فيها خط الخاصة، يمكننا استخدام fgets. بارد. هل هذا يعقل، الجميع؟ بارد؟ نعم، نحن في طريقنا للوصول الى الجزء الممتع مع مؤشرات قريبا جدا، حيث كنت وصول الى القيام ببعض الرياضيات. وانها سوف تكون كبيرة. آخر step-- إغلاق الملف الخاص بك. مع أشياء كثيرة هنا، واحد من النماذج لدينا وإذا كان يمكن العودة لاغية، وتحقق لاغية. إذا قمت بفتح شيء، كنت إغلاقه بشكل أفضل. موافق، لذلك كنت لم تفعل حتى كنت إلا إذا كنت قد فعلت إغلاقه. نوع من مثل الأمر لم ينته حتى تغني للسيدة الدهون. هذا مثل إغلاق الملف الخاص بك. كما جاء هنا، فقط أن أكرر، دائما فتح الملف الخاص بك قبل كنت القراءة أو الكتابة إليها. ودائما إغلاقه إذا كنت قد قمت بفتحها. كل الحق؟ بارد. حتى هنا مثال على ذلك. حتى tiny-- أنا لا أعرف ما إذا كنت يمكن الرجال يرون ذلك جيدا. ولو استطعنا زيادة سطوع بطريقة أو بأخرى. اسمحوا لي فعلا القيام بذلك إذا كنت تستطيع. حسنا، لا يمكنك حقا الرجال نرى أن في كل شيء، يمكن لك؟ حسنا، نحن في طريقنا للقيام بذلك، ثم. [غير مسموع] أفترض هذا هو أفضل بكثير لنرى. يمكن لأي شخص رؤية أين بلادي ذهب الفأر هو السؤال؟ آه، هناك كان is-- ما تناضل! موافق. في الأساس، ينبغي أن يكون رفاق النوع فكرة هذا ما يقوم به. انها ليست مثالية. ولكن أنا أفضل أن تفسير ذلك من قضاء المزيد من الوقت في محاولة لتهيئته بشكل صحيح. في الأساس، وكما ترون هنا، نبدأ مع الملف مفتوحا. ولدينا بعض ملف قاعدة البيانات التي نحن فتح تقول انها طلابنا. ونحن في طريقنا إلى الكتابة إليه. وذلك بطبيعة الحال، والعودة فارغة. لذلك علينا أن تحقق لاغية. ثم إذا لم يكن لاغية، ونحن من خلال الذهاب. وكما ترون، نحن حلقات من هنا. هناك طلاب. الطلاب هو تجزئة يعرف بأنه الثلاثة. وما نفعله هو أننا الطباعة إلى ملف، أليس كذلك؟ فما نحن الطباعة إلى ملف لدينا؟ الجمهور: إن العشرات التي هي في المصفوفة؟ رئيس 1: نعم. الدرجات التي هي في وarray-- بالضبط. لذلك نحن فتح هذا ملف قاعدة البيانات، والتي أفترض هو نوع قاعدة الدرجات. ونحن مجرد طبع و عشرات من كل طالب لهذا الملف. بارد؟ الخير. رهيبة. موافق. دعونا نعود علي: الجمهور: لدي سؤال سريع. هو printf ليس في لحلقة؟ هذا فقط في حال حلقة؟ رئيس 1: لا، انها لفي الحلقة. لا استطيع ان ارى بلدي الماوس بشكل جيد جدا هنا. لذلك أنا تكافح ل شكل هذا صحيح. يجب أن يكون قد انتهى هذه الفئة. يجب أن يكون أسفل هنا. وهذا هو ما لديك في الحلقة. هناك. الآن انها جميلة. ذلك أن الكيفية التي ينبغي be-- باستثناء لذلك قوس الماضي أنني رفضت. موافق. فهل يعقل أن الجميع؟ موافق. ونحن في طريقنا للانتقال إلى الشيء التالي then-- وهو، في الواقع، وأنت تسير بحاجة إلى أن نرى رمز. لذلك أنا مجرد الذهاب ل نسخ إلى أن أكثر من الآن. موافق. لذلك أنا ذاهب الى تبين لكم رفاق هذا الرمز. وأنا أريد منك أن محاولة والشكل ما يفترض أن تفعله. حتى تعطى that-- اتخاذ دقيقة أو نحو ذلك. ومحاولة معرفة ما يجري هنا. أي أفكار؟ ونحن نعلم أن لدينا اثنين على الأقل الحجج في سطر الأوامر، أليس كذلك؟ أفترض احدة منها ستكون أن [غير مسموع] من برنامجنا ثم شيء آخر. لأنه إذا كان [غير مسموع] أقل من اثنين، نحن يصيح عليهم. أليس كذلك؟ ومن الاستخدام، يبدو انها ستكون نوعا من الملف. نحن جميعا نتفق على ذلك؟ حتى الآن، ما هو حلقة تفعل؟ ما كان يمر؟ الجمهور: جميع الملفات. رئيس 1: بالضبط. انه سيكون من خلال جميع الملفات التي قمنا المدخلات هناك. لذلك لكل ملف، انها فتح بعض سلسلة هناك. انها تفتح هذا الملف. أليس كذلك؟ وانها القراءة منه. وبطبيعة الحال، والتحقق ما اذا كان باطلا. ثم انها الطباعة. اذا كان لاغيا، انها مجرد قول لنا أن هذا ليس ملف موجود. لأن تذكر، مع قراءة ملف لديه في الوجود. أليس كذلك؟ مع الكتابة وإلحاق، يمكنك أن تفلت من العقاب. ولكن مع القراءة، ملف لديه في الوجود. ثم إذا كان لا وجود لها، ماذا نفعل هنا؟ دعونا نبدأ هنا. ما هذا do-- هذا الحرف الأول. ماذا يفعل؟ انه يحصل على حرف واحد، أليس كذلك؟ فما هو هذا به؟ انها تحصل على الحرف الأول. أحد يعرف EOF؟ الجمهور: نهاية الملف؟ رئيس 1: نهاية الملف-- بالضبط. حتى انها سوف تذهب من خلال الملف بأكمله، أليس كذلك؟ وبعد ذلك يجري لتحديث من قبل الحصول على كل حرف لاحق. أليس كذلك؟ وما كان يفعل؟ الجمهور: أن وضع in-- رئيس 1: طباعة Putchar لشاشة التوقف الخاصة بك. [غير مسموع] الحرف. ثم عندما [غير مسموع] هذا سوف يغلق الملف. الجمهور: هل لا تحتاج إلى [؟ آخر؟ ؟] رئيس 1: ليس بالضرورة. أعني، انها ضمنية نوع من هذا. لأن هذا يعود، رغم ذلك، ما دام لأن ذلك لا يصاب هذا، وكنت على ما يرام. أعني أنها ربما جيد ممارسة للقيام آخر. لكن آخر ليس دائما الضرورة خاصة إذا كان لديك شيء مثل هذه العودة، التي يعني أنه في هذه الحالة إذا كان المصيد ذلك، البرنامج هو الذهاب الى نهاية وأنه سوف لن تحصل على هذا. انها اكثر للحالة حيث كنت ليس بالضرورة عودته شيء. لأنه إذا لم يكن هذا العودة أي شيء، فإن هذا يعني أنه إذا كان هذا صحيحا، ان بقية هذا لا تزال تعمل. وفي هذه الحالة، عليك تريد كاذبة. اذا كان عودته، و إنهاء البرنامج الخاص بك، وآخر ليس من الضروري فقط الوقت، اعتمادا على السياق. يعقوب، هل لديك سؤال؟ الجمهور: نعم. حتى لا fgetc الحصول على الحرف التالي؟ كيف تزيد من الطابع؟ رئيس 1: نعم. حتى fgetc يحصل على الحرف التالي. يمكنك التفكير في الأمر مثل C ++ في الشعور. الجمهور: فما كان EOF؟ رئيس 1: EOF هو نهاية الملف. انها مجرد علامة التي تمكنك من معرفة ان كنت في نهاية الملف. لذلك هذا هو الذهاب الى طباعة لمعيار الخاص بها. ثم انها سوف تغلق ملف عندما يكون القيام به. ثم دعونا نذهب ل ملف المقبل، أليس كذلك؟ هكذا عموما، ماذا يفعل هذا البرنامج؟ [غير مسموع] رئيس 1: نعم. فإنه يطبع للتو كل شيء هناك. حتى CAT إذا كنت الرجال قد استخدمت من أي وقت مضى ثم اسم بعض الملف-- أنا لا أعرف إذا كان أي من لديك من أي وقت مضى فعلت ذلك في الطرفية. ولكن إذا كنت من أي وقت مضى استخدام قيادة CAT-- C-A-T-- ثم مهما كان ملف لديك there-- عليه يطبع بها لمحطة الخاص بك، والتي يمكن أن تكون فائقة مفيد لبعض الأشياء. أنا استخدامها كثيرا. فهل يعقل أن الجميع؟ بارد؟ موافق جدا مهمتك now-- إما عن طريق نفسك أو مع الناس في جميع أنحاء you-- هو مجرد كتابة برنامج بسيط التي سوف أكتب فقط "مرحبا، العالم!" إلى ملف. [غير مسموع] [غير مسموع] رئيس 1: كنت مثل، فعل أفعل ذلك الأسبوع الماضي بشكل سيء؟ لم أكن أعتقد أنه كان سيئا. أنا سعيد لأنك هنا فقط. انها حقا يجعلني سعيدا. أنا فتاة من متع بسيطة. أود فقط عندما يحضر لي الباب. لذلك أنا بدأت للتو هذا ل يا رفاق حتى نتمكن من الكود معا. أنا لا أحب وضع أي شخص على المكان إلا إذا كنت تريد أن تكون. الجمهور: بالنسبة للمسابقة، والقيام لدينا لكتابة البرنامج؟ رئيس 1: قد يطلب منك ل كتابة برامج بسيطة باليد. نعم. الجمهور: إن المسابقة هي الاسبوع المقبل، أليس كذلك؟ رئيس 1: إن مسابقة هو يوم الأربعاء المقبل. وهذا يعني ان هناك [جميل؟ CSE؟] الدرجات الحزب بعد ذلك، والتي يعني أنك سوف تحصل على علاماتك العودة أن night-- في وقت ما؟ من يدري؟ لكنها ستكون في تلك الليلة. حسنا. كيف نريد أن نبدأ هذا؟ سأعطيك ويبدأ hint-- مع هذا. الجمهور: لديك لفتح ملف. رئيس 1: نعم. فماذا تريد أن نسمي هذا؟ هل تريد فقط أن نسميها "ملف"؟ دعونا تجعل من السهل. حتى fopen-- ما لدينا إخراج الاختبار سيكون؟ نسميها "مرحبا". وما هو الوضع لدينا؟ ماذا نحن فاعلون لهذا الملف؟ الجمهور: اقرأ. كتابة. رئيس 1: نكتب عليه. جميل. موافق، لذلك لدينا هذا الملف الآن. ماذا علينا أن نفعل؟ الجمهور: تحقق اذا كان لاغيا. رئيس 1: التحقق ما اذا كان null-- بالضبط. هذا ما أحب أن أسمع. يجب أن يكون تلقائيا، خاصة الى حد كبير من هذه النقطة. إذا كنت تبدأ segfaulting، وربما كنت لم تحقق لاغية في مكان ما. تسع مرات من أصل عشرة، وهذا سيكون من الخطأ. حتى إذا كنت قد مجرد الحصول في عادة، دائما التحقق لو كان باطلا، حياتك ستكون لطيفة وeasy-- أو أسهل. حتى تحقق لمعرفة ما اذا كان باطلا. حتى لو انها ليست لاغية، والتي هو ما يساوي الانفجار means-- لا null-- انها صالحة. ماذا نريد أن نفعل؟ نحن نريد فقط لطباعة إلى ذلك الملف، أليس كذلك؟ وذلك ما نحن ذاهبون للاستخدام؟ الجمهور: Fprintf رئيس 1: Fprintf-- جميل. وfprintf يأخذ اثنين حيث arguments-- انها تسير وماذا نريد المطبوعة. فما هو أول واحد؟ أين هو ذاهب؟ الجمهور: ملف. رئيس 1: انها تسير إلى ملف. وماذا نريد المطبوعة؟ "مرحبا، العالم!" حسنا. لدينا thing-- آخر واحد نموذج آخر كبير هنا. الجمهور: إغلاق. رئيس 1: إغلاق. هناك تذهب. الجمهور: هل هذا يحدث إذا كان الملف هو باطل؟ رئيس 1: لا، هذا إذا لم تكن فارغة. الجمهور: أوه، لو كان not-- موافق. لFOPEN ثم اثنين من الحجج التي تذهب في الداخل، ماذا تعني الوسيطة الأولى مرة أخرى؟ رئيس 1: والحجة هي تماما مثل اسم الملف الذي تريد الذهاب إليه. حتى بعد هذا يعمل، تفضلتم لدينا بعض ملف يسمى "مرحبا" التي "مرحبا، العالم" داخلها. هذا كل شيء. مجرد اسم. الجمهور: وبما أنها كتابة، و ليس لديها ملف في الوجود بالفعل. غير أن ما قلته؟ رئيس 1: الحق. بالضبط. إذا "مرحبا" كملف لا وجود له حتى الآن، فهو الذهاب لإنشاء ملف يسمى مرحبا "وإرسال لانها لكم. الجمهور: عندما كنت أقول برنامج لوكتب على الملف، لماذا لا تكتب "ملف" بدلا من اسم الملف وfprintf-- رئيس 1: لأنه في هذه الحالة، لدينا أن الملف-- كبيرة في كل نجوم caps--، ملف. لذلك هو مؤشر إلى ملف ان كنت تتحدث عن. هذه هي الطريقة التي نحن فقط الرجوع إليه. حتى في هذه الحالة، يمكن ان يخطر آها الملف--، يمكننا استخدام this-- الملف هنا يشير إلى افتتاح "مرحبا" والسماح لها كتابة. الجمهور: يمكن أن نضع "مرحبا" بدلا من ذلك [؟ فقط] الملف؟ و؟ رئيس 1: لا، لأن "مرحبا" يجب أن تكون مفتوحة وللكتابة. الملف هنا هو مثل التسمية التي تقول حسنا، نحن يكون هذا hello-- الملف-- أننا نبحث في. تم فتحه. ونحن نذهب إلى الكتابة إليه. إذا كنت تستخدم فقط "مرحبا"، أن يتم تغليف في ذلك. لذلك سيكون ليفزع. أعني، هل يمكن أن يدعى ذلك. كنت قد فعلت الملف، نجم "مرحبا"، يساوي ذلك. لكن بيت القصيد هو أنك تحتاج مؤشر نجم ملف من أجل لتكون قادرة على استخدام هذه الوظائف. الجمهور: هل يمكن أن تفعل ملف، نجمة، ملف، "مرحبا" أو هل لديك لوضع ملف نجم، ملف به؟ رئيس 1: هل يمكن القيام ملف، نجمة، "مرحبا." يمكنك تغيير هذا ل أيا كان الاسم الذي تريده. انها التعسفي تماما ما هو هذا الاسم. يمكنك أن تسميه أي شيء. تسميته السباغيتي الطائر، إذا أردت. الجمهور: ما هو "ث" في الاقتباس عنه؟ رئيس 1: إن "ث" هو مجرد واسطة. لذلك نحن في الكتابة إلى هذا الملف. الجميع جيدا؟ واضح؟ نعم. الجمهور: لذا عندما يكتب هذا ملف، أين نحن بعد ذلك تجد أن الملف؟ رئيس 1: سوف تكون في نفس الدليل الذي كنت فيه حاليا. إذا كنت في PSET ثلاثة و تشغيل هذا، ضمن PSET بك ثلاث مجلد سيكون هذا ملف يسمى "مرحبا". بارد؟ الجميع جيدا؟ أشعر وكأنك جميع الحصول عليه، وهو أمر عظيم. موافق. حتى العودة الى بلدي show-- الشريحة أنا أحب عندما تعمل الأشياء. OK، pointers-- هل أنت متحمس الرجال؟ مؤشرات كبيرة. أنها تأخذ قليلا للالتفاف حول رأسك. هذا هو بلدي السنة الثانية مؤشرات التعليم. وأعتقد أنني أخيرا حصلت عليه. حتى إذا كنت النضال، انه موافق. كما قلت من قبل، رسم الصور يساعد كثيرا مع الأشياء في CS، بقدر ما اعتقد ان الناس يميلون يا للتفكير، ونحن في جهاز الكمبيوتر. ينبغي لنا مجرد رمز. صور الرسم No-- سوف تساعد حقا لك. وأنا حقا نشجعكم على الاستفادة من الجانب روضة الأطفال الخاص بك وتبرز الطباشير أو علامات والتعادل. لأنها سوف تساعدك. وإذا رأيت لي في ساعات العمل، و وسوف تحمل نحو رزمة من الورق مع أقلام الرسم الامور. لذلك خاصة مع pointers-- رسم الصور. وأنا متأكد من أننا ذاهبون فعلا ل يكون رسم بعض الصور هنا أيضا. لذلك يا رفاق جميعا حصلت لرؤية بينكي، هذا الشيء claymation بارد. ونعتقد انه مضحك حقا عندما انه سينفجر في حفنة من القطع. انها بعض الراحة هزلية لفئة. C [غير مسموع] هذه القدرة العظيمة لتكون قادرة على السيطرة على الذاكرة. وانها واحدة من الأشياء التي حقا يجعل من هذه اللغة القوية. ولكن مع القوة الكبيرة تأتي مسؤولية كبيرة. ويمكن أن يحدث أشياء مجنونة إذا كنت غير دقيق. حتى عندما كنت تستخدم مؤشرات، وتريد أن تجعل تأكد من أنك تفهم حقا بالضبط ما تفعلونه. نأمل أن قليلا المقبل ل الوقت سوف تساعدك على فهم حقا المؤشرات، وكيفية استخدامها، وكيفية التعامل معهم. حتى memory-- أنا متأكد من أننا بحثنا رأيت هذا المخطط من قبل. لذلك هذا هو مجرد رسم تخطيطي بسيط من كيف يمكن تخزين الأشياء الذاكرة. بحيث يكون لديك أساسا هذه صفائف ضخمة من كتل بايت واحد ما لدينا طفيف here-- الزيادات من جانب واحد في كل مرة. هذا هو في عرافة [غير مسموع] حتى كتل ثمانية بت. ويرتبط كل كتلة مع بعض عنوان عشري. حتى إذا كنت من أي وقت مضى نرى 0X، وهذا مجرد الترميز انه عنوان عشري. يمكنك تحمل هذا يعني بعض العناوين في الذاكرة. نحن نتحدث عن عناوين الذاكرة كلما رأيت عشري. لدينا [إينتس] هي متغيرات، يطفو هي المتغيرات التي تخزن. حتى متجر [إينتس] [إينتس]. متجر يطفو يطفو. لذلك لدينا أيضا مؤشرات ان عناوين الذاكرة المخزن. هذا هو نوع من الخرائط. المؤشرات هي حصرا لعناوين الذاكرة. ذلك أن مثل نوع الخاصة بك هناك. الجهاز الخاص بك هو 32 بت، مما يعني عنوان الذاكرة الخاص بك هو أربعة بايت. لذلك أي مؤشر أن لديك يحدث أيضا أن تكون أربعة بايت. وإلا لو كان أربعة بايت، الذاكرة هي أربعة بايت. ذاكرة تخزين المؤشرات. وبالتالي، انهم أربعة بايت. Cool-- ترغب فقط في تعزيز ذلك. يجب أن تحصل على هذا هزلية الآن. أنا لا أعرف كم منكم مراوح XKCD، ولكن أنا أحب XKCD. انه لشيء رائع. حسنا. هكذا خلق pointers-- كما قلت، انها الى حد كبير تماما مثل أي شيء آخر. لديك نوع. لديك اسم. أليس كذلك؟ هذا ما لدينا هناك. [؟ عرافة؟] نجم تعني أنها مؤشر، وبعد ذلك كل ما تريد أن نسميها. لذلك يمثل نوع ماذا يمكنك تخزين. كل الحق؟ في بنفس الطريقة التي اذا لم نفعل [إينتس]، نحن نعلم أننا تخزين عدد صحيح هناك. مع مؤشر، و يحمل عنوان الذاكرة. ولكن ما يعنيه هو that-- هنا هو المكان رسم سوف تأتي في متناول اليدين. حتى في هذه الحالة، لدينا بعض value-- دعنا نقول الأربعة. أربعة هو في عنوان واحد. موافق؟ يعني هذا واحد الأول هنا أنه من 2X المؤشر. أليس كذلك؟ انها بعض مؤشر السينية. قد يكون خ شيئا، أيا كان. مهما خ is-- القول x هو أربعة. انها تسير لتخزين عنوان الذاكرة هنا. الباحث ذلك، نجمة، x-- هذا هو بعض فتحة أخرى في memory-- الذي يعرف ما هو هذا. لكنه سيحتاج لتخزين عنوان هنا. ولذلك فإن هذا سيكون like-- في هذه الحالة، أيا كان، يتم تخزينها في 0x1-- كل ما تم تخزينه في العنوان الذي يحمل مؤشر لدينا، لديه لمتابعة المباراة مع ما كنا المعين. حتى في 0x1 ومن في هذه الحالة، وهذا هو س. لا يمكن إلا أن يكون هذا من أي وقت مضى كثافة العمليات في حين أننا نستخدم هذا. وبالمثل، إذا كان لدينا الخريطة 1y آخر، أيا كان يتم تخزين عنوان مع ذ له أن يكون الشيء نفسه مع char-- ض. في نفس الطريق، وكلما محاولة القيام intx يساوي 0.4، انها سوف يصيح فيك ويكون مثل لا، قلت لك أراد الباحث. ومن المفترض أن يكون هذا الباحث. التوقف عن محاولة لجعلها تطفو. لذلك دعونا الأشياء أن تكون ما تريد أن تكون. ترك الأمور يكونوا أنفسهم. ذلك الشيء الكبير هو فقط أيا كان نوع المؤشر هو، هذا هو فقط شيء يمكنك تخزين هناك. موافق؟ مع الممارسة، كما هو الحال مع في الأسبوع الماضي، كل شيء يبدو حقا نوع من التجريد. ونحن في طريقنا للقيام ببعض الممارسات. ينبغي أن يكون أكثر منطقية. حتى الرجوع وdereferencing-- انها من المهم حقا للحصول على هذه مستقيمة. لا يزال لدي لتحديث بين الحين والآخر. وأنا مثل الانتظار، وهو واحد لا أريد؟ لذلك العطف سيعطي الواقع لك مرجعية أو عنوان. لذلك إرجاع عنوان في يتم تخزين الذاكرة التي المتغير. حتى انها سوف تعود فعلا لك وعشري، في حين أنه dereferencing هو في الواقع ذاهب الى ان نعطيكم البيانات التي يتم تخزينها هناك. موافق؟ لذلك نحن في طريقنا لننظر إلى مثال سريع حقا، أو في الواقع يصل المقبل. موافق. لذلك علينا أن نفكر حقا بعناية حول هذا الموضوع. حتى هنا لدينا بعض صحيحا س. انا ذاهب الى محاولة رسم هذه إلى أحسن قدراتي. لذلك نحن ذاهبون الى هذه الفتحة س. وانها لتخزين خمسة. عنوانه هو 0x4. بارد؟ كل خير. حتى الآن لدينا هذا المؤشر. كان أكثر من هنا. والعطف يعطينا عنوان لشيء ما. لذلك، في هذه الحالة، هو عنوان السينية. ما هو عنوان العاشر؟ 04-- وهذا المؤشر هو في 0x08. بارد؟ لذلك يمكنك التفكير في هذا المؤشر، 04، يشير فقط إلى هنا. وانهم دعا مؤشرات لأنه كما أن نحصل أكثر في هذا، وأنت تسير لرؤية لافتا إلى الأشياء. وكتلة واحدة لافتا إلى أخرى سوف كتلة جعل الكثير من معانيها. حتى هنا هما. ثم لدينا بعض نسخة، وهو 0x0c what--. وانه سيكون ل dereference مؤشر لدينا. فما نقوله هو انه حسنا، لدينا هنا مؤشر. القيمة التي يخزن هي 0x04، وماذا انها تقول ان تذهب الى هذا العنوان وتقول لي ما هو عليه. ذلك أن فعالية ما هذا السهم به. يمكنك التفكير في مثل هذه نجمك. لذلك حسنا، عندما نفعل نجوم، فهذا يعني متابعة. يذهب إلى هذا العنوان. وهذا هو أساسا مجرد التالية هذا السهم لهذا قطعة الذاكرة. وتعطينا ما هو عليه، وهو 5. وهذا هو السبب لدينا نسخة تساوي 5. هل هذا يعقل؟ لا أحد يحتاج لي للذهاب من خلال ذلك مرة أخرى، أو ببطء أكثر؟ تريد مني أن أذهب من خلال واحدة لمزيد من الوقت؟ موافق. نحن ذاهبون لإعادة رسم مرة أخرى. عندما نبدأ، نحن نتفق جميعا لدينا بعض قطعة من الذاكرة وهذا متغير س التي وضعناها يساوي 5. نحن لا نتحكم حيث هو في الذاكرة. حتى هذه البقعة هي فقط تعيين تعسفا. جيدة هناك؟ موافق. ثم أننا تهيئة مؤشر إلى int. هذا هو السبب في أنه يسمح للإشارة إلى س لأن لدينا عدد صحيح هنا. لدينا قسما آخر من الذاكرة لأن هذا المؤشر هو متغير تماما مثل أي شيء آخر. لقد كلف ذلك تعسفا بعض المساحة في الذاكرة. وما يخزن هو عنوان السينية. العطف يعني عنوان السينية. فما هو عنوان العاشر؟ الجمهور: انها zero-- رئيس 1: 0x04. حتى then-- آخر واحد. لدينا بعض copy-- مرة أخرى مجرد متغير آخر. لذلك دعونا تعيين بعض مكان التعسفي. ونحن dereference مؤشر لدينا. النجم تعني الذهاب الى عنوان تخزينها في مؤشر بلدي. تقول لي ما هناك. حتى عنوان تخزين في مؤشر لدينا هو 0x04. لذلك نحن نذهب إلى هذا العنوان. انها لافتا إلى هذا العنوان. ما هو داخل هذه الكتلة الذاكرة؟ انها خمسة. وهذا ما نعلق نسختنا. الجميع جيدا؟ بارد. الصور Again--. حتى تتبع القيم here-- أنا الذهاب لتمكنك من رفاق التفكير حول هذا الموضوع. يمكننا رسم صورة أخرى. ولكن أريدك أن محاولة والعقل من خلال هذا لوحدك لمدة دقيقة. لأنها لم تعط لنا عنوان سبيل المثال، أنا ذاهب لمجرد القيام x-- العطف التي ينبغي أن تساعد قيادتها المنزل. العطف يعني العنوان. وذلك في أول واحد، الجميع الذهاب مع السطر الأول. بعض خ مجموعة في بعض five-- فتحة عشوائية في الذاكرة. مؤشر كثافة النجم يساوي إلى عنوان السينية، أليس كذلك؟ مؤشر نجم الباحث يخلق هذه الكتلة، يسمونها المؤشر، ويسند الى عنوان السينية. أنا الرهيبة في الوات. الآن ما نفعله هو أننا نقول OK، dereference مؤشر لدينا. لذلك نحن نذهب موافق، ما هو في مؤشر لدينا؟ انها العطف س. الذهاب إلى العطف x و إعادة تعيين ذلك. حتى الآن، العطف س ستكون 35. ذلك أساسا، عندما كنت dereferencing، تذهب موافق. كنت على وشك أن رسم الصور من هذا القبيل. كنت على وشك أن رسم السهام فوق حيث هو. لذلك يذهب إلى هذه الفتحة في الذاكرة وإما أعطني أن يعود القيمة، أو تغييرها. في هذه الحالة، لأننا في هذه القيمة، ونحن تكليفه ليكون 35. بينما في الماضي واحد، إذا لاحظت، نحن تم تعيين ما كان من هنا لشيء آخر. بحيث يصبح لديهم هذا الجدول رهيبة. انها ليست بهذا السوء. يا رفاق العمل على ذلك. انا ذاهب الى رسم بها على متن الطائرة. نحن ذاهبون لملء بها معا، موافق؟ حتى انتزاع بعض الورق، والاستيلاء شريك، بدء العمل. انا ذاهب الى الحصول على أكبر قطعة من الطباشير. لأنه سوف يكون هناك الكثير. موافق. أستاذ: OK. دعونا نبدأ مع الصف الأول. سنبدأ هناك، ثم يا رفاق ربما يمكن أن تعمل من خلال بعض أكثر. موافق. ويساوي أضعاف ب ج فما هو؟ انها ليست مسألة خدعة، وأعدكم. الطالب: 4 مرات 5. الاستاذ: 4 مرات 5. 20. إذن ما هو ب؟ الطالب: 4. أستاذ: وج؟ الطالب: 5. الاستاذ: 5. ثم هذا هو مجرد الذهاب ل أن العطف لذلك، العطف ب، ج العطف، أليس كذلك؟ ليس سيئا. انها بسيطة بما فيه الكفاية. موافق. حتى واحد القادم. وتعادل مرة وج، في حالة كان أي شخص غير معتاد على ذلك. الجميع هو مألوف مع الزمن تساوي؟ حسنا، كل هذا means-- هذا الاختزال ليساوي مرات ج. يمكنك أيضا أن تفعل ذلك مع الانقسام، وبالإضافة إلى ذلك، مع الطرح. يمكنك القيام متساوين، أو زائد يساوي ج يعني يعادل ج زائد، ناقص المساواة ج أن يكون يساوي ناقص ج. انها السكر النحوي فقط. لذلك، في هذه الحالة، يساوي فإن الأوقات ج تعطينا ماذا؟ مرة أخرى، ليست مسألة خدعة. الطالب: 100. أستاذ: 100. لم يتغير أي شيء آخر؟ لا. ربما أنا سوف تحصل في النهاية أفضل في الوات بلدي. الطالب: حسنا، آسف، كيف تحصل على 100؟ أستاذ: OK. لذلك لا يساوي ج مرات، لذلك مرات ج. الطالب: أوه، كنت تستخدم وللprevious-- الاستاذ: نعم. لذلك فان هذه هي قيمنا الأخيرة. هذه هي ما يجب أن يكون باستخدام ونحن نتحرك إلى أسفل، موافق. لذلك، ب هي الشيء الوحيد الذي تغير، أليس كذلك؟ لذلك دعونا ملء كل شيء آخر. B. ما هو ب يذهب أن يكون؟ أن تكون أو لا تكون. فما هو هذا به؟ ما هو النجم به سنويا؟ الطالب: الرمز إلى موقع السلطة. الطالب: لا، ليس تماما. لذلك هذا هو مرجع د. الطالب: هي قيمة ذلك ب سلمت السلطة الفلسطينية. الاستاذ: نعم، حتى السلطة الفلسطينية عنوان لذلك، أليس كذلك؟ حتى انها قائلة الذهاب إلى حيث هو تخزينها وإعطائها تلك القيمة. فما هو ب؟ الطالب: 100. أستاذ: 100. الكمال. موافق، لذلك الكمبيوتر هو ما يتغير. كل شيء آخر يبقى على حاله. ما الكمبيوتر سيكون؟ مهمة بسيطة. كمبيوتر تساوي السلطة الفلسطينية، وما هي السلطة الفلسطينية؟ الطالب: العطف و. أستاذ: الكمال. الآن نحن نحصل على اهتمام. حسنا، دعنا كسر هذا واحد لأسفل. أولا، ما هو أضعاف ب ج، لأن هذا الجزء السهل من هذا واحد، أليس كذلك؟ مرة ب ج is-- الطالب: 500. الاستاذ: نعم، بذلك ما يفعله هذا واحد، إذا كان نجم للبرميل، ما تغير؟ الطالب: ما هو في the-- أستاذ: ما هو في ب؟ الطالب: ما هو في الفضاء أن للبرميل يشير إلى. الاستاذ: والرصاص يشير علي: الطالب: B. أستاذ: B. لذا فقط شيء تغير هو ب، الحق. حتى بالأبيض الأوقات ج، 500. وهذا ما يتغير الآن. بارد. جميل. تقومون به عظيم. كل الحق، وكسر هذا واحد لأسفل. C يتغير، أليس كذلك؟ حتى نتمكن من ملء كل شيء آخر. دعونا نرى. موافق. ونحن نعلم أن ج سوف يكون المنتج من رقمين، أليس كذلك؟ ما رقمين، على الرغم من؟ الطالب: A و C؟ أستاذ: من هو ذلك الحق لأول واحد. لذلك نحن د الرجوع p من ذلك، أليس كذلك؟ P من النقاط لذلك، لذلك نحن نعرف أن هذه ستكون 100 مرة ماذا؟ أضعاف ما يفعل نقطة الكمبيوتر ل؟ يشير إلى. حتى 100 مرة 100 هو 10000. هل هذا منطقي؟ بارد. امتداد الوطن، والرجال، الصف الأخير. موافق. ما الذي تغير هنا؟ الطالب: أ. الاستاذ: أ. مثالي، لذلك كل شيء آخر يمكن أن تبقى نفسها. موافق. وما هو؟ لذلك هو أضعاف ما؟ هذا هو النجم برميل. حتى النجوم للبرميل يعني هنا برميل، ونقاط الرصاص لب. الطالب: 500. أستاذ: 500. لذلك لدينا 500 مرة 100. هذا هو 50000. يا للعجب! ننظر في ذلك. الطالب: لماذا لدينا و& ج لlast-- الاستاذ: آسف. الطالب: أوه، حسنا. أستاذ: بلدي سيئة. الكثير من الكتابة. الجميع جيدا؟ ليس سيئا جدا، أليس كذلك؟ لا يتطلب قليلا في حين أن العمل من خلال. إذا كنت كسر عليه، فهم ما كل جزء كما يشير علي: مع انها كل شيء، yes-- كسرها نزولا إلى قليلا مشاكل وتتحد ثم، ويمكنك القيام ببعض الاشياء رهيبة. هناك إجابات، ولكن فعلنا ذلك. مؤشر الحساب. آه. يدي كلها طباشيري. ذلك إضافة أو طرح الباحث يضبط المؤشر حسب حجم ونوع من المؤشر. نتذكر كيف كل نوع لديه حجم مختلف؟ ذلك مثل ضعف أو طويلة طويلة غير ثمانية وأربعة ولكن الباحث هو شار واحد. وذلك ما تريد القيام به is-- شيء واحد أن نتذكر مجرد أن مقدار الخاصة بك قيمة المؤشر يتغير الواقع سوف تعتمد على نوع المؤشر هو. الجميع الجيد مع هذا؟ أستطيع محو ذلك؟ نحن في حالة جيدة؟ رهيبة. حتى إذا كان لدينا بعض مؤشر that-- هذا هو الذهاب الى be-- أنا الذهاب لجعله مؤشر كثافة العمليات. فإنه يخزن هذا. لو كنت لأقول المؤشر زائد واحد، ما انها تنوي القيام به وانها تسير لتحديث ذلك حسب حجم وكثافة العمليات لأن هذا هو نوع المؤشر هو. مع C، كل شيء صارمة جدا ومنظم. مؤشر كثافة العمليات يجري لتحديث من قبل مقدار المساحة سوف تأخذ عدد صحيح. عدد صحيح أربعة بايت. ذلك ما يمكن أن يتحول إلى هذا؟ كنت تقوم بإضافة أربعة فقط على هذا. الآن المؤشر سوف be-- موافق. حتى إذا كان شار وفعلنا المؤشر زائد واحد، ما من شأنه أن يكون الآن؟ إذا كان started-- التظاهر نحن started-- الآن انها 0x08. دعنا نقول الآن أن هذا كان شار المؤشر، واضاف نحن واحد. ما من شأنه أن يغير من؟ كم عدد البايتات هي شار؟ الجمهور: واحدة. رئيس 1: واحد. الجمهور: 0x09 ذلك. رئيس 1: لذا سيكون من تسعة. حتى مجرد شيء أن نتذكر. فقط عند إضافة واحدة، انها ليست إضافة واحدة إلا إذا كان شار. لقد مضيفا أنه كم بايت من النوع الذي هو عليه، وهذا هو السبب لدينا هذه المعادلة هنا. لذلك فمن الأوقات إدارة النزاهة المؤسسية حجم من نوع المؤشر. لذلك لدينا مثال هنا. كلف Y لتلك القيمة، 0x4، عندما فعلنا ذ زائد واحد يساوي. ما هو عليه، ما هو في العاشر، لا يتغير. ما تفعله هو تغيير ما في ذ. عنوان المخزنة في ذ تحديثها من قبل أربعة لأن هناك أربعة بايت في عدد صحيح وانها مؤشر كثافة العمليات. حسنا. حتى الآن لدينا تمرين آخر. لذا فإن السؤال هو ما سيتم طباعة. أي أفكار؟ الحضور: عدد الشخصيات في القط سعيدا؟ رئيس 1: بالضبط. مع ذلك أحب سلسلة الخاص بك. لا تحصل الجميع ذلك؟ نريد أن المشي من خلال ذلك؟ نعم، موافق. ذلك ما لدينا here-- أنا هذا مثل أكثر من ذلك بكثير. ليس لدي ل [غير مسموع] يبعث على السخرية. لذلك لدينا سلسلة لدينا هنا، القط سعيد. جميل. لدينا بعض المضادة التي نحن تتبع. لذلك لدينا بعض شار * المؤشر ومن المقرر أن مجرد يساوي STR. هذا ما تقوم به هو انها ل إسناد بعض مؤشر إلى بداية سلسلة الخاص بك. لأنني واثق، كما وذكر في محاضرة، لقد أعطيت يا رفاق هذا نوع بيانات تسمى السلسلة. ولكن في الحقيقة هي مجرد سلاسل of-- مجموعة مثل شار *. انها مؤشر إلى مجموعة من الشخصيات التي هي متجاورة في الذاكرة. لذلك هذا مجرد يحدد ذلك يساوي أي سلسلة من التي حددها حيث الأول هو طابعها. لذلك هذا هو مجرد وضع بعض نقطة مساوية لبداية السلسلة. الجميع جيدة هناك؟ بارد. لذلك هذا هو dereferencing مؤشر لدينا. لذلك يجري فعلا ل تعطينا بعض القيمة هنا، في سلسلة لدينا أن نتحدث عنه. ونحن نقول ما دام انها ليست فاصل فارغة. لذلك تستمر حتى تحصل إلى نهاية السلسلة. تحديث المؤشر من جانب واحد. حتى ص، فإنه سيتم تحديث الواقع من جانب واحد في كل مرة لأن هذا هو شار، شار *. لذلك سيكون من خلال الذهاب. انها تسير لتحديث. حتى أول مرة هذا يمتد، انها سوف أكون هنا في الساعة. انها تسير لتحديث. انها سوف تكون لذلك. انها سوف تكون ص، ص، وهلم جرا وهكذا دواليك. سنقوم بتحديث مضاد. عندما تصل إلى النهاية، يطبع فقط مدى ما حصلت عليه. نعم. الجمهور: لذلك يهم مساحة واحدة، أليس كذلك؟ موافق. رئيس 1: أعتقد ذلك. غير أن question-- الجمهور: [غير مسموع]. رئيس 1: لا تقلق. هذا أفعل ذلك. كل الحق، لذلك شيء واحد أنا فهم هو أنه مع صفيف، يمكنك أيضا التعامل معها على أنها مؤشر لأن المصفوفات هي فقط البقع مستمرة من الذاكرة. حتى تتمكن من التعامل معها بنفس الطريقة. يمكنك التلاعب بها مع مؤشرات أيضا. وذلك بدلا من القيام، في هذا القضية، والشيء مماثل ستكون مجموعة 0 يساوي 1. ولكن بنفس الطريقة التي يتم تحديد سلسلة قبل بداية حيث الأول هو طابعها، يتم تحديد مجموعة من قبل حيث عنصرها الأول هو. لأننا نعرف، ونحن مضمونة، أن هذه ستكون مستمرة كتل من الذاكرة. وهذا ما يسمح لنا للقيام بذلك. نحن نعرف انهم المستمر كتل من الذاكرة. حتى في هذه الحالة، من خلال dereferencing مجموعة عادلة، أن يخبرنا، موافق، انتقل إلى بدء مجموعة الخاص بك، والذي هو هنا. بحيث يمكنك تعيين يساوي واحد. وفي هذه الحالة، مهما كانت مجموعة الخاصة بك نوع هو، عند تحديثه من جانب واحد، هذا مجرد مثل تحديث إلى مؤشر المقبل. يمكنك أن تفعل ذلك لأنك أعرف ما هو في مجموعة الخاصة بك. لذلك يعرف كم ل تحديث المؤشر من قبل، ما عنوان لتحديثه لذلك أن كنت في الفتحة القادمة. لذلك هذا هو مجرد وسيلة مختلفة كتابة مجموعة 0 يساوي 1، مجموعة 1 يساوي 2، مجموعة قوس 2 يساوي 3. انها مجرد طريقة أخرى للتفكير في الامر. لأنها مستمرة كتل في الذاكرة، يمكنك الرجوع إليها إما من قبل مجموعة notation-- وأنا شخصيا ولكن ربما تجد easier-- تحتاج إلى التلاعب به الصارم عناوين الذاكرة. وهذه هي الطريقة التي ستفعل ذلك. نوع أكثر من مثل شيء بارد يمكن أن تفعله ربما مقابل لا شيء كنت الذهاب فعلا إلى تنفيذها. أنا استخدامها في 61. يا رفاق ربما لا تحتاج ما يدعو للقلق كثيرا. ولكن إذا كنت مهتما، تأخذ 61 في العام المقبل. نحن في الرجال امتداد الوطن. أنا أعرف، انها طويلة. ذاكرة ديناميكية Allocation-- لذلك نحن نعلم أن واحدة من الأشياء عندما تحدثنا خلال أول قسم لدينا معا، ونحن ننظر في مبادلة حيث كان وظيفة خارج نطاق الوظيفة الرئيسية لدينا. ونحن كانت تمر في هذه القيم التي كانت فعالة نسخة. وبمجرد الانتهاء من مقايضة المنفذة، أنه غادر لتوه كومة. تذكر، لدينا كومة إطار لتبادل. فإنه يترك وتلك قيم تترك معها. وكانت قد اختفت. نحن لا يمكن أن تفعل أي شيء معهم، وكنا حزين لأننا لا نستطيع مبادلة قيمنا. ولكن مع C، وكما ذكرت، كنت لديهم الكثير من السلطة على الذاكرة. ذلك ما يمكنك القيام به هو أن تتمكن من تخصيص الأشياء على كومة هنا التي ستبقى هناك حتى كنت أقول لهم ذلك. انهم مثل الأطفال جيدة. بقوا هناك. أنها لا تترك. انهم سوف يبقون هناك حتى كنت مثل، حسنا، يمكنك الذهاب بعيدا. بينما الأمور على المكدس، who-- انهم مثل الأطفال غير مطيع. أنها سوف مجرد الهرب عندما تريد أن تكون هناك وبعد ذلك انهم ذهبوا. لا يمكنك الحصول عليها مرة أخرى. حتى كومة is-- نحن في طريقنا ل الحديث عن malloc وحرة، والتي أنا متأكد يا رفاق سمعت في محاضرة. وهذا هو الأساس وسيلة لديك البيانات المستمرة للغاية. حتى تتمكن من الاحتفاظ بالبيانات حول طالما تريد. مهم. الجمهور: هل يمكنك تحديد كومة كومة و؟ هم يحبون الأماكن لوضع الأمور؟ رئيس 1: حتى أنهم just-- أساسا انهم الطريق نشير فقط إلى الذاكرة. حتى كومة من يضع فقط حيث يتم تخصيص الذاكرة بشكل ديناميكي، في حين يشير كومة أكثر إلى كومة الإطارات التي هي أكثر أهمية ل الوظائف التي تشغل الواقع. لم يكن لديك السيطرة حقا. الفرق كبير، لديك السيطرة على كومة إذا كنت تريد. لديك أقل السيطرة على المكدس. كومة يعتمد على الوظائف التي تعمل بنظام التشغيل، والترتيب الذي هم تشغيل، وكيف يتم إرجاع الأمور. بينما مع كومة، و سنرى، يمكنك القول، موافق، أريد أن تكون هذه القيمة حولها حتى أنا أقول لكم خلاف ذلك. لا يسمح لك التخلص منه. لا يسمح لك لتجاوز ذلك. وأنت تسير لإبقائه حول لطالما قلت لكم. تحصل ليكون مدرب في كومة، في حين أن stack-- ربما لو كنت مثل بالخدعة طريقك يمكنك أن تكون رب العمل. ولكن ليس تماما. وانها حقا الذاكرة فقط. انها مجرد طرق مختلفة الإشارة إلى الذاكرة. بارد. حتى مع ذلك، وكيفية السيطرة على الذاكرة الخاصة بك. انها مع malloc، التي وأنت تسير في الحصول على استخدام. لذلك فمن قصيرة فقط تخصيص الذاكرة. هذا كل ما هو عليه. هناك حفنة من بارد آخر الوظائف التي يكون الوك في النهاية، ويقفون لأشياء مختلفة. لذلك عندما تحتاج التخزين التي تحتاج لتدوم الوظيفة الحالية الخاصة بك حتى أنه عندما الحالية الخاصة بك تدير وظيفة بعيدا، لا يزال لديك البيانات التي قمت حصلت من ذلك، كنت ترغب في استخدام malloc. عليك أن تهيئة على الكومة. وكما قلت والحفاظ على قال: عليك أن يبقيه هناك حتى كنت اقول على خلاف ذلك، وهو الشيء المهم هنا. ذلك شيء واحد لإشعار، و هذا هو عادة المهم حقا، غير أن هذا sizeof هو السوبر مفيدة للاستخدام لأن هذا يتوقف على نوع الجهاز الذي تقوم بتشغيله، قد تكون لديها كميات متفاوتة الذاكرة التي يستغرق. لذلك تريد دائما لاستخدام حجم ذلك ان كنت لا تعتمد آلة، بحيث التعليمات البرمجية الخاصة بك سوف تشغيل على أي جهاز. وهذا مجرد جزء كتابة كود جيد. اذا كان يعمل على جهاز واحد، ولكن ليس أي من الآخرين، كيف كانت مفيدة برنامجك؟ لذلك تريد دائما ل تأكد واستخدام sizeof. الجمهور: ذلك هو أن مثل حجم 10 بوصة [غير مسموع]؟ رئيس 1: هذا هو حجم 10 [إينتس]. نعم. هكذا حجم من [إينتس] سيعود وكم من الوقت يستغرق الباحث واحد. أو حجم شار، كيف الكثير يستغرق شار واحد. ثم كم عدد القطع لذلك تريد؟ حتى في هذه الحالة، نحن نريد شيئا أننا يمكن تخزين 10 [إينتس] ل. وأنها ستعمل بغض النظر من آلة، وهو بارد. لذلك فإن عدد بايت التي تعطي فعلا لك؟ الرياضيات سريعة. الجمهور: 40. رئيس 1: 40. بالضبط. ذلك شيء آخر كبير. المؤشر أو malloc يمكن العودة فارغة. ذلك مرة أخرى، وتحقق دائما ل معرفة ما اذا كان عاد لاغية قبل محاولة فعل أي شيء معها. إذا حاولت وdereference هذا المؤشر الآن، انها مجرد الذهاب الى سوف segfault لأنك ذهبت وحاولت لمسة اغية عندما يجب أن لا يكون. حتى تحقق دائما لاغية. مرة أخرى، يمكن أن كل ما عليك فعله. قد تعود فارغة. انها سوف تعود لاغيا إذا كنت إما من الفضاء، أو لأي سبب من الأسباب انها واجهت بعض خلل الذاكرة. أحيانا فقط يعود فارغة. بحيث يكون لديك فقط للتحقق من ذلك. هذا كل هذه الشريحة يقول. ثم ما لدينا هنا هو دعوة إلى تحرير. هكذا بنفس الطريقة أنه إذا فتح ملف يجب إغلاق ملف، إذا الذاكرة malloc، كنت يجب تحرير تلك الذاكرة. ويا رفاق سوف تحصل للقيام الاشياء باردة حقا. وهناك برنامج يمكنك تشغيل ل معرفة ما إذا كنت من أي وقت مضى تسرب الذاكرة. ولكنك لا تريد أن تسرب الذاكرة. انها سيئة حقا. لخبط الأمور عادلة. انها سيئة للقيام تماما مثل البرمجة الحكمة لكفاءة التصميم. لكنه أيضا مجرد نوع سيئة لللجهاز الكمبيوتر الخاص بك. الأمور حتى مجرد المجانية عند malloc لهم. يا رفاق رؤية التماثلات هنا. سوبر بسيطة. فقط مجانا ثم أيا كان المؤشر الخاص بك، أيا كان اسم المؤشر الخاص بك هو، و سوف تأخذ الرعاية من تخليصه بالنسبة لك. بارد. ثم لدينا هذا. لذلك نحن مجرد الذهاب ل المشي من خلال هذا البرنامج. وبعد ذلك تتم يا رفاق. حتى [غير مسموع] الرئيسي فقط. لذلك لدينا بعض الباحث * المؤشر. لذلك لدينا مؤشر أن يجري عقد [إينتس]. وكم [إينتس] هو الذهاب الى عقد؟ واحد فقط. حجم وكثافة العمليات. نحن تحقق لمعرفة ما إذا كان المؤشر هو باطل لأنه هو، ونحن نريد أن نقول لا تفعل أي شيء. انها سيئة. لذلك نحن طباعة بعض الخطأ من الذاكرة، في معظم الأحيان العودة 1، كما يا رفاق تستخدم ل. ثم لدينا هنا، فإننا dereference مؤشر لدينا. وهذا يعني أننا في طريقنا للتخزين شيء ما في مكان معين بالنسبة لنا. * مؤشر كثافة العمليات، أو malloc، إرجاع عنوان حيث خصصت هذه ذاكرة لك. لذلك فمن الأساس مما يتيح لك like-- إذا كنت التفكير في مجموعة من منازل في حي إن كنت ترغب في وضع الأثاث الخاص بك في، malloc هو مثل موافق، وتحصل الذهاب لإيواء ثلاثة. وأنه يعطي لك عنوان المنزل الثلاثة. لذلك هذا الحق الآن، وهذا مخازن مؤشر عنوان، يخزن عنوان منزلك. * وسائل PTR، حسنا، أنا في بيتي. بارد. أنا بحاجة للحصول على بعض صحيح. لذلك كنت طالبا لشخص لتعطيك الأثاث الآن. حتى تحصل على بعض الباحث. وأنه يضع في المؤشر حيث انها تشير الى. وبعد ذلك فقط يطبع بها، أينما كنت دخلت. ومرة أخرى، فإن الإشارة. لذلك هذا هو وكأنك ذهبت إلى هذا معالجة ورأيت ما كان هناك. بارد؟ وبعد ذلك بالطبع نحرر مؤشر لدينا. لا ننسى لتحرير المؤشر. لا تنسى أن تحقق لاغية. لا ننسى لتحرير المؤشر. لديك اثنين من الأشياء التي تذكر من هذا، أو ذاك يجب أن نتذكر. نعم. الجمهور: [غير مسموع] الاشياء من هذا القبيل، وشار * ليالي. كيف نكون أبدا سراح هؤلاء؟ رئيس 1: جلالة الملك؟ الجمهور: هل مثل هذه السلاسل؟ قلت السلاسل تماما مثل شار * S، أليس كذلك؟ فلماذا لا نحرر السلاسل؟ رئيس 1: أنت فقط ل مجانا إذا كنت mallocing. الجمهور: أوه، إذا كنت mallocing. رئيس 1: لذا malloc وخالية هما شيئان أنه يجب أن يكون دائما معا. و مفتوحة، على مقربة F، أمرين يجب أن يكون جنبا إلى جنب. في كل تلك الحالات، تحقق لاغية. نعم. الجمهور: مجانا لذلك هو فقط السماح شيء آخر ليتم تخزينها هناك بعد وقد استخدم هذا البرنامج ذلك؟ رئيس 1: انها تقول فقط، حسنا، أنا فعلت مع هذا. لا تحتاج للحفاظ على حولها. وإلا فإن جهاز الكمبيوتر الخاص بك فقط أحب ومحاولة الاحتفاظ بها هناك. ثم can't-- تشغيله في قضايا الذاكرة في وقت لاحق. أردت دائما أن تحريرها ل فإنه يقول جهاز الكمبيوتر الخاص بك، حسنا، أنا فعلت مع هذه البقعة من الذاكرة. هل يمكن أن يكون عليه مرة أخرى بالنسبة لي لاستخدامها لاحقا. بارد؟ نعم. الجمهور: هكذا كنا٪ د فقط لأن الضعف الذي سيأتي إلى الوراء، أو لماذا is-- [غير مسموع]. الجمهور: هل يمكنك استخدام٪ ط؟ رئيس 1: يمكنك استخدام٪ ط. أي أسئلة اللحظة الأخيرة؟ المضي قدما. الجمهور: أنا فقط لدي سؤال سريع. لذلك المتغير PTR، that's-- مثل، مع كثافة العمليات * PTR = malloc، إن مجرد القول انها لافتا إلى مكان في memory-- رئيس 1: هل تريد [غير مسموع]؟ الجمهور: هو --that حجم of-- لا، كل شيء على مايرام. ولكن انها مجرد لافتا إلى مكان في ذاكرة هذا مجرد مثل أربعة بايت. رئيس 1: الحق. حتى malloc حجم يقول الباحث، حسنا، أنا ذاهب للذهاب هرب، تجد أربعة بايت من ذاكرة لك. عندما يجد أن أربعة بايت من الذاكرة، يتيح لك العودة وعنوان من أين يبدأ، وهذا ما المخزنة في المؤشر، أو PTR. الخير. يا رفاق تبدو أقل حيرة من معظم الناس عندما أتحدث عن المؤشر، لذلك أنا شعور جيد جدا في الوقت الراهن. حسنا. كما هو الحال دائما، وينبغي أن يكون رفاق جميع حصلت على الدرجات pset2 الخاص بك الآن. وأنا أعلم أن هناك بعض متزعزع الأمور حيث تقول، صيغة غير صالحة أو شيء من هذا. إذا كنت الحصول على ذلك، كل من الدرجات الخاصة بك صالحة على جانبي. حتى أستطيع أن أرسل لك لقطات من الدرجات الخاصة بك. فقط اسمحوا لي أن أعرف، وكذلك إذا كنت فقدان أي شيء أو الدرجات لا يبدو أن من المنطقي. تأتي لي. لقد كنت فخورة لك اللاعبين بالفعل، لذلك يبقيه. ولها راحة جيدة من الاسبوع الخاص بك. أنا متأكد من أني سوف نرى بعض من لك في ساعات العمل.