जेसन Hirschhorn: आपका स्वागत है A5 करने के लिए, हर कोई. हम आगे हम एक रोमांचक सप्ताह इतने सारे नए रहे हैं, क्योंकि ज्यादातर इस कमरे में चेहरे. यह अद्भुत है. आप में से बहुत से दुर्घटना से यहाँ हैं, जो भी बेहतर है. तो उम्मीद है कि आप हमारे साथ जुड़ने रखेंगे. इस सप्ताह हम खर्च करने के लिए जा रहे हैं खंड के थोक प्रश्नोत्तरी के लिए तैयारी. हमारे एजेंडे प्रति तो, हम बात करने जा रहे हैं वर्ग के लिए संसाधनों के बारे में एक सा है, लेकिन यह भी प्रश्नोत्तरी के लिए, और उसके बाद, फिर से, कक्षा बात करने का थोक खर्च सवालों के बारे में. हम जवाब देने के काम हो जाने के बाद अपने सवाल है, या अगर आपके सवाल स्वाभाविक रूप से मैं कुछ कोडिंग करने के लिए हमें सीसा midterms से नमूना समस्या है हम अनुभाग में रहते हैं कोड होगा कि अतीत एक साथ भी कुछ अन्य ऊपर लाने कि कवर करने के लिए अच्छा विषय नहीं हैं. तो सबसे पहले, हम के लिए के माध्यम से चला गया है, के रूप में आपको याद दिलाने के लिए सप्ताह की पिछले कुछ दोस्तों, संसाधनों का एक टन कर रहे हैं इस पाठ्यक्रम के लिए उपलब्ध. उनमें से कई अविश्वसनीय रूप से उपयोगी हो जाएगा आप को आप के लिए जारी , प्रश्नोत्तरी 0 के लिए अध्ययन क्योंकि यह मंगलवार की दोपहर है. तो आप सभी के लिए किया गया है एक बिट के लिए अध्ययन. व्याख्यान नोट्स और स्रोत रहे हैं कोड है कि आप चाहिए निश्चित रूप से बाहर की जाँच करें. शॉर्ट्स देखो. Study.cs50.net की जाँच करें. और फिर, एक नंबर, नीचे सूचीबद्ध अन्य संसाधनों की. फिर, प्रश्नोत्तरी 0 कल है 01:00 पर. आप पहले से ही ऐसा नहीं किया है, तो जाँच पर के बारे में प्रश्नोत्तरी 0 दस्तावेज़ बाहर यह पता लगाने के लिए पाठ्यक्रम के होमपेज आप प्रश्नोत्तरी ले जा रहे हैं, जहां. प्रश्नोत्तरी 1:10 पर शुरू होता है और 70 मिनट बाद समाप्त हो जाती है. आप 01:10 के बाद दिखाई तो, अगर आप कर रहे हैं कि कई कम मिनट प्राप्त करने के लिए जा रहा 70 प्रश्नोत्तरी लेने के लिए की तुलना में. तो अगर आप समय पर वहाँ यह सुनिश्चित करते हैं. आप एक विस्तार के छात्र रहे हैं या है, तो कुछ अन्य परीक्षण के विचार, यह 1:00 कल पर नहीं हो सकता है. लेकिन फिर, के बारे में प्रश्नोत्तरी 0 जाँच सुनिश्चित करें कि आप जानते हैं कि जब बनाने के लिए दस्तावेज़ आप प्रश्नोत्तरी ले जा रहे हैं. मैं यहाँ 75 मिनट में लिखा था. मुझे लगता है कि 70, सही नहीं है. यह एक सप्ताह 0 से सभी सामग्री को शामिल किया गया बुधवार को पिछले हफ्ते के व्याख्यान के लिए. और फिर, इस प्रश्नोत्तरी के लिए, कि प्रति दस्तावेज़, आप एक दो तरफा पाने के लिए और 8 आप मिलता है कि कागज की 11 चादर से 1/2 प्रश्नोत्तरी के दौरान नोटों के रूप में उपयोग करने के लिए. बहुत से लोग, ज्यादातर लोगों को है, अगर नहीं पाया कि एक सबसे उपयोगी तरीका प्रश्नोत्तरी के लिए अध्ययन करने के लिए है एक अध्ययन चादर, एक बना उनकी खुद की एक दोबारा,. तो अतीत वालों पर नजर डालें तो आप अतीत लोगों को देखा है. देखने के लिए दोस्तों के लिए बाहर तक पहुँचने क्या वे उनकी पर डाल रहे हैं. लेकिन हाथ नीचे, आप कर सकते हैं सबसे अच्छा तरीका अध्ययन सब कुछ के माध्यम से जाना है और क्या करना चाहिए या चाहिए करने छीलना यह नीचे के उस पत्र पर संबंधित नहीं कागज, कि सिर्फ एक सच है क्योंकि आपको यह सुनिश्चित करने के लिए उपयोगी तरीका आप सब कुछ के माध्यम से जा रहे हैं इसके साथ कुछ परिचित है. अधिकांश लोगों को, हम पाते हैं कि भले ही वे कागज की शीट सही बैठा है प्रश्नोत्तरी पर उनके पास, बारी नहीं है यह करने के लिए, फिर से, कि बहुत, क्योंकि जानकारी के माध्यम से जाने की प्रक्रिया उन्हें यह जानने में मदद मिली है. किसी को भी किसी भी सवाल है प्रश्नोत्तरी 0 के बारे में? सबको है - मैं हाथ की एक शो करने के लिए नहीं जा रहा हूँ. कोई बात नहीं. मैं कौन पूछने के लिए जा रहा था अध्ययन शुरू कर दिया. लेकिन मैं तुम्हें करने के लिए नहीं करना चाहती सभी अपने हाथ बढ़ा नहीं. मैंने कहा तो तरह - हाँ, AVI, आगे बढ़ो. AVI: क्या एक उपयोगी बात होगी एक पेजर पर डाल करने के लिए? छात्र: यही कारण है कि आप पर निर्भर है. जेसन Hirschhorn: तुम मिल अपने निर्णय का उपयोग करने के लिए. एक पेजर पर डाल करने के लिए उपयोगी चीजें, यदि आप बड़े ओ के बारे में भ्रमित कर रहे हैं खोजों के विभिन्न प्रकार के देखने का समय और प्रकार, एक में वहाँ पर रखा है कि काम बांका चार्ट. इस तरह, आप पर कहा है कि कर रहे हैं प्रश्नोत्तरी, आप कोशिश करते हैं और चित्रा की जरूरत नहीं है यह बाहर या क्रम के माध्यम से कारण. तुम बस इसे नीचे कॉपी कर सकते हैं. आप परीक्षाएँ अतीत का एक बहुत कुछ को देखो बार, समय सवाल कर चल रहा है. तो यह है कि एक अच्छा के एक उदाहरण होगा एक पेजर पर डाल करने के लिए बात. आप कर रहे हैं, पर डाल करने के लिए अन्य अच्छी बातें घोषित करने के बारे में उलझन में समारोह या क्या विभिन्न भागों से समारोह घोषणा लिखना, कर रहे हैं कि वहाँ पर, एक जेनेरिक संस्करण और फिर शायद एक उदाहरण. आप संकेत के बारे में भ्रमित कर रहे हैं, संकेत काम है कि कैसे एक चित्र शायद वास्तव में मददगार. आप recursion, एक के बारे में भ्रमित कर रहे हैं वहाँ पर पुनरावर्ती समारोह का नमूना यह भी सच में उपयोगी साबित हो सकता है. कि आप कुछ सुझाव दे? AVI: तुम समझने की जरूरत जैसे पूरे संकलन प्रक्रिया, यह सब कैसे काम करता है? जेसन Hirschhorn: सब कुछ कि कवर किया गया है सका प्रश्नोत्तरी पर दिखा. प्रश्न - लेकिन फिर, कुछ बातें हो जाएगा दूसरों की तुलना में भारी भारित. कुछ बातें फिर से आ गए हैं और फिर कक्षा में, में व्याख्यान, और अनुभाग. अन्य बातें नहीं है कि अक्सर आया. हम # include और के बारे में बहुत बात की है एल कुछ और क्या उन में मतलब संकलन की प्रक्रिया. हम चिपटना, GDB के बारे में बहुत बात की है हम का उपयोग करने वाले उन विभिन्न झंडे जब हम कुछ संकलन, और क्या make15, उदाहरण के लिए, वास्तव में इसका मतलब है और वास्तव में करता है. हम के बारे में ज्यादा बात नहीं की है में हर एक कदम संकलन की प्रक्रिया. हम अभी भी इसके बारे में बात की है. तो यह अभी भी है कि आप कुछ है से परिचित होना चाहिए. लेकिन फिर, हम होने नहीं जा रहे हैं - वर्ग में अधिक अक्सर आया कि बातें अधिक आने की संभावना है अक्सर और अधिक भारी हो प्रश्नोत्तरी पर भारित. कूल. प्रश्नोत्तरी 0 के बारे में कोई अन्य प्रश्न? ठीक है, तो मैं की एक सूची में डाल दिया बोर्ड पर विषयों. मैं पाठ्यक्रम के माध्यम से चला गया. मैं से समीक्षा अनुभाग के माध्यम से चला गया आने के लिए कल रात और उन स्लाइड्स विषयों की एक गैर संपूर्ण सूची के साथ हम CS50 में अब तक शामिल है कि और चीजें हैं जो हो सकता है प्रश्नोत्तरी पर दिखाई देते हैं. इसलिए मैं के माध्यम से जाने के लिए नहीं जा रहा हूँ इनमें से हर एक एक. यही कारण है कि बहुत अधिक ले जाएगा अब हम से समय. लेकिन मुझे उम्मीद है कि सैर के लिए यहां इस डाल बातें करने के लिए के रूप में अपनी स्मृति कि हो सकता है या आप से परिचित नहीं हो सकता है. और मैं थोक के खर्च में खुशी होगी के बारे में अपने प्रश्नों के उत्तर अनुभाग इन विषयों के विषय, कि यहाँ कवर नहीं कर रहे हैं. हम छद्म कोड लिख सकते हैं. हम वास्तविक कोड लिख सकते हैं यह सुनिश्चित करने के लिए आपको लगता है कि - मैं आपके सवाल का जवाब और मदद कर सकते हैं हर कोई मौलिक समझ में एक इन विषयों में से बहुत कुछ आपको महसूस होगा तो जा में तैयार और आरामदायक प्रश्नोत्तरी कल. तो सूची से पढ़ें. आप उम्मीद है कि खंड के लिए आए हैं कुछ सवालों के साथ के रूप में अच्छी तरह से. जब आप तैयार हों, अपना हाथ बढ़ा और हम शुरू हो जाएगा. ध्यान रखें, सवाल आप हैं, कोई बेवकूफ सवाल कर रहे हैं. हम एक बहुत सुना है. और अगर आप सवाल है, मैं तैयार हूँ कई अन्य लोग दोनों शर्त करने के लिए यहां बैठे और देख रहा है ऑनलाइन के रूप में अच्छी तरह से कर सकते है. तो आप ही लोगों की मदद कर सकते हैं प्रश्न पूछकर. मार्कस. माक्र्स: ढेर के बीच ढेर, एक पूर्व आवंटित है के रूप में परिभाषित किया गया है कि स्मृति का प्रतिशत इस ढेर के लिए या ढेर के लिए है? या फिर कैसे है कि वास्तव में काम करता है? जेसन Hirschhorn: बड़ा सवाल है. मैं एक छोटा सा ट्रेस वापस करने के लिए जा रहा हूँ. हर कोई करता है - यहाँ ईमानदार होना कृपया. मैं मैं बढ़ाने के लिए आप पूछ रहा हूँ अपने अपने साथियों के सामने हाथ. लेकिन लगता है कि जो लोग कर रहे हैं ढेर और ढेर के साथ असहज और उस पर जाना चाहते हैं और वो क्या मतलब है? अपने हाथ अगर उठाएँ - ठीक है. धन्यवाद. इसलिए हम ढेर पर जाने के लिए जा रहे हैं ढेर वास्तव में जल्दी और फिर आपके सवाल का जवाब देने में चलते हैं. हम प्रतिनिधित्व करने के लिए एक बॉक्स से बाहर आकर्षित तो अगर आपके कंप्यूटर पर स्मृति, कुछ क्या कर रहे हैं इस बॉक्स में जाना है कि चीजें? मुख्य. एक मुख्य समारोह. जहां मुख्य जाना है? छात्र: [सुनाई]. जेसन Hirschhorn: तो हम करेंगे यहाँ नीचे मुख्य डाल दिया. और क्या इस बॉक्स में चला जाता है? छात्र: आप कहते हैं कि कार्य करता है. जेसन Hirschhorn: कार्यों हम कहते हैं कि. और वे कहां जाते हो? छात्र: ढेर में. जेसन Hirschhorn: वे ढेर में जाना. इसलिए हम इस कॉल करने के लिए जा रहे हैं नीचे यहाँ बात हो चुकी है. और ऊपर, हम ढेर है. तो स्मृति सिर्फ इस तरह एक बॉक्स नहीं है. लेकिन यह वास्तव में बहुत समान है. यह खत्म बक्से का एक बहुत होने जा रहा है और अधिक, पर निर्भर करता है कि कितना बड़ा अपने कंप्यूटर है या आपके स्मृति कितना बड़ा है. बोली गंदें शब्द बोलना "नीचे" पर ढेर है. और कई चीजें हैं उस ढेर पर चलते हैं. और उन कार्यों पर निर्भर आप अपने कोड में है. तुम हमेशा में एक समारोह है आपका कोड मुख्य कहा जाता है, तो एक वहाँ हमेशा यहाँ नीचे में अनुभाग मुख्य करने के लिए समर्पित हो चुकी है. ढेर में इन वर्गों ढेर फ्रेम कहा जाता है. यदि आप किसी अन्य समारोह कॉल करते हैं, तो मुख्य कहना एक द्विआधारी खोज समारोह कॉल, हम ढेर पर एक फ्रेम में डाल दिया. अधिक विशेष रूप से, हम करने जा रहे हैं पर स्मृति का एक हिस्सा दान हमारे द्विआधारी खोज के स्थानीय स्टोर करने के लिए कंप्यूटर चर और बाइनरी चलाने के लिए खोज कोड. इसलिए हम द्विआधारी खोज कहते हैं. स्मृति के इस हिस्सा में, हम जा रहे हैं अपने स्थानीय चर स्टोर करने के लिए. हम अपने printf कॉल स्टोर करने के लिए जा रहे हैं. जो भी होता है, कि समारोह है सही वहाँ जमा हो रहा है. द्विआधारी खोज पर अमल करने जा रहा है. यह निष्पादन को पूरा करने जा रही है. सी में शब्द क्या है कि प्रतीक एक कार्य करना चाहिए कि इसके निष्पादन को पूरा? छात्र: वापसी. जेसन Hirschhorn: वापसी. तो तुम एक वापसी बयान दिखाई देता है तो समारोह समाप्त होता है यह है कि जब हिट. तो द्विआधारी खोज में अपनी वापसी को मारा जाएगा. स्मृति का यह हिस्सा अनिवार्य रूप से होगा मुक्त हो. और मुख्य वापस निष्पादन के लिए जाना जाएगा. , फोन था तो जहाँ भी मुख्य रुकेगा द्विआधारी खोज, कुछ मान प्राप्त, और निष्पादन जारी है. यह स्टैक फ्रेम दूर हो जाएगा. हम एक पुनरावर्ती समारोह, कहते हैं जो खुद पर कॉल करने वाले एक समारोह है और अधिक है, हम मिल सकता है - हम कहते हैं बारी बारी से द्विआधारी खोज किया. हम द्विआधारी खोज संस्करण एक मिल सकता है द्विआधारी खोज दो, द्विआधारी खोज तीन, द्विआधारी खोज चार, द्विआधारी खोज पाँच. और फिर इस अंतिम द्विआधारी खोज पाँच आधार के मामले, और ढेर मारा जाएगा फ्रेम वापस जाने और समापन रखेंगे हम वापस मुख्य करने के लिए जब तक. हम कुछ देर में प्रत्यावर्तन पर जा सकते हैं. आप कर रहे हैं लेकिन यह सब कहने के लिए है एक समय में कई कार्य बुला कई ढेर वहाँ हो जाएगा ढेर पर तख्ते. ढेर, दूसरे हाथ पर, ऊपर यहाँ, कार्यों के लिए नहीं है, नहीं स्थानीय चर के लिए. यह गतिशील रूप से आवंटित करने के लिए है चर. तो ये हो सकता है कि चर रहे हैं मुख्य या एक या तो आरंभ कि मुख्य कॉल कार्य करते हैं. कहीं भी अपने कोड में, वे प्रारंभ की जा सकती है. और एक गतिशील रूप से प्रारंभ करने में आवंटित चर. हम सी में क्या समारोह का उपयोग करते हैं? छात्र: malloc. जेसन Hirschhorn: malloc. आप malloc कॉल. आप स्मृति का एक स्थान मिलता है. और स्मृति की है कि अंतरिक्ष ढेर पर है. और स्मृति की है कि अंतरिक्ष रहता है आप नि: शुल्क वहाँ कॉल जब तक. तो गतिशील रूप से आवंटित चर में ढेर आप के रूप में रूप में लंबे समय के लिए मौजूद होगा उनमें मौजूद करना चाहते हैं, और वे नहीं करेंगे स्पष्ट रूप से आप तक चले जाओ दूर जाने के लिए उन्हें बताओ. आप एक समारोह में उन्हें बना सकते हैं. उस समारोह के ढेर फ्रेम दूर हो जाएगा. लेकिन उस चर अभी भी मौजूद होगा ढेर में मुक्त कर दिया गया है जब तक, संभावित कहा जाता है कि समारोह से द्विआधारी खोज या जो भी हो. तो उन ढेर चर वहाँ रहना जब तक आप चाहते हैं के लिए उन्हें वहां रहने के लिए. और वे यहाँ डाल दिया हो. और फिर अगले एक वहाँ डाल दिया जाता है. वे में भरा हो रही रखने के लिए, और वे आप नि: शुल्क कॉल जब तक वहाँ रहना. और अनिवार्य रूप से, ढेर और ढेर, , मार्कस के प्रश्न के लिए हो रही एक दूसरे की ओर बढ़ता है. वे एक दूसरे में चलाने और, अगर आपने सभी स्मृति इस्तेमाल किया अपने कंप्यूटर, और अपने कार्यक्रम छोड़ देगा आप किसी भी अधिक स्मृति नहीं है क्योंकि उपयोग करने के लिए छोड़ दिया है. उन दोनों के बीच में, वहाँ रहे हैं संभवतः अन्य चीजें. लेकिन इस पाठ्यक्रम की गुंजाइश है, आप के लिए उस के बारे में चिंता करने की जरूरत नहीं है. इसलिए कि जवाब था अपने प्रश्न का. इसकी चिंता मत कीजिए. लेकिन वह लंबे समय तक जवाब था. आपको पता है की जरूरत है ढेर और ढेर होगा - एक तल पर शुरू होता है. चुकी है. ढेर ऊपर नहीं है. वे एक दूसरे के करीब बढ़ेगा. वे के लिए स्पर्श तो यह एक समस्या है. आप स्मृति से बाहर भाग गया. लेकिन यह भी जानने के अलावा जहां वे, क्या दोनों में संग्रहीत किया जाता है कर रहे हैं ढेर और ढेर. कर्टिस. कर्टिस: वे टकराने, कि एक पोट अतिप्रवाह है? जेसन Hirschhorn: वे टकराने, कि एक पोट अतिप्रवाह नहीं है. एक ढेर अतिप्रवाह एक अलग क्षेत्र है यदि आप चाहते हैं कि हम पर जा सकते हैं. ठीक है, हम कुछ देर में वापस करने के लिए आया हूँ. छात्र: कहा जाता शब्द क्या है वे एक दूसरे को मारा, ढेर और ढेर? जेसन Hirschhorn: अभी के लिए, के बारे में चिंता मत करो. बस पता है - मुझे लगता है कि सवाल का जवाब देंगे कक्षा के बाद. वे एक दूसरे में चलाते हैं, तो आप बाहर भागा कोई और भी है स्मृति की, क्योंकि वहाँ अंतरिक्ष. छात्र: माफ करना, एक seg गलती क्या है? जेसन Hirschhorn: एक खंड गलती के लिए कहा जा सकता है - SEG गलती है कहा जाता है क्यों यह निर्भर करता है. कभी कभी, अपने ढेर अतिप्रवाह, यह हूँ SEG त्रुटि के रूप में गलती का कहना है. छात्र: क्या dereferencing के बारे में एक अशक्त चर? कि एक seg गलती है? जेसन Hirschhorn: dereferencing एक शून्य सूचक - ठीक है, तो आपको लगता है कि आप एक सूचक है अगर अशक्त करने के लिए बराबर सेट, संकेत, याद है, दुकान स्मृति पते उनके मूल्यों के रूप में. और एक शून्य सूचक अनिवार्य है 0 भंडारण, 0 वें कि चर में पता. तो 0x, 0, 0, 0, 0, वगैरह. नहीं है कि स्मृति में यही 0 वें पता हमारी तस्वीर में, कि वहाँ ऊपर है कहीं, कि सुरक्षित है कंप्यूटर के लिए. हम इसे छूने की अनुमति नहीं कर रहे हैं. तो अपने कार्यक्रम को क्रियान्वित है जब, अगर कुछ स्मृति के लिए जाने की कोशिश कर रहा है पते 0, यह जानता है कि कि एक खाली मूल्य है. यह कुछ भी नहीं किया जाना चाहिए जानता है. तो तुम वहाँ कुछ करने की कोशिश और उपयोग करते हैं और वहाँ की तरह कुछ का इलाज या उस स्थान पर जाने के लिए कोशिश कर रहा है, तो आप कर रहे हैं एक seg गलती या कोई त्रुटि मिलती जा रही है. कि आपके सवाल का जवाब है? और अब हम वापस जाना होगा अतिप्रवाह हो चुकी है. तुम लोग ही ढेर में हालात, पहले देखा, में - के एक करीबी आकर्षित एक ढेर के फ्रेम के ऊपर. हर कोई देख सकता है? इसलिए हम अपने ढेर फ्रेम किया है. हम एक स्थानीय रूप में एक सरणी बचत कर रहे हैं इस समारोह में चर. इसलिए हमारे सरणी पांच स्थानों है कहना. उन के सभी पांच संग्रहीत किया जाएगा उस पर ढेर फ्रेम में. हम परे लेखन शुरू करते हैं इस सरणी की सीमा - तो हम में लेखन शुरू करते हैं, तो चलो कि 0 का कहना हैं. उन पांच अनुक्रमित रहे हैं हमारे सरणी की. हम सूचकांक 5, में लेखन शुरू करते हैं जो हम एक है जब हमारे पास नहीं है आकार 5 की सरणी, हम में लेखन शुरू सूचकांक 6, 7, 8, 9, हम एक ढेर प्राप्त कर सकते हैं अतिप्रवाह त्रुटि. आम तौर पर ऐसा नहीं है - आप शायद मुसीबत में मिल जाएगा आप एक से अधिक चलते हैं. लेकिन आम तौर पर, आप में मिल जाएगा आप एक बहुत से खत्म हो जाना अगर सबसे ज्यादा परेशानी और तुम अब तक खत्म हो कि तुम लिखने जाना उस की वापसी पता खत्म पर स्थित है जो समारोह, ढेर फ्रेम के नीचे. ठीक है, क्योंकि? आप - में - क्षमा करें. नहीं "सही है." ढेर फ्रेम में, आपके पास अपने स्थानीय चर. ढेर के बहुत नीचे फ्रेम वापसी पता है. उस समारोह जहां है जब यह खत्म हो जाता है. और आपको लगता है कि वापसी पर लिखना चाहते हैं पता है, तो इस पर ढेर फ्रेम जब, आप ढेर के माध्यम से जा रहे हैं जब फ्रेम और प्रत्येक पंक्ति को क्रियान्वित करने, आप कर रहे हैं अपने नए वापसी पता करने के लिए जाना जा रहा कि बजाय वहाँ लिखा है वास्तविक एक. और कहा कि हमने देखा है कि कैसे है कुछ सुरक्षा उल्लंघनों कंप्यूटर के साथ भी हो सकता है. इसलिए जब पोट अतिप्रवाह, संक्षेप में, है आपको ढेर में भाग अधिलेखित यदि आप स्थानीय उपयोग करना चाहिए रहे हैं चर आप का उपयोग करने वाले हैं, और कर रहे हैं विशेष रूप से आप overwriting प्रारंभ करते समय जैसे महत्वपूर्ण बातें पता वापस. आप एक त्रुटि मिल जाएगा और वह है जहाँ. या शायद आप भी शुरू कर सकता है यहां तक ​​में लिख - द्विआधारी खोज था कहना सही मुख्य ऊपर. यदि आप एक बहुत overwrote हैं मुख्य में लिख सकता है. लेकिन आम तौर पर, इससे पहले कि आप कोई त्रुटि मिलती है कंप्यूटर जानता है तो, क्योंकि क्या आप कुछ कर रहे हैं कर नहीं होना चाहिए. हाँ. छात्र: क्या अंतर है एक ढेर अतिप्रवाह के बीच और एक बफर अतिप्रवाह? जेसन Hirschhorn: बफर अतिप्रवाह एक अधिक सामान्य प्रकार की है मैं बस वर्णित है. छात्र: तो एक ढेर अतिप्रवाह एक है एक बफर अतिप्रवाह का उदाहरण. जेसन Hirschhorn: बिल्कुल. यह हम एक के रूप में के बारे में सोच सकते हैं एक सरणी है बफर, अंदर जाने की चीजों के लिए एक अंतरिक्ष यह एक ढेर बफर अतिप्रवाह है. हम एक ढेर बफर अतिप्रवाह हो सकता था. जो वहाँ अक्सर एक बफर, अगर वहाँ था एक सरणी ढेर है, और हम उन सीमा overwrote, तो हम करेंगे एक ढेर बफर अतिप्रवाह है. और इस पाठ्यक्रम के दायरे से बाहर, वे थोड़ा अलग ढंग से पता चला रहे हैं. संकलक विशेष है प्रत्येक का पता लगाने के तरीके. लेकिन एक बफर अतिप्रवाह एक अधिक सामान्य है मैं क्या वर्णित के प्रकार, जो एक ढेर बफर अतिप्रवाह था. कि आपके सवाल का जवाब? मीठा. किसी भी अन्य संबंधित प्रश्न वहाँ थे ढेर या ढेर करने के लिए? हाँ. छात्र: मैं तुम्हें मुक्त तार करने के लिए है वे ढेर में कर रहे हैं क्योंकि और तुम स्मृति रिसाव नहीं करना चाहती. लेकिन अगर आप वैश्विक चर को मुक्त करने की क्या ज़रूरत है और इस तरह से सामान? या वे स्वतः मुक्त कर रहे हैं? जेसन Hirschhorn: अच्छा सवाल है. तो CS50.H में, हम इस बात बना के लिए आप एक स्ट्रिंग कहा जाता है. एक स्ट्रिंग वास्तव में क्या है? छात्र: चार सितारा. जेसन Hirschhorn: एक चार सितारा, एक सूचक एक चरित्र के लिए, एक संकेतक के लिए अक्षर की एक सरणी. कि स्ट्रिंग क्या है. तो हम इसे मुक्त करने की जरूरत है क्योंकि getstring, जो हम एक बहुत उपयोग किया - स्ट्रिंग नाम getstring के बराबर होती है - कि हमारे लिए पर कुछ स्मृति mallocs ढेर और तब के लिए एक संकेत देता है इस बात का पहला वर्ण स्ट्रिंग, एक चार सितारा. तो जाहिरा तौर पर, आप नहीं किया गया है अगर अपने तार में से किसी पर स्वतंत्र लेखन आप अब तक कहा जाता है कि, आपके पास कुछ स्मृति लीक किया गया. बेशक हम के बारे में बात नहीं की है यह तो कोई नहीं में मिल गया है यह करने के लिए मुसीबत. लेकिन हाँ, आगे जा रही है. आप getstring कहते हैं, आप कर रहे हैं ढेर पर कुछ जगह mallocing. और तुम उस पर बाद में नि: शुल्क फोन नहीं है स्ट्रिंग, आप एक स्मृति रिसाव है. यही कारण है कि आपके सवाल का जवाब? हाँ छात्र: इसलिए कि ऐसा करने के लिए, हम प्रयोग करते हैं वापसी से पहले मुक्त सही? जैसे, के दायरे के भीतर, मुझे लगता है कि अगर हम भीतर, मुख्य int, जैसे, कहना उन के भीतर है कि कोड की गुंजाइश घुंघराले ब्रेसिज़, ठीक से पहले - तुम्हें पता है, जहां आप चाहते हैं आमतौर पर वापसी डाल दिया. आपको लगता है कि पहले मुक्त रखा है? जेसन Hirschhorn: तो तुम मुक्त रख सकते हैं तुम मुक्त रखना चाहता हूँ जहाँ भी. इन गतिशील रूप से आवंटित कर रहे हैं क्योंकि चर, वे कर सकते हैं क्योंकि एक विशेष के दायरे से बाहर रहते हैं समारोह, तुम एक में malloc कॉल करते हैं अलग समारोह, उदाहरण के लिए, getstring, आप मुख्य में फ्री कॉल कर सकते हैं. आप यह फोन करने की जरूरत नहीं है विशेष समारोह में malloc कहा जाता है जहां. लेकिन आप यह फोन करने की जरूरत है मुख्य रिटर्न से पहले. और यह वास्तव में निर्भर करता है. यह आपको लगता है कि malloced क्यों पर निर्भर करता है पहली जगह में अंतरिक्ष. कुछ लोगों को फोन करता हूँ बहुत जल्दी मुक्त. कुछ लोग जब तक नि: शुल्क फोन नहीं होगा उनके कार्यक्रम के अंत. और वे के माध्यम से जाना होगा और नि: शुल्क सब कुछ. यह आप malloc बुलाया क्यों पर निर्भर करता है. छात्र: और आप क्या कहेंगे आप उपयोग getstring कहा जाता है तो क्या होगा? आप क्या मुक्त कह सकता हूँ? जेसन Hirschhorn: तो के लिए वाक्यविन्यास मुक्त बस मुक्त, खुला कोष्ठक, करे कोष्ठक, और सूचक का नाम. तो आप स्ट्रिंग नाम से बराबर लिखने getstring, तुम यहाँ में नाम डाल दिया. कि सूचक के नाम है. और यह है कि स्मृति को मुक्त करने के लिए जानता है. छात्र: यह है कि स्मृति को मुक्त कर देते तो जब, सूचक अभी भी उस जगह के लिए अंक स्मृति में? या भी की खाली सूचक है यह करने के लिए अंक कि पता. जेसन Hirschhorn: हम उस प्रयास करना चाहिए. हम उस कोड होना चाहिए. हम करने के लिए मिलता है जब वापस आने दो. कोडिंग, और के कोड है कि चलो. और आप जवाब यह पता लगाने के लिए चाहते हैं उस के लिए, आप कर सकते हैं भी कोड है कि इस बीच में. लेकिन यह एक बड़ा सवाल है. छात्र: यह संभव है बहुत जल्द ही मुक्त कुछ और? तो अगर आप अभी भी अपने कार्यक्रम के लिए इसकी आवश्यकता, और आपको लगता है कि स्मृति अंतरिक्ष मुक्त कर दिया? जेसन Hirschhorn: हाँ. यह संभव है, अगर आप मुफ्त कुछ और फिर आप इसे फिर से उपयोग, तुम जाएगा एक त्रुटि में चलाते हैं. तुम मुक्त कर दिया लेकिन है कि क्योंकि, आप पर है फिर कुछ और बाद में यह कहा जाता है. तो यह है कि एक प्रोग्रामर की गलती थी. लेकिन हाँ. तुम उस लिख सकता है. पर कोई और सवाल - हां. छात्र: तो आप अपेक्षा की जाती है, तो बस पहले सामान्य तौर पर यह मुक्त कार्यक्रम अगर इसका मतलब यह है, समाप्त हो जाती है कार्यक्रम समाप्त होता है और आप इसे मुफ्त में नहीं है, कि स्मृति अभी भी आवंटित किया जाता है? जेसन Hirschhorn: अपने कार्यक्रम समाप्त होता है और तुम तो, कुछ मुक्त करने के लिए भूल जाते हैं कि स्मृति के दौरान आवंटित किया गया था अपने कार्यक्रम के जीवनकाल. अपने कार्यक्रम, पूरी तरह से बंद कर देता है कि स्मृति नहीं जा रहा है वहाँ हमेशा के लिए रहने के लिए. कंप्यूटर पता करने के लिए स्मार्ट है कि कार्यक्रम बंद कर देता है, यह स्मृति की सब से छुटकारा मिलना चाहिए उस कार्यक्रम के साथ जुड़े थे. हालांकि, अगर आप चला सकते हैं उपकरण हैं पता लगाने के लिए एक कार्यक्रम पर, अगर जब कार्यक्रम तुम भूल गए, समाप्त कुछ स्मृति मुक्त करने के लिए. और अपने अगले समस्या के लिए जहां सेट आप malloc का उपयोग और उपयोग होगा संकेत दिए गए हैं, तो आप इस चल रहा होगा देखने के लिए अपने कार्यक्रम पर कार्यक्रम, जब मुख्य रिटर्न, आप कुछ था unfreed छोड़ दिया गया है कि चीजें. इसलिए वे malloced रहने के लिए नहीं जा रहे हैं हमेशा के लिए आपके कंप्यूटर में. यही है, बेकार होगा क्योंकि बहुत जल्दी, कंप्यूटर स्मृति से बाहर चला जाएगा. लेकिन वे अपने के अंत तक चलाने अगर कार्यक्रम और वे मुक्त कर दिया है और नहीं कर रहे हैं अपने कार्यक्रम है कि अभी भी एक समस्या है, रास्ते इस उपकरण में मदद करेगा कि आप को पता. छात्र: वेलग्रिंड है? जेसन Hirschhorn: यह है वेलग्रिंड कहा जाता है. और तुम हो जाएगा - छात्र: लेकिन हम पता करने की जरूरत नहीं है उस प्रश्नोत्तरी के लिए, हालांकि? मेरा मतलब है, इसके बारे में बात की थी व्याख्यान में एक छोटा सा. जेसन Hirschhorn: तो वेलग्रिंड उस उपकरण का नाम है. यह क्या करता है यह जानते हुए है प्रश्नोत्तरी के लिए काफी है. लेकिन आप पर अभी तक इसका इस्तेमाल नहीं किया अपने हम नहीं पड़ा है क्योंकि समस्या सेट स्पष्ट रूप से पेश किया है कि समस्या सेट malloc के साथ या आप malloc का उपयोग. तो अगर आप अभी तक वेलग्रिंड उपयोग नहीं किया है. लेकिन आप जल्दी ही इसका इस्तेमाल करेंगे बल्कि बाद में. छात्र: आप को दोहरा सकते क्या मेजबान पर चल रहा है? जेसन Hirschhorn: क्षमा करें? छात्र: आप क्या दोहरा सकते हैं Valgring का उद्देश्य है? जेसन Hirschhorn: वेलग्रिंड नाम है - GDB, आप अपने कार्यक्रम डिबग मदद करता है जैसे वेलग्रिंड आप यह पता लगाने में मदद करता है चीजों को मुक्त नहीं किया है अपने कार्यक्रम बंद कर देता है. तो आप अपने कार्यक्रम पर चलने देंगे. और अपने कार्यक्रम से बाहर निकालता है, और यह कह देंगे अपने कार्यक्रम malloc यह कई बुलाया यह कई बाइट्स के लिए समय है, और आप केवल यह कई बार नि: शुल्क कहा जाता है. और इसलिए आप इन कई बाइट्स छोड़ा मुक्त किया जा रहा बिना. या यह आप सब कुछ मुक्त कर दिया गया है कहूँगा. अच्छा काम किया. छात्र: ठीक है. और यह Valgring कहा जाता है? जेसन Hirschhorn: वि ए एल जी आर आई एन डी. छात्र: संकेत के बारे में एक सवाल है. तो आप n स्टार है कहना एक्स कुछ बराबर होती है. कि तुम डाल रहे हैं जो भी हो, के बराबर होती है वहाँ, क्या अंदर रखा जा रहा है कि क्या एक्स की ओर इशारा कर रहा है, या एक्स के सूचक? जेसन Hirschhorn आप कर सकते हैं सवाल दोहराने? आप यह कहते हैं, जबकि हम यह आकर्षित कर सकते हैं? छात्र: प्रश्नोत्तरी में, वास्तव में, आप हमें भेजा, यह, चार की तरह था सितारा सच्चाई सही, CS50 चट्टानों के बराबर होती है? तो इसका मतलब यह है कि उस CS50 चट्टानों सच्चाई की ओर इशारा कर रहा है क्या है? जेसन Hirschhorn: तो आप बात कर रहे हैं एक स्ट्रिंग में एक चार सितारा बारे में, कैसे वह काम करता है? हाँ. ठीक है. हम यहाँ पर इस आकर्षित करते हैं. [पक्ष बातचीत] जेसन Hirschhorn: तो यह चर प्रकार चार सितारा के होने जा रहा है. एक चर कितना बड़ा है प्रकार चार सितारा की? कितने बाइट्स? छात्रों: चार. जेसन Hirschhorn: यह चार बाइट्स है. एक चर कितने अधिकार है प्रकार int सितारा की? छात्रों: चार. जेसन Hirschhorn: चार बाइट्स. यह एक सूचक है, तो यह हमेशा होता है चार बाइट्स, क्योंकि संकेत, उनके मूल्य एक स्मृति पता है. और CS50 पर स्मृति पते उपकरण चार बाइट्स लंबे होते हैं. इसलिए हम getstring, या जब हम कहते हैं जब कहते हैं, stringname में फिर बराबर होती है, और दोहरे उद्धरण एक स्ट्रिंग डाल, हम लगा रहे हैं - वैसे, यह थोड़ा अलग है. हम उदाहरण के रूप में getstring करूँगा. या चार सितारा कुछ स्ट्रिंग के बराबर होती है. क्षमा करें, मुझे उदाहरण दे आप पढ़ सकते हैं कि? छात्र: चार सितारा सच्चाई के बराबर होती है डबल उद्धरण में "CS50 चट्टानों". जेसन Hirschhorn: तो यह सितारा, इस हम के लिए इस चर x फोन करता हूँ हमारी सामान्य प्रयोजनों. हम एक्स नामक एक चर बना लिया है. यह प्रकार चार सितारा है. यह एक श्रृंखला के लिए एक संकेत है पात्रों की. तो यहाँ नीचे - तो यह है कि यह कैसे होता है स्मृति में काम करते हैं. यह एक स्मृति पते की दुकान होगी. यह स्मृति पते की दुकान सरणी में पहली चरित्र. और फिर जब तुम पीछा सूचक, तुम होगा पहले चरित्र मिलता है. और आप की तरह इस बात को पढ़ रहे हैं एक स्ट्रिंग, आपके कंप्यूटर स्मार्ट है पता करने के लिए पर्याप्त है, इस पूरी बात पढ़ें यह एक प्रतिक्रिया 0 के लिए हो जाता है जब तक. लेकिन आप में यह एक चरित्र पढ़ रहे हैं एक बार, तो आप के माध्यम से पुनरावृति रहे इस स्ट्रिंग, तो आप सिर्फ एक पढ़ा होगा एक समय में चरित्र आप को मिल तक बैकस्लैश 0. जवाब है कि नहीं हो सकता है आपके सवाल है, हालांकि. छात्र: हाँ, लेकिन आप नहीं है malloced कि अंतरिक्ष अभी तक कि सूचक के लिए. जेसन Hirschhorn: तो मैं काफी यकीन नहीं है वास्तव में क्या आप देख रहे हैं, मुझे लगता है कि प्रश्नोत्तरी बनाना नहीं था. यह एक उपयोगी होना चाहिए था एक और TF से संसाधन. आप पर एक स्ट्रिंग पैदा कर रहे हैं ढेर या एक स्थानीय चर के रूप में, यह हूँ सिर्फ आरोपों की सरणी के बजाय हो की ओर इशारा करते आम तौर पर एक चार सितारा एक और स्ट्रिंग. लेकिन मैं नहीं जानता. यह एक और के लिए एक संकेत हो सकता है ढेर पर स्ट्रिंग के रूप में अच्छी तरह से. हाँ. छात्र: मैं आप की जरूरत है पता सूचक है अगर स्मृति आवंटित अंदर घोषित हो रही है एक अन्य समारोह की. तुम अगर यह एक ही बात करने की ज़रूरत है मुख्य के अंदर घोषित किया जा रहा है, आप मुख्य के अंदर यह प्रयोग कर रहे हैं? जेसन Hirschhorn: तो हाँ. आप किसी भी करने के लिए एक सूचक घोषणा कर सकते हैं स्मृति में स्मृति पता. यह एक स्थानीय की स्मृति पता किया जा सकता है चर, बार बार हालांकि, लोगों को स्मृति पते की घोषणा नहीं करते वे जाने की वजह से स्थानीय चर के लिए उस समारोह रिटर्न दूर, एक बार जो हम आम तौर पर चीजें malloc क्यों है. लेकिन हाँ, आप एक सूचक घोषित कर सकता है एक और स्थानीय चर के लिए. यह सिर्फ आम तौर पर ऐसा नहीं किया गया. लेकिन मैं उस पर एक नज़र ले जा सकते हैं कक्षा के बाद विशेष बात. हाँ. छात्र: मैं इस तरह लगता है कहा जा रहा है की. यह आरंभ होने के लिए अजीब लगता है नहीं एक के रूप में एक सूचक पता है, लेकिन रूप में क्या एक मूल्य की तरह लगता है. CS50 अंदर क्या है की तरह लगता है बात की ओर इशारा किया और किया जा रहा है वास्तविक नहीं पता, है ना? जेसन Hirschhorn: तो है कि मामला नहीं है, यद्यपि. कि क्या हो रहा है नहीं है. आप एक चार सितारा घोषित करते हैं, यह एक स्मृति पता है. सूचक सभी स्मृति पते हैं कुछ और की ओर इशारा करते. कि कुछ और पर हो सकता है ढेर, लेकिन लगभग हमेशा पर है हम इसका इस्तेमाल किया देखेंगे रास्ते में ढेर. लेकिन stringname डबल भाव के बराबर होती है ", Getstring" हम देख सकते हैं कि और हम उस के माध्यम से देखते हैं और उस कोड कर सकते हैं. getstring स्ट्रिंग में बचाया जा रहा है कि चर, या जो कुछ भी स्ट्रिंग नाम है कि में बचाया नहीं किया जा रहा है चर, क्योंकि है कि नहीं कैसे संकेत काम करते हैं. कि मतलब? छात्र: हाँ. जेसन Hirschhorn: ठीक है. उम्मीद है, कि नहीं था किसी को भ्रमित. यह था लेकिन, अगर हम इस पर फिर से विचार कर सकते हैं एक बिट में, हम वास्तव में जा रहे हैं, क्योंकि उम्मीद है कि होगा कुछ कोड के लिए तार के साथ काम करते हैं और आपको लगता है मदद उनके साथ और अधिक आरामदायक. इन से संबंधित कोई अन्य सवाल विषयों या अन्य विषयों कि मैं वापस डाल देता हूँ? और - अब ठीक है. हाँ, Alden. Alden: तो यह पूरी तरह से असंबद्ध है, लेकिन हम बस पर जा सकते हैं वास्तव में जल्दी से हम पता करने की जरूरत क्या एक 32 और के बीच अंतर के बारे में 64 बिट मशीन? जेसन Hirschhorn: हाँ. इसलिए 32 बिट कितने बाइट्स है? Alden: यह चार बाइट्स है. जेसन Hirschhorn: यह चार बाइट्स है. और 64 बिट कितने बाइट्स है? छात्र: आठ. जेसन Hirschhorn: आठ बाइट्स. तो फिर, आठ बिट्स एक बाइट है. आपकी CS50 उपकरण है एक 32 बिट मशीन. तो स्मृति पते हैं लंबे चार बाइट्स. 2-32 रहे हैं स्मृति पते. 0 32 शून्य से 1 से 2 के लिए. और मैं सकारात्मक नहीं हूँ, लेकिन है कि तुम क्या करने की जरूरत की शायद गुंजाइश , एक 32 बिट मशीन के लिए पता है कि स्मृति पते,, फिर से, चार बाइट्स लंबे होते हैं और वह अधिकतम राशि है स्मृति पतों की. इसके अलावा, डेटा प्रकार - इस रूप में कुछ हो सकता है अच्छी तरह से है कि ध्यान देने योग्य है. एक डेटा प्रकार के आकार पर निर्भर करता है आप के साथ काम कर रहे हैं मशीन. तो एक चार, एक ही चरित्र, कैसे है हमारे CS50 उपकरण पर कई बाइट्स? एक बाइट. और यह वास्तव में एक बाइट के रूप में है अच्छी तरह से एक 64 बिट मशीन पर. और सबसे अधिक डेटा प्रकार एक ही नंबर हैं दोनों मशीनों पर बाइट्स. लेकिन कुछ डेटा प्रकार के अलग अलग हो जाएगा दोनों मशीनों पर. इसलिए कि संभवतः होगा आप को पता है की जरूरत है एक ही बात. लेकिन यह भी है कि मुझे लगता है, सीमा से परे है - तुम वापस देखो, अगर मैं लगभग सकारात्मक हूँ पुराने परीक्षाएँ में, इसे कहते हैं, के लिए मान आप उपयोग कर रहे हैं समस्याओं कोडिंग एक 32 बिट मशीन. लेकिन में उस के साथ साथ चलते हैं, वहाँ रहे हैं आप रुचि रखते हैं मामले, वहाँ रहे हैं वही कर रहे हैं कि डेटा प्रकार सभी मशीनों पर आकार. आप की तरह कुछ देखा है uint32_t, आप कर सकते हैं या हो सकता है देखा है कि नहीं. ऐसे डेटा प्रकार है. कि 32 बिट्स कोई फर्क नहीं पड़ता हो, कह रहा है यह क्या मशीन पर है. ताकि लोगों को पोर्टेबल लिख रहे हैं जब कोड, वे शायद ints का उपयोग नहीं होगा. वे बजाय इन अन्य डेटा का उपयोग करेंगे वे जानते हैं कि प्रकार एक ही हो जाएगा हर एक मशीन पर आकार. मधु. मधु: मैं के बारे में एक सवाल था संकलन की प्रक्रिया. तो आप का उपयोग करता है कि एक कार्यक्रम लिख रहे हैं CS50 या कुछ और की तरह एक पुस्तकालय ऐसे ही, मुझे पता है कि कि पुस्तकालय कुछ बिंदु पर, हो गया है संकलित और अंदर जुड़ा हुआ लेकिन कितना है कि के दौरान होता है अपने कार्यक्रम के संकलन? पुस्तकालय है कि प्रक्रिया का क्या हिस्सा आप कर रहे हैं तब होता है जब अपने प्रोग्राम संकलन? जेसन Hirschhorn: तो चलो पर चलते हैं इस प्रक्रिया की आम तौर पर कदम. आप अपने. सी फाइल में लिखें. आपके. सी फाइल में, आप # शामिल अपने हैडर पुस्तकालयों, उदाहरण के लिए, cs50.h. तेज भी शामिल है कि क्या करता है रेखा अपने कार्यक्रम के लिए करते हैं? Akchar. AKCHAR: यह प्रोटोटाइप कहते हैं हैडर से कार्य करता है पुस्तकालयों में फ़ाइलें. जेसन Hirschhorn: बिल्कुल. यह उन समारोह प्रोटोटाइप कहते हैं अपने कोड के लिए. अपने कोड में संकलित किया जा रहा है तो जब प्रारंभिक दौर, संकलक जानता है इन कार्यों वास्तव में मौजूद है, और है कि कि कहीं वे परिभाषित किया गया है. . ज फ़ाइलें शामिल नहीं हैं इन कार्यों के लिए परिभाषाओं या कैसे वे वास्तव में काम करते हैं. Cs50.h बस का कहना है कि कुछ शामिल getstring एक असली बात यह है कि हो सकता है. और standardio.h printf का कहना है कि हो सकता है कि एक असली बात. तो इस के साथ अपनी सी भाषा. हैडर फ़ाइल कुछ में बदल जाता है मशीन पठनीय कोड, जो अंततः बाइनरी में बदल जाता है कोड, 0 और 1. और कहा कि कोड है कि अंततः मार डाला जाता है. एल CS50 लाइन - उदाहरण के लिए, आप बजना लिख ​​रहे हैं जब - और फिर आप शामिल-L CS50, तुम अंदर उस प्रकार और आप देखेंगे कि. आप कर लिखने, तुम हूँ यहाँ है कि लाइन को देखने. और हम एक दूसरे में देखेंगे कि जब हम कोड या बाद में जब हम कोड पर. लेकिन यह है कि एल CS50 लाइन कुछ भी करता है की तुलना में एक अलग सा # Cs50.h. शामिल कि एल CS50 लाइन क्या करता है? AVI? AVI: मैं यह है कि लिंक कहना चाहता हूँ समारोह को पुस्तकालय हे. फ़ाइलों की तरह, कहते हैं. जेसन Hirschhorn: तो बहुत करीब, स्थान पर नहीं है. एल CS50 बाइनरी फ़ाइल लेता है और अपने बाइनरी फ़ाइल के साथ यह विलीन हो जाती है. तो cs50.h, मोड़ में कोई मतलब नहीं है हर बाइनरी सी भाषा से cs50.h यह प्रयोग किया जा रहा है एक बार. यही है, मूर्खतापूर्ण होगा, क्योंकि उस बहुत समय बर्बाद होगा. तो यह पहले से ही संकलित किया गया है और एक निष्पादन में बदल गया. और अब यह विलय किया जा रहा है अंत में अपने फाइल के साथ. तो उन 1 और 0 के लिए जा रहे हैं अपने लोगों के साथ विलय करने के लिए और अंत में 0. तो अब आप वास्तव में वास्तविक होगा 1 और 0 कैसे getstring परिभाषित है कि, उदाहरण के लिए, काम करता है, या कैसे printf उदाहरण के लिए, काम करता है. और अधिक जानकारी के लिए, वहाँ एक नैट कि देता है कि कम compilers आप चला जाता है कि बाहर की जाँच करनी चाहिए इन चरणों के माध्यम से. लेकिन - हां. छात्र: वे में हमेशा से रहे हैं ओ फ़ाइलें. वे पुस्तकालय के रूप में कर रहे हैं, जैसे - लिंक, मर्ज किए जाने के लिए तैयार वे बाइनरी कोड में कर रहे हैं? जेसन Hirschhorn: ठीक है. क्या - छात्र: है कि हमेशा के लिए मामला पुस्तकालयों आप उन्हें कड़ी है? जेसन Hirschhorn: हाँ. तो. है किया जाएगा जो फाइलें, वहाँ यह भी हो जाएगा जो मशीन कोड, आप करने के लिए गुप्त. आप उन लोगों के बारे में चिंता करने की जरूरत नहीं है. लेकिन आम तौर पर, हाँ, वे करेंगे ओ जाने के लिए तैयार फाइलों में. हो. छात्र: तो आप के लिए जहाज जब एक पुस्तकालय, आप केवल जहाज नहीं . घंटे और. हे? तुम. ग या. एस जहाज नहीं है. जेसन Hirschhorn: तो - और अगर यह है, साथ ही इस छोटे में है यह जानकारी एक आने लगती है थोड़ा जल्दी. लेकिन compilers पर कम इस बारे में बातचीत के रूप में अच्छी तरह से. आप एक पुस्तकालय जहाज करते हैं, अगर तुम जहाज . घंटे, हेडर फाइल, उन समारोह प्रोटोटाइप, और 1 और 0 की, कि तुम्हें देने के लिए सभी की जरूरत है. तुम्हें देने के लिए की जरूरत नहीं है कैसे समारोह. सी फाइल, काम करता है. क्योंकि अमूर्त के बिंदु, या एपीआई बिंदु, यह एसपीएल में बिंदु, स्टैनफोर्ड पोर्टेबल पुस्तकालय, यह है आप के बारे में चिंता नहीं करने के लिए कैसे नया GRect, काम करता है, या कैसे काम करता है के लिए कदम या कैसे काम करता है जोड़ें. आपको पता करने की जरूरत है कि ऐड है आप कर सकते हैं कि एक समारोह है उपयोग, और यह इस करता है. तो क्या तुम सच में पता करने की जरूरत नहीं है कैसे यह सी. आप में लिखा है बस की जरूरत पता है, यहां कार्य कर रहे हैं, क्या वे करते हैं, और यहाँ 1 और 0 के हैं आप वास्तव में उन्हें इस्तेमाल करना चाहते हैं. कूल. Compilers पर कोई और सवाल या बोर्ड पर अन्य विषयों? छात्र: मैं एक सवाल का है पुनरावर्ती कार्यों को लागू करने. प्रत्यावर्तन के बारे में एक सवाल है. मैं ऊपर आ जाएगा कि एक लग रहा था. तो चलो जल्दी से के माध्यम से चलते हैं एक विशिष्ट साथ recursion उदाहरण के लिए, एक भाज्य समारोह. यह एक उदाहरण है कि क्योंकि अक्सर ऊपर आता है या किया जाता है प्रत्यावर्तन को वर्णन करने के लिए. "तो 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 करने के लिए मिलता है तो, जब आप कर रहे हैं अंत में, और आप कर सकते हैं वापस ऊपर जा रहा शुरू करते हैं. हम एक पुनरावर्ती लिखना चाहता था तो अगर एक कारख़ाने की गणना करने के लिए समारोह, हम कुछ लिखने जा रहे हैं कि अब के लिए pseudocode. हम चाहते हैं कि pseudocode लिखने से पहले - मैं तुम लोगों को कुछ मिनटों के लिए दे देंगे छद्म कोड लिखने के लिए या सिर्फ सोचने के लिए इसके बारे में - हर दो बातें कर रहे हैं पुनरावर्ती समारोह की जरूरत है. उन दो बातें क्या हैं? जैक: यह अपने आप कॉल करने के लिए है. जेसन Hirschhorn नूह? ओह, जैक. आगे बढ़ो. जैक: यह अपने आप कॉल करने के लिए है. जेसन Hirschhorn: तो एक पुनरावर्ती समारोह, एक पुनरावर्ती कॉल की जरूरत है एक खुद के लिए कहते हैं. यह एक है. और दूसरी बात क्या है? जैक: एक आधार के मामले. जेसन Hirschhorn: एक आधार का मामला. एक आधार के मामले में हम रोक जब यहाँ है, है. तो अपने समारोह बुलाया जाता है. आधार के मामले पहले आता है. तुम अंत में कर रहे हैं जानना चाहता हूँ. और तुम, अंत में अगर तुम नहीं हो आपके पुनरावर्ती फोन करना. और अगर फिर से इस समारोह के माध्यम से जाना फिर अपने आधार मामले की जांच. तुम अंत नहीं हैं, तो आप बनाना एक और पुनरावर्ती कॉल, वगैरह, वगैरह. यही कारण है कि पुनरावर्ती कार्यों को हमेशा है उन बेस मामलों और उन की जरूरत पुनरावर्ती कॉल. आप एक पुनरावर्ती कॉल नहीं है, यह एक पुनरावर्ती समारोह नहीं होगा. आप एक आधार मामला नहीं था, तुम हमेशा के लिए जा सकते हैं और करेंगे कोई अंत नहीं होगा. और बेस मामला हमेशा पहले आता है, आप हमेशा जांच चाहते हैं क्योंकि जब आप पहली बार अंत में कर रहे हैं. हम कुछ pseudocode है तो पहले, क्यों आप के बारे में सोचने के लिए एक मिनट नहीं लेते कैसे एक पुनरावर्ती भाज्य समारोह लिखा जाएगा? इसके अलावा, आप क्या कर रहे हैं के रूप में कई, लेखन कागज के एक पत्रक पर बाहर है आप करने के लिए जा रहे हैं क्या कल प्रश्नोत्तरी पर करते हैं. बनाने के लिए तो शायद अच्छा अभ्यास सुनिश्चित करें कि आप लिख रहे हैं कोड कागज की शीट पर नीचे - या आप ऐसा कर सकते हैं. अर्धविराम हैं जहां आप जानते हैं. आप वाक्यविन्यास याद है. आप करने में सक्षम नहीं हो रहे हैं क्योंकि एक संकलक आप एक त्रुटि बनाया बताओ. इसके अलावा, उन लाइनों, कल, साथ जब तुम अगर आप समस्याओं कोडिंग समय के लिए दौड़े, या कर रहे हैं आप बहुत कर रहे हैं तुम चाहिए रहे हैं कैसे के रूप में उलझन ग में विशेष बात लिखने, यह छद्म कोड लिखने के लिए योग्य होना होगा या के रूप में अच्छी तरह से में टिप्पणी लिखें. एक के लिए आंशिक क्रेडिट क्योंकि वहाँ प्रश्नोत्तरी पर सवालों का बहुत कुछ. तो अगर आप दौड़े, या हो सकता है सिर्फ भ्रमित हो सकता है. टिप्पणी या छद्म कोड में लेखन अक्सर तरीके हैं कि आप आंशिक ऋण प्राप्त कर सकते हैं. तो कुछ मत छोड़ो प्रश्नोत्तरी पर खाली. के लिए कोई दंड नहीं है अंदर डाल बातें वास्तव में, छद्म कोड में डालने या टिप्पणियां ग्रेडर मदद करने जा रहा है आप वास्तव में पता है अगर यह पता लगाने क्या आप शायद इस पुरस्कार के बारे में बात कर रहे हैं, और तुम उस के लिए कुछ आंशिक ऋण. इसके अलावा उन पंक्तियों के साथ, स्पष्ट रूप से लिखें. हम वास्तव में आप लिख रहे हैं क्या नहीं कर सकते हैं, हम आपको कॉल करने के लिए नहीं जा रहे हैं चित्रा को आधी रात कल तुम क्या लिखा बाहर. हम सिर्फ अंक दूर ले जा रहे हैं. इसलिए हम नहीं बल्कि सुन सकते हैं, या स्पष्ट रूप से लिखें, हम तुम क्या लिखा पढ़ सकते हैं. और यह दो वाक्य कहते हैं, एक पैराग्राफ लिखने के लिए नहीं है. निर्देशों का पालन करें. स्पष्ट रूप से लिखें. और उन टिप्पणियों में लिखने या प्रश्नों के लिए pseudocode है कि सकता है पुरस्कार आंशिक ऋण. ठीक है, चलो भाज्य के लिए चलते हैं. तो हम एक समारोह भाज्य है. मैं वास्तव में सी में यह लिख रहे थे, तो क्या मैं नाम से पहले खड़ा करने की जरूरत है समारोह की? वापसी प्रकार, इस में जो, मामला है, हम यह INT दे दूँगा. और फिर घुंघराले ब्रेसिज़ अंदर है क्या के लिए घुंघराले ब्रेसिज़ के अंदर चला जाता है एक समारोह? छात्रों: तर्क प्रकार. जेसन Hirschhorn: इसके तर्क. तो भाज्य शायद एक तर्क ले. यह शायद केवल एक ही तर्क ले लेंगे. और हम इसे ले जाऊँगा कहूँगा एक पूर्णांक एक्स कहा जाता है. और फिर, प्रोटोटाइप की जब लेखन एक समारोह या समारोह लेखन , आप इसे परिभाषित करने से पहले अपने कोड में डेटा प्रकार और का नाम लिखना केवल कि समारोह के लिए कि चर. तो अगर आप इस में कुछ संख्या पारित कर सकते हैं समारोह, यह एक्स के रूप में भेजा जा सकता हूँ आंतरिक. हम अपने भाज्य समारोह है. हम दो बातें, एक आधार के मामले की जरूरत और एक पुनरावर्ती कॉल. भाज्य के लिए आधार मामला क्या है? यह बाहर लिखा था और जो नहीं कोई है जो अभी तक बात की, आधार क्या है भाज्य के लिए मामले? छात्र: n कम है 2 से, 1 वापसी. जेसन Hirschhorn: N है 2 से भी कम, 1 वापसी. मुझे पसंद है कि, ऐसा इसलिए है क्योंकि 0 और 1 का ख्याल रखता है. तो हम एक्स <2 1 वापस कर देंगे. हम मिल अगर हम 0 पारित हो तो 1 पारित कर दिया, इस कार्य करेंगे तुरंत वापसी 1. हम कुछ संख्या अधिक से अधिक पारित हो तो से या 2 के बराबर है, हम करने जा रहे हैं हमारे पुनरावर्ती कॉल किया है. और तो कैसे कि काम चल रहा है? सकते हैं इस पर काम किया है, जो किसी और को जो अभी तक बात नहीं की है मुझे दे इस समारोह के लिए पुनरावर्ती कॉल pseudocode में? हम एक संख्या एक्स में पारित हो तो और यह 2 से अधिक है, क्या हम क्या करना चाहते हैं? हम भी एक उदाहरण पर लिखा है आप एक संकेत दे सकता है उस तरफ. छात्र: एक्स बार फोन एक्स शून्य से 1 के भाज्य? जेसन Hirschhorn: बिल्कुल सही. हम एक्स बार वापस जाने के लिए जा रहे हैं एक्स शून्य से 1 के भाज्य. और, मैं ऊपर लिखा है कि, भले ही असल में, क्या आप अंग्रेजी में कहा, इस भाज्य समारोह फिर कहा जाता हो जाएगा. यह शून्य से 1 x पर अमल करेंगे. यह कुछ पूर्णांक के साथ वापस कर देंगे, और तो यह इन दो गुणा करेंगे एक साथ, और कहा कि मूल्य होगा यह कहा जाता है जो कुछ भी करने के लिए लौटे भाज्य समारोह, जो हो सकता है एक और उदाहरण के हो इस भाज्य समारोह. इसलिए कि एक पुनरावर्ती का एक उदाहरण है समारोह, एक बहुत सरल पुनरावर्ती समारोह. लेकिन उनमें से ज्यादातर इस तरह से किया जाएगा. आप एक अच्छा पुनरावर्ती करना चाहते हैं प्रश्नोत्तरी के लिए चुनौती है, कोडिंग की कोशिश द्विआधारी खोज बारी बारी से. क्योंकि आप के लिए द्विआधारी खोज किया कि अगर समस्या तीन सेट, तुम शायद यह किया iteratively एक जबकि पाश में. लेकिन यह भी लिखा जा सकता है बारी बारी से. आप अपनी खुद लिखने की जरूरत जा रहे हैं कुछ लेता है कि अलग समारोह विभिन्न कमांड लाइन तर्क - या नहीं कमांड लाइन तर्क, कुछ विभिन्न बस नियमित तर्क. लेकिन तुम द्विआधारी खोज लिख सकता है बारी बारी के रूप में अच्छी तरह से. छात्र: तो तुम भी लिखा हो सकता है, बजाय एक्स शून्य से 1 की, आप यह भी एक्स शून्य से लिखा हो सकता है ऋण, या तुम हो सकता है लिखित शून्य शून्य से एक्स. तुम सिर्फ सच में जल्दी क्यों व्याख्या कर सकते हैं उन विभिन्न चीजों के लिए किया जाएगा, अंतर के बीच क्या है की तरह एक्स शून्य से शून्य और शून्य से शून्य से एक्स? जेसन Hirschhorn: नहीं, मैं नहीं कर रहा हूँ उस में जाने के लिए जा रहा. लेकिन मैं के बाद इसके बारे में बात करेंगे वर्ग. एक्स शून्य से शून्य, शून्य से शून्य से एक्स 1 एक्स घटती. लेकिन वे थोड़ा अलग ढंग से करते हैं. लेकिन मुझे लगता है कि में जाने के लिए नहीं करना चाहती. प्रत्यावर्तन के बारे में अन्य प्रश्नों या इस समारोह? यही सच भी pseudocode नहीं है. वह मूल रूप में कोड है आप इस के लिए लिखना होगा सी. ठीक है, किसी भी अन्य सवाल यहाँ विषयों के बारे में? हाँ. छात्र: मैं की एक त्वरित ठहरनेवाला है चल बिन्दु और सटीक. जेसन Hirschhorn: फ्लोटिंग बिंदु और सटीक. कर सकते हैं किसी को वास्तव में जल्दी से मुझे का एक ठहरनेवाला दे चल बिन्दु और सटीक? आप अपने सभी के लिए यह करना पड़ा समस्या सेट है, तो आप सब कर रहे हैं इसके साथ परिचित. या शायद नहीं तुम सब की. कोई है? मुझे एक शुरू जगह दीजिए. चल बिन्दु और सटीक. समस्या क्या है? हां. विक्टोरिया? : वैनेसा वैनेसा. जेसन Hirschhorn: वैनेसा. माफ़ कीजिए. वैनेसा: केवल एक सीमित संख्या है प्रतिनिधित्व किया जा सकता है कि संख्या की तुम एक में पर हैं क्योंकि हमारे मामले, एक 32 बिट प्रणाली. तो आप एक तरह से करने के लिए है कुछ समूहों को बनाते हैं. जेसन Hirschhorn: तो है कि बिल्कुल सही. केवल एक निश्चित राशि की कर रहे हैं प्रतिनिधित्व किया जा सकता है कि संख्या. आप दो बहुत बड़ी संख्या गुणा, यह राशि अतिप्रवाह हो सकता है रिक्त स्थान का प्रतिनिधित्व करने के लिए है एक पूर्णांक. कभी कभी का उपयोग हम यही कारण है कि एक बजाय एक पूर्णांक की लंबी लंबी. यही कारण है कि अधिक रिक्त स्थान है. यही कारण है कि एक बड़ी संख्या में पकड़ कर सकते हैं. चल बिन्दु परिशुद्धता के साथ नहीं है कि, लेकिन यह भी साथ नहीं है दशमलव संख्या रहे हैं कि तथ्य हमेशा प्रतिनिधित्व नहीं. माफ़ कीजिए. मुझे यह वापस ऊपर डाल दिया. दशमलव संख्या 1.0 हमेशा नहीं है आप की तरह प्रतिनिधित्व की उम्मीद होती है, १.०००००००००. यह कभी कभी के रूप में प्रतिनिधित्व किया है १.००,००,००,००१ या .९९९९९९९९९. यह भी 89 फेंका जा सकता है कहीं वहाँ में. तो उन दशमलव संख्या नहीं हैं वास्तव में आप की तरह होता है प्रतिनिधित्व उन्हें प्रतिनिधित्व करने की उम्मीद है. इसलिए इस समस्या में सेट - यह दो था? - समस्या हम साथ निपटा जहां दो, सेट हम चाहते थे जब चल बिन्दु संख्या, उन्हें हम चाहते थे कि क्या वास्तव में प्रतिनिधित्व करने के लिए उन्हें प्रतिनिधित्व करने के लिए, संख्या पैसे का, या सेंट की संख्या, हम 100 से उन्हें गुणा. हम उन्हें गोल. और फिर हम सब कुछ काट दशमलव बिंदु के पीछे. यह सुनिश्चित करें कि था कि वे चाहते हैं हम चाहते थे कि क्या वास्तव में वास्तव में बराबर उन्हें बराबर करने के लिए. आप कुछ लेने जब कि क्योंकि एक नाव और आप एक पूर्णांक में बदल जाते हैं सही करने के लिए सब कुछ काट दशमलव बिंदु की. कुछ चल मतलब नहीं है क्योंकि अस्पष्टता, 100.000 हो सकता है ९९.९९,९९,९९,९९९ के रूप में प्रतिनिधित्व किया. और तुम बस सब कुछ करने के लिए काट अगर सही दूर सही, आप करने जा रहे हैं गलत नंबर मिल. हाँ. छात्र: मैं था एक सवाल के बारे में कास्टिंग. क्या क्रम में यह होती है? आप नाव करना चाहते हैं, तो कोष्ठक, 1 विभाजित 10 से 1, 10 से विभाजित करते है फिर 0.1 मिलता है, तो बदले एक नाव में यह? जेसन Hirschhorn: यदि आप करते हैं 10 से विभाजित 1 नाव - छात्र: हाँ, और तब बराबर होती है - खैर, यह सामान्य रूप से होगा में यह बराबर है - हाँ. आप इसे एक नाव बनाने के लिए चाहते हैं, है ना? जेसन Hirschhorn: ठीक है, तो हम करने जा रहे हैं बाहर लगाना में segue करने के लिए उपयोग इन सवालों के जवाब कोडिंग के माध्यम से. आप शायद का एक बहुत कुछ होगा क्योंकि इन मिनट सवाल है, और एक अच्छा तरीका उन्हें हल करने के लिए कोडिंग के माध्यम से है. तो हम अब यह सही कोड के लिए जा रहे हैं और फिर हम वापस जाने के लिए जा रहे हैं और तुम था प्रश्न कोड. तो पहली पंक्ति - मैं यह लिखा है, नहीं होना चाहिए - क्या है हम क्या करना चाहते पहली बात यह है कि जब हम जीएडिट में एक नया फ़ाइल को खोलने? छात्र: शामिल करें. जेसन Hirschhorn: क्या शामिल? छात्र: CS50 पुस्तकालय. जेसन Hirschhorn: ठीक है. हम और क्या शामिल होना चाहिए? हम बस क्या होता है की जाँच करने के लिए जा रहे हैं आप एक नाव के लिए कुछ डाली है. लेकिन क्या हम हम कर रहे हैं शामिल करने की ज़रूरत है एक सी प्रोग्राम लिखने के लिए जा रहे हैं? छात्र: मानक मैं / ओ जेसन Hirschhorn: stdio.h. हम वास्तव में इस के लिए, की जरूरत नहीं है कार्यक्रम, cs50.h, यह भले ही इसे शामिल करने के लिए हमेशा मददगार. लेकिन हम हमेशा stdio.h की जरूरत है. छात्र: सी में कोडिंग करते हैं? जेसन Hirschhorn: सी. में जब कोडन इसलिए मैं इस. सी फ़ाइल के रूप में सहेजें. मैं कुछ अच्छा वाक्य रचना हाइलाइटिंग मिलता है. मैं मुख्य अंदर शून्य लिखा है. शून्य का क्या मतलब है? छात्र: किसी भी लेने नहीं करता आदेश पंक्ति तर्क. जेसन Hirschhorn: इस में शून्य का मतलब है, मामला, मुख्य किसी भी नहीं ले करता है आदेश पंक्ति तर्क. अन्य मामलों में, यह समारोह का मतलब कमांड लाइन तर्क नहीं ले करता है. या समारोह, अगर मैं थे शून्य लिखने के लिए मुख्य (शून्य), कि मुख्य कहूँगा कुछ भी नहीं लौटा रहा. तो शून्य सिर्फ कोई मतलब नहीं है. मैं करने के लिए थे, तो मुझे क्या लिखना होगा कमांड लाइन तर्क ले? छात्र: INT चाप सी स्ट्रिंग चाप वी. जेसन Hirschhorn इंट argc स्ट्रिंग argv. यह सही है? छात्र: यह चार सितारा argv कोष्ठक है. जेसन Hirschhorn: तो तुम लिख सकता है स्ट्रिंग argv कोष्ठक या चार सितारा argv कोष्ठक, लेकिन आप कोष्ठक की जरूरत है. Argv एक सरणी है क्योंकि तार की, याद है. यह सिर्फ एक स्ट्रिंग नहीं है. तो स्ट्रिंग argv यहाँ है, चलो है एक स्ट्रिंग argv कहा जाता है. स्ट्रिंग argv कोष्ठक, यहाँ है तारों की एक सरणी. तो INT argc स्ट्रिंग argv कोष्ठक कुछ होगा कि मैं शायद लिखना होगा. तो आप एक पूर्णांक में बचाना चाहता था? छात्र: हाँ, पूर्णांक. या एक नाव में. जेसन Hirschhorn: एक नाव में? जैसे, नाव एक्स 10 से विभाजित 1 के बराबर होती है. जेसन Hirschhorn: ठीक है. कैसे मैं printf में एक नाव बाहर मुद्रित करते हैं? क्या? छात्र:% च. जेसन Hirschhorn:% च. एक पूर्णांक क्या है? डी या मैं. एक स्ट्रिंग क्या है? छात्र: एस. जेसन Hirschhorn: एस. कैसे मैं एक नई लाइन मिलता है? छात्र: बैकस्लैश एन. जेसन Hirschhorn: मैं क्या वापसी मुख्य रनों सही ढंग से तो क्या होगा? छात्र: 0. मैं हालांकि, कि लाइन लिखने की जरूरत है? छात्र: नहीं. ठीक है, हम तो यह नहीं लिखेंगे. हर कोई पढ़ सकते हैं? यह एक छोटा सा लग रहा है. सब लोग देखते हैं, या कर सकते हैं चाहिए मैं यह बड़ा बना? मैं कैमरे के लिए, हम कर दूँगा हालांकि, यह एक बड़ा सा. जेसन Hirschhorn: मैं इस बारी चाहते हैं . एक निष्पादन में फ़ाइल सी, क्या मैं लिख सकता हूँ? छात्र: परीक्षण करें. जेसन Hirschhorn: क्षमा करें? छात्र: परीक्षण करें. जेसन Hirschhorn: परीक्षण करें. हम बात कर रहे थे पहले इस लाइन. बजना. बजना क्या है? संकलक का नाम. इस लाइन क्या है? छात्र: GDB के उपयोग के लिए इसे सेट अप. जेसन Hirschhorn: सेट इसे GDB के उपयोग के लिए. इस लाइन, वो क्या है? छात्र: स्रोत कोड. जेसन Hirschhorn: यह है स्रोत फ़ाइल,. सी फाइल. इन दो लाइनों क्या करते हैं? या इन दो लाइनों. छात्र: यह नामों यह परीक्षण. जेसन Hirschhorn: तो पानी का छींटा ओ कहते हैं, इसे दूसरे तरीके से कुछ नाम है. और यहाँ आप परीक्षण यह कह रहे हैं. मुझे लगता है कि में नहीं था, क्या यह इस नाम होगा? छात्र: a.out. जेसन Hirschhorn: a.out. यह क्या करता है? छात्र: गणित पुस्तकालय लिंक. जेसन Hirschhorn: यह लिंक गणित पुस्तकालय में. हम गणित पुस्तकालय में शामिल नहीं था, लेकिन कि इतना आम है, क्योंकि वे है लिखा बनाना हमेशा शामिल करने के लिए गणित पुस्तकालय. और इसी तरह, यह भी शामिल है CS50 पुस्तकालय. हम सूची ठीक है, अगर ऐसा है, तो अब हम परीक्षण कहा जाता है एक निष्पादन. इसे लागू करने के लिए, मैं परीक्षण लिखने के. मैं, मेरे चल बिन्दु देखते हैं कि उम्मीद के रूप में, 0 के बराबर होती है. ऐसा ही करता है - तो - छात्र: तो फिर तुम डाल, अब नाव जैसे आप नाव के रूप में डाली - जेसन Hirschhorn: कास्ट एक नाव के लिए 1? छात्र: नहीं, पूरी बात डाली - हाँ. तुम बस किया, तो होगा कि यह 0.1 बनाते हैं? जेसन Hirschhorn: ठीक है, तो वास्तव में जल्दी से, 1 10 से विभाजित, उन हैं पूर्णांकों विभाजित किया जा रहा है. आप पूर्णांकों विभाजित तो, जब वे कर रहे हैं 0, और आप बचत कर रहे हैं कि 0 में स्लैश है, क्योंकि नाव सिर्फ पूर्णांक विभाजन. तो अब हम कुछ बदल रहे हैं एक नाव में. के देखो क्या होता है. हम परीक्षण कर दूँगा. तो अब हम उस स्लैश नहीं था कि देखना पूर्णांक विभाजन, यह चल रहा था बिंदु विभाजन. क्योंकि इसके तर्क में से एक एक नाव के लिए डाली गई थी. तो अब यह इस का इलाज, कह रहा था विभाजन हम साथ काम कर रहे हैं अस्थायी अंक, नहीं पूर्णांकों के साथ. और इसलिए हम हम उम्मीद जवाब मिलता है. के देखो क्या होता है - उफ़. मैं अधिक दशमलव मुद्रित करना चाहता था स्पॉट, मैं ऐसा कैसे कर सकता है? छात्र: प्वाइंट डॉट एफ, या के रूप में कई आप चाहते हैं के रूप में दशमलव स्थान. जेसन Hirschhorn: तो मैं प्रिंट 10 दशमलव स्पॉट. और हम अब हम कर रहे हैं देखते हैं कुछ अजीब चीज है. और वह वापस अपने प्रश्न के लिए चला जाता है के बारे में बात अस्पष्टता चल. यहां संग्रहीत अजीब चीजें नहीं है. ठीक है, कि आपके सवाल का जवाब है? आपको और क्या चाहिए था जल्दी से कोड करने के लिए? छात्र: मैं बस जाए या देखना चाहता था नहीं, आप कुछ सूचक को मुक्त कर दिया है, तो कि सूचक अभी भी में जमा किया था कि क्या यह यह क्या किया गया था का पता पहले की ओर इशारा करते. जेसन Hirschhorn: ठीक है, तो चलो करते हैं. चार सितारा पीटीआर, यह एक चर बनाता है प्रकार चार सितारा पीटीआर कहा जाता है. कैसे मैं malloc लिख सकता हूँ? Alden? Alden: बस malloc. लेकिन तब यह के आकार का हो गया है, और इस मामले में, मुझे लगता है कि आप करूँगा चार की ओर इशारा किया. तो यह चार होना चाहते हैं. जेसन Hirschhorn: ठीक है, तो अधिक सामान्य रूप से, अंदर - के संपादित करते हैं. Malloc के अंदर, आप संख्या चाहते हैं के ढेर पर बाइट्स. आम तौर पर, हम क्या हम कर रहे हैं कि देखा है कर हम malloc के लिए जा रहे है उदाहरण के लिए तार, या पूर्णांकों की सरणियों. इसलिए हम 10 पूर्णांकों, या 10 चाहते हैं घर का काम, 10 हमें 10 दे देंगे. और फिर घर का काम के आकार देना होगा हमें लगता है कि घर का काम के आकार, जो में इस मामले 1 बाइट है. हम 10 बाइट्स मिलता है. हम int के आकार लिख रहे थे, तो कि हमें 40 बाइट्स देना होगा. इसलिए अधिक सामान्य रूप से, malloc के अंदर आप चाहते हैं बाइट्स की संख्या है. इस मामले में, हम 1 बाइट हो रही है. एक अजीब प्रयोग की तरह लगता है malloc की, लेकिन के लिए हमारे प्रयोजनों के समझ में आता है. तो यह है कि वहाँ है. हम मुफ्त कॉल करने के लिए जा रहे हैं. हम इसे से छुटकारा मिलता है और हम फिर से पीटीआर का उपयोग करें. और आप की जाँच करने के लिए क्या चाहते थे? छात्र: मैं अभी जाँच करें कि क्या करना चाहता था या वहाँ कुछ भी नहीं था इसके अंदर. जेसन Hirschhorn: तो क्या यह कुछ भी करने के लिए उठाई? छात्र: हाँ, बिल्कुल, चाहे यह अभी भी एक स्मृति पता था. जेसन Hirschhorn: तो आप चाहते हैं पीटीआर के मूल्य की जाँच करने के लिए? छात्र: हाँ, बिल्कुल. जेसन Hirschhorn: मैं यहाँ क्या लिखूं मैं के मूल्य की जाँच करना चाहते हैं बिंदु - क्या है, जॉर्डन मूल्य, कहा? या फिर क्या पीटीआर के अंदर संग्रहित है? छात्र: एक स्मृति पता. जेसन Hirschhorn: एक स्मृति पता. मैं सिर्फ यह लिख तो, अगर यह हूँ मुझे पीटीआर की कीमत दे. और कैसे मैं बाहर मुद्रित है एक स्मृति पता? प्रारूप स्ट्रिंग क्या है एक स्मृति पते के लिए? छात्र:% पी. जेसन Hirschhorn:% पी. % S एक स्ट्रिंग है. सूचक के लिए% पी. यह सही है? यह सही है. तो पीटीआर के बराबर होती है - यह अभी भी उस में कुछ किया है. यह शायद एक अधिक है दिलचस्प सवाल है. कि रेखा क्या करता है? छात्र: Seg दोष. जेसन Hirschhorn: क्या? छात्र: मैं यह दोष SEG लगता. जेसन Hirschhorn: हम्म? छात्र: मैं यह गलती SEG करेंगे. जेसन Hirschhorn: तो इस लाइन कोड, सितारा पीटीआर की, क्या सितारा मतलब है? छात्र: की सामग्री. जेसन Hirschhorn: हाँ. की सामग्री प्राप्त करने के लिए जाओ. तो यह स्मृति के लिए जाना जा रहा है वहाँ का पता है और मुझे लगता है कि दे. मैं यहीं% ग प्रयोग किया जाता है क्योंकि वहाँ वर्ण वहाँ जमा हो जाती है. तो हम उस पते हम करने जा रहे हैं सिर्फ देखा - या शायद एक हो जाएगा कुछ अलग सा यह हम कार्यक्रम चलाने के समय. लेकिन हम उस पते पर जाना होगा हम अभी भी मौजूद है जो और वहाँ क्या देखते हैं. तो यह गलती SEG नहीं था. यह सिर्फ हमें कुछ भी नहीं दिया. यह वास्तव में हमें दिया हो सकता है कुछ, हम सिर्फ यह नहीं देख सकते हैं. और वह वापस इस विचार को जाता है - और हम में बहुत अधिक पाने के लिए नहीं जा रहे हैं यह उस से परे है क्योंकि इस कोर्स की गुंजाइश. हम लेकिन अगर हम सही यहाँ के बारे में बात की द्वारा सरणी की सीमा से परे चला गया 1, हम मुसीबत में नहीं मिल सकता है. कभी कभी, आप सिर्फ 1 से उतर जाना, क्या आप कुछ गलत कर रहे हैं, और मुसीबत में पड़ सकता है. लेकिन आप हमेशा मुसीबत में नहीं मिलता है. यह निर्भर करता है कि कितना एक बुरी बात की आप , आप मुसीबत में पड़ जा रहे है. मैला हो, कहने के लिए नहीं है जो अपने कोड के साथ. लेकिन यह कार्यक्रम नहीं होगा, कहना है आप कहीं जाना भले ही हमेशा से बाहर निकलें तुम जाने के लिए नहीं चाहिए रहे हैं. इस बात का एक अच्छा उदाहरण है, का एक बहुत कुछ है उनकी समस्या में लोगों, 3 सेट जो 15, चेक नहीं किया गया था बोर्ड की सीमा से. तो आप को देखा, बाईं ओर देखा ठीक है, देखा, शीर्ष को देखा नीचे करने के लिए. लेकिन आप को देखने के लिए जाँच नहीं था अगर ऊपर वास्तव में बोर्ड पर किया जा रहा था. और वह किया जो बहुत से लोगों को और उस में कर दिया, उनके कार्यक्रम काम पूरी तरह से, जहां कि बोर्ड था क्योंकि आप एक चला गया, तो स्मृति में संग्रहीत यह ऊपर या जाँच की है कि स्मृति पता है, वहाँ कुछ भी नहीं था उस के बारे में विशेष रूप से भयानक, तो अपने कार्यक्रम नहीं था तुम पर चिल्लाना जा रहा है. लेकिन हम अभी भी अंक दूर ले जाएगा अगर तुम, कि जांच नहीं था क्योंकि आप आप नहीं थे कुछ कर रहे थे क्या करना चाहिए, और तुम हो सकता है मुसीबत में डाल दिया है. बाधाओं रहे हो तुम शायद नहीं किया था, हालांकि, कर रहे हैं. तो यह है, हाँ, कि दिखाने के लिए है हम अभी भी यह करने के लिए जा सकते हैं. और हम में नहीं मिल रहे हैं इस मामले में परेशानी. हम पढ़ करने की कोशिश की तो अगले 100 अक्षरों, हम चाहते हैं शायद मुसीबत में मिलता है. और आप अगले 100 पढ़ने कोड कर सकते हैं वर्ण आपको कुछ ऐसा करके चाहते हैं एक तरह से पाश के लिए. हाँ. छात्र: हम सौंपा गया था कि अंतरिक्ष एक वास्तविक मूल्य, हम नहीं होगा वास्तव में कुछ भी देख सकेंगे. हम स्थापना के साथ यह कोशिश करनी चाहिए कि सी या कुछ ऐसा करने के लिए बराबर है? जेसन Hirschhorn: बड़ा सवाल है. मैं कैसे मान सेट करते हैं - कोड की क्या लाइन मैं लाइन पर लिखूं सात आपने कहा था कि क्या करना है? छात्र: स्टार पीटीआर एकल के बराबर होती है भाव ही भाव खत्म हो ग. जेसन Hirschhorn: इतना है कि रख रहा है एक चरित्र, सी, उस स्थान पर, क्योंकि फिर, कि स्टार वहाँ तक जाने का मतलब है. और बाएं हाथ की ओर के पर इस्तेमाल किया जब एक काम के ऑपरेटर, कि बराबर होती है हस्ताक्षर, हम पाने के लिए नहीं जा रहे हैं कि मूल्य कि मान सेट के रूप में इतना. अब देखते हैं कि क्या होता है देखते हैं. हम वहाँ कुछ डाल और यह वहाँ था. हम नि: शुल्क कहा जाता है. कुछ सामान शायद हुआ ढेर पर. तो यह अब वहां नहीं है. लेकिन फिर, हम नहीं मिल रहे हैं वहाँ जाने के लिए मुसीबत में. मैं उदाहरण देकर स्पष्ट करने के लिए कोड में इस बाहर कर रहा हूँ कि इनमें से एक बहुत आप सवाल है कि, वे कर रहे हैं वास्तव में दिलचस्प समय की एक बहुत जवाब. और वे वास्तव में अच्छा सवाल कर रहे हैं. और तुम पर उन्हें समझ से बाहर कर सकते हैं अपने ही है, उदाहरण के लिए, हम अनुभाग में नहीं कर रहे हैं. हाँ. छात्र: आप नहीं भेज रहे हैं क्योंकि कहीं भी सूचक, आप की क्या ज़रूरत है malloc का उपयोग करें? जेसन Hirschhorn: तो यह वापस चला जाता है अपने आरंभिक प्रश्न के. [? ?] यह सिर्फ एक स्थानीय चर रहा है? यहाँ malloc कि बाध्यकारी नहीं है. यहाँ malloc का उपयोग नहीं है यह इसलिए है क्योंकि उस सम्मोहक बस एक स्थानीय चर. छात्र: तो तुम चार कर सकता है सितारा पीटीआर नमस्कार के बराबर होती है? जेसन Hirschhorn: ओह. तो हम अब वापस लेने जा रहे हैं अपने आरंभिक प्रश्न के. मैं आप संतुष्ट नहीं थे मेरे जवाब के साथ. ठीक है? ऐसे ही? छात्र: हाँ. रुको. जेसन Hirschhorn: और जहां तुम बाहर प्रिंट करना चाहते हैं? तो हम इस तरह एक स्ट्रिंग बाहर प्रिंट जाएगा? छात्र: दिलचस्प है. जेसन Hirschhorn: तो यह इस कहते हैं तर्क एक चरित्र के प्रकार है. तो यह एक चरित्र होना चाहिए. छात्र: बस पहले एक लेता है. जेसन Hirschhorn: तो यह जैसा कि मैंने पहले कहा है. जैसे मैं यह भंडारण नहीं कर रहा है, कहा चर सूचक अंदर स्ट्रिंग. यह भंडारण है - छात्र: पहले मूल्य स्ट्रिंग की. जेसन Hirschhorn: पता की स्ट्रिंग की पहली मूल्य. हम इस बाहर मुद्रित करने के लिए थे, हम कर रहे हैं सूचक के अंदर मान रही. और हम, यह वास्तव में, है देखेंगे एक स्मृति पता. कि मतलब? माफ़ कीजिए. यही आपका जवाब है, रुको सवाल है, हालांकि? छात्र: हाँ. जेसन Hirschhorn: कोड की इस पंक्ति है एक स्ट्रिंग और फिर एक और बनाने इशारा कर रहा है कि चर सूचक कि स्ट्रिंग, कि सरणी. हाँ. हम एक स्मृति चला गया तो यदि: छात्र आगे पता है, हम ज मिलेगा? यह एक स्ट्रिंग के रूप में संग्रहीत किया गया है? जेसन Hirschhorn: जैसे, हम किया था - तो यह करने के लिए मूल्यवान है. इस अंक गणित, जो तुम लोगों को है पहले देखा है और होना चाहिए साथ अपेक्षाकृत आरामदायक. इस लेखन के लिए समान है - हम कोड की इस पंक्ति लिख रहे थे, अगर हम पहले सरणी अंकन देखा है. यह हमें दूसरी देना चाहिए इस सरणी, एच में मूल्य. हम यह किया है, तो यह भी देना चाहिए हमें उस सरणी में दूसरा मूल्य. यह स्मृति के लिए नहीं जा रहा है क्योंकि पहली बात का पता है, लेकिन एक से अधिक बात की स्मृति पता. और फिर सितारा ऑपरेटर dereferences कि सूचक. और फिर, चलो देखते हैं. हम फिर से ज मिलता है. छात्र: क्या ठीक है इसका मतलब यह भिन्नता? जेसन Hirschhorn: भिन्नता करने के लिए जाने के लिए एक फैंसी शब्द है. उस पर जाएँ और वहाँ क्या मिलता है एक संकेतक भिन्नता है. यह उसके लिए सिर्फ एक फैंसी शब्द है. हम प्रिंट करना चाहता था: छात्र पूरे स्ट्रिंग, कर सकते थे हम एम्परसेंड सूचक करते हैं? जेसन Hirschhorn: ठीक है, हम कर रहे हैं यहाँ थामने के लिए जा रहा है. हम यहाँ समाप्त करने के लिए जा रहे हैं. एम्परसेंड आप एक का पता देता है स्थान, ताकि जब आप की एम्परसेंड करना एक चर, यह आपको पता देता है कि चर कहाँ संग्रहीत है. एम्परसेंड सूचक तुम्हें दे देंगे पीटीआर स्मृति में है, जहां पीटीआर का पता. हम पर जाने के लिए नहीं जा रहे हैं इस उदाहरण के साथ. आप इन पता लगा सकते हैं अपने दम पर बातें. लेकिन फिर, यह भी एक verging किया जा सकता है आप के लिए पता करने की जरूरत क्या परे सा इस मध्य अवधि की गुंजाइश - या इस क्विज, बल्कि. माफ़ कीजिए. मैं होता, क्योंकि हम पर स्थानांतरित करने के लिए जा रहे हैं एक कोडन समस्या क्या करना पसंद पहले समय नहीं है. और हम मैं क्या लगता है कि कोड के लिए जा रहे हैं इनमें से सबसे सम्मोहक है उदाहरण, atoi. तो इस पर एक सवाल था दो साल पहले एक प्रश्नोत्तरी. और मैं यहाँ बोर्ड पर है. लोग प्रश्नोत्तरी पर पूछा गया - वे में एक छोटे से अधिक tesxt दिया गया सवाल है, लेकिन मैं सफाया यह अनावश्यक था पाठ क्योंकि अब हमारे उद्देश्यों के लिए. यह सिर्फ कुछ पृष्ठभूमि था क्या किया atoi पर. लेकिन आप सभी जानते हैं और कर रहे हैं बहुत atoi से परिचित. मैं आप इस कोड का सुझाव कागज के एक पत्रक पर. मैं भी आप रणनीति का उपयोग का सुझाव हम पर चला गया है कि हमारे अनुभाग में एक बहुत. सबसे पहले, सुनिश्चित करें कि आप समझ कर क्या atoi कर रही है. एक तस्वीर खींचना या कुछ के साथ आए इसे अपने सिर में की मानसिक छवि. इसके बाद, इस के लिए pseudocode लिखें. प्रश्नोत्तरी में, तुम सब मिल रहा है अगर pseudocode, कम से कम तुम कुछ नीचे डाल दिया. और फिर पर कि pseudocode मैप सी. आप में एक जांच है, तो आपके pseudocode, जैसे जाँच अगर कुछ 1, कि एक अगर पर नक्शे है इसके आगे की स्थिति और. और अंत में, सी में प्रोग्राम कोड तो वापस atoi करने के लिए जाने के लिए और पाँच मिनट लग के एक पत्रक पर इस कोड को के बारे में है, जो शायद कागज, आप एक पर ले जाएगा समय की राशि कोड atoi प्रश्नोत्तरी. पांच से 15 मिनट, पांच को पांच, 12 को 10 मिनट, राशि के बारे में है आप इस पर खर्च होता समय प्रश्नोत्तरी में प्रश्न. तो, अब पांच मिनट कृपया ले. और आप कोई प्रश्न हैं, बढ़ा अपने हाथ और मैं आसपास आता हूँ. [पक्ष बातचीत] जेसन Hirschhorn: ठीक है, तो कि पाँच मिनट था. उस राशि के बारे में शायद था बार जब आप एक प्रश्नोत्तरी पर उस पर खर्च होता उस समय शायद कम अंत. हम कुछ देर में संक्षिप्त करेंगे. हमें इस कोडिंग शुरू करते हैं. और हम सभी तरह के माध्यम से नहीं मिलता है, इस के जवाब और इस प्रश्नोत्तरी सवाल फिर से उपलब्ध हैं, पतन 2011 यह सवाल जब है प्रश्नोत्तरी पर दिखाई दिया. और यह आठ अंक लायक था प्रश्नोत्तरी पर तो. आठ अंक के उच्च अंत पर है अंक कुछ की राशि के लायक है. अधिकांश प्रश्नों के रेंज में हैं 1-6 अंक की. तो यह एक और अधिक चुनौतीपूर्ण है सुनिश्चित करने के लिए सवाल है,. मुझे किसी को भी शुरू कर सकते हैं? आम तौर पर, क्या हम जा रहे हैं इस के साथ क्या करना चाहते हैं तार्किक रूप से, atoi समारोह? हम क्या करना चाहते हैं? इसलिए हम लिखने जा रहे हैं कुछ pseudocode. छात्र: वर्ण कनवर्ट पूर्णांकों में. जेसन Hirschhorn: वर्ण कनवर्ट पूर्णांकों में. ठीक है. तो कितने वर्ण हम कर रहे हैं के माध्यम से जाने की जरूरत के लिए जा रहा? छात्र: वे सब के सब. छात्र: सभी वर्ण स्ट्रिंग में. जेसन Hirschhorn: सभी स्ट्रिंग में वर्ण. हम हर के माध्यम से जाना चाहता था तो अगर एक स्ट्रिंग में चरित्र, एक बात क्या है सी में हम अनुमति दी गई है कि देखा है हमें हर के माध्यम से जाने के लिए एक स्ट्रिंग में चरित्र? छात्रों: पाश के लिए एक. जेसन Hirschhorn: पाश के लिए एक. इसलिए हम के माध्यम से लूप करने के लिए जा रहे हैं एस में हर चरित्र. तो क्या हम करना चाहते करने जा रहे हैं हम एक विशिष्ट चरित्र मिलता है? हम एक 90 पारित कर दिया हो रही है कहो. हम 9 मिलता है. यह एक चरित्र है. क्या हम साथ क्या करना चाहते हैं उस चरित्र 9? छात्र: चरित्र 0 से घटाना? छात्र: 0 जोड़ें? जेसन Hirschhorn: घटाएँ चरित्र 0 से यह? छात्र: हाँ. जेसन Hirschhorn: क्यों करते हैं आप ऐसा करने के लिए करना चाहते हैं? छात्र: [सुनाई] मूल्य. इसके इंट मूल्य. जेसन Hirschhorn: ठीक है, तो हम ले चरित्र 9, से घटाना चरित्र 0 एक पाने के लिए वास्तविक पूर्णांक 9. मीठा. और तुम उस चरित्र में पता है 9 0 शून्य से चरित्र 9 है? आप पर क्या चार्ट दिखते हैं? छात्र: नौ तार्किक कर रहे हैं 9 और 0 के बीच स्थानों. या फिर आप ASCII तालिका में लग सकता है. जेसन Hirschhorn: ASCII तालिका. लेकिन हाँ, आप के रूप में अच्छी तरह से सही हो. इसलिए हम 0 घटाना. तो अब हम पूर्णांक 9 है. और क्या हम उस के साथ क्या करना चाहते हैं? हम 90 है, तो यह पहली पूर्णांक है हम, हम क्या करना चाहते है? छात्र: मैं एक अस्थायी पूर्णांक में डाला था सरणी, तो यह करने के लिए गणित करो बाद में एक अंत में इसे बनाने के लिए. जेसन Hirschhorn: ठीक है. छात्र: आप के अंत में शुरू कर सकते हैं तब सरणी और इतना आगे बढ़ना कि आप आगे बढ़ने के लिए हर समय, आप 10 से गुणा करें. जेसन Hirschhorn: ठीक है. यह एक बहुत की तरह लगता है सम्मोहक विचार. हम अपने सरणी के अंत में शुरू कर सकते हैं, और हम strleng उपयोग कर सकते हैं. हम यहां strleng उपयोग कर सकते हैं. हम अपने स्ट्रिंग की लंबाई मिलेगा. हम अंत में शुरू. और + पहले एक है, हम बस ले कि पूर्णांक, और शायद हम एक तरह बना नई पूर्णांक चर ऊपर शीर्ष जहां हम सब कुछ भंडारण कर रहे हैं. से एस में हर चार के माध्यम से तो हम पाश वापस सामने करने के लिए, हम 0 घटाना, और फिर हम इसे ले, और पर निर्भर करता है यह वह जगह है जहाँ, हम यह गुणा 10 की एक शक्ति के द्वारा. क्योंकि पहले एक, हमें क्या दाएँ चरित्र से गुणा? छात्र: 10-0. जेसन Hirschhorn: 10-0. हम दूसरा क्या गुणा है दाएँ चरित्र से? छात्र: [सुनाई]. जेसन Hirschhorn: क्या? छात्र: 1 से 10. जेसन Hirschhorn: 1 से 10. तीसरे दाएँ चरित्र? छात्र: 10-2. जेसन Hirschhorn: 10-2. छात्र: माफ करना, मुझे समझ नहीं आता हम यहाँ क्या कर रहे हैं. जेसन Hirschhorn: ठीक है, चलो फिर, वापस चलते हैं. तो हम करने जा रहे हैं एक स्ट्रिंग में पारित कर दिया. हम atoi लिख रहे हैं. तो हम एक स्ट्रिंग में पारित हो. हम पारित हो रही है कहो स्ट्रिंग 90 में. हम क्या करने जा रहे हैं, पहली बात के लिए निर्धारित है हम कर रहे हैं कि एक नई पूर्णांक चर बस बनाने के लिए जा रहा हमारी नई पूर्णांक के रूप में. यही कारण है कि हम जा रहे हैं अंत में वापस जाने के लिए. हम में से हर चरित्र के माध्यम से जाने की जरूरत स्ट्रिंग हम निर्धारित किया है क्योंकि हम हर एक के स्पर्श की जरूरत है और है कि फिर हमारी नई पूर्णांक में जोड़ें. लेकिन हम सिर्फ एक संख्या के रूप में इसे नहीं जोड़ सकते. हम सिर्फ 9 लेते हैं और नहीं कर सकते हमारे पूर्णांक के लिए 9 जोड़ना. यह क्या जगह पर निर्भर करता है यह स्ट्रिंग में है. हम गुणा करने की आवश्यकता के लिए जा रहे हैं यह 10 के एक शक्ति के द्वारा. क्योंकि है कि कैसे 10 आधार काम करता है. इसलिए हम वास्तविक पाने के लिए जा रहे हैं चरित्र, या वास्तविक पूर्णांक संख्या, चरित्र 0 घटाकर चरित्र 9 हम साथ किया था से से चरित्र राजधानी घटाकर हम में से एक में था जो कुछ चरित्र उन समस्याओं. इसलिए हम वास्तव में करने के लिए 0 से एक नंबर मिल जाएगा 9 एक वास्तविक संख्या के रूप में सहेजा है, और हम करेंगे आधार पर 10 की एक शक्ति से गुणा हम स्ट्रिंग में हैं जहां पर. और फिर हम इसे वापस जोड़ने के लिए जा रहे हैं हमारी नई पूर्णांक चर में. तो क्या यह होगा की तरह दिखेगा हम यहाँ पर आकर्षित करेंगे - जा. हम स्ट्रिंग 90 में पारित हो तो - छात्र: [सुनाई]. जेसन Hirschhorn: लेकिन atoi एक स्ट्रिंग लेता है. इसलिए हम के माध्यम से जाने के लिए जा रहे हैं होल्डिंग. हम 90 में पारित हो जाएगा. हम आगे से पीछे से जाना. हम 0 ले. छात्र: मैं माफी चाहता हूँ. हो सकता है कि यह बेवकूफी है. हम एक स्ट्रिंग में पारित कर दिया हो रही है, यही कारण है कि हम क्या कर रहे हैं 90 है में पारित कर दिया हो रही है? 90 एक पूर्णांक है. जेसन Hirschhorn: atoi एक लेता है स्ट्रिंग और पूर्णांक में बदल जाता है कि स्ट्रिंग का प्रतिनिधित्व. लेकिन स्ट्रिंग 90 पूर्णांक नहीं है 90 या 90 नंबर. स्ट्रिंग 90 एक दो की सरणी, या है तीन अक्षर, बल्कि, 9 चरित्र, 0 चरित्र, और बैकस्लैश 0 चरित्र. और हम क्योंकि, के लिए atoi लिख रहे हैं उदाहरण के लिए, आप आदेश ले जब लाइन तर्क, और उस में सहेजी गई है argv, यह एक स्ट्रिंग के रूप में सहेजा है. लेकिन अगर आप एक नंबर के रूप में व्यवहार करना चाहते हैं, आप एक के लिए इसे बदलने की जरूरत वास्तविक पूर्णांक. जो हम हमारी समस्या सेट में से एक था. हम एक संख्या में जो किया हमारी समस्या सेट की. एक पूर्णांक ले लिया है कि हर कोई एक कमांड लाइन तर्क के रूप में. तो यही कारण है कि हमारे atoi समारोह एक स्ट्रिंग लेता है. तो फिर, यहाँ हमारे उदाहरण में, हम कर रहे हैं आखरी लेने के लिए जा रहा है. हम चरित्र घटाना करने जा रहे हैं इसमें से 0, क्योंकि वर्ण 0 चरित्र 0 से घटाया आपको देता है के अनुसार वास्तविक संख्या 0, हम करते हैं कि ASCII गणित. पात्रों के रूप में प्रतिनिधित्व कर रहे हैं क्योंकि उनके वास्तविक से अलग - चरित्र एक, उदाहरण के लिए, लोअरकेस एक 97 है. ऐसा नहीं है - ओह! यह आप उम्मीद करेंगे जो कुछ भी नहीं है यह उदाहरण के लिए, 0 होने के लिए. तो तुम घटाना है चरित्र एक 0 प्राप्त करने के लिए. तो हम यहाँ क्या करने जा रहे हैं वास्तविक संख्या प्राप्त करने के लिए. और फिर हम से गुणा करने के लिए जा रहे हैं 10 की एक शक्ति है, जहां उस पर निर्भर करता है स्ट्रिंग में है, और फिर उस लेना और हमारी जगह धारक के लिए यह जोड़ना चर तो हम साथ आ सकते हैं हमारे अंतिम नई पूर्णांक. कि हर किसी को समझ में आता है? इसलिए हम इस कोड के लिए नहीं जा रहे हैं अब ठीक है, क्योंकि हम कर रहे हैं समय पर कम हो रही है. मुझे लगता है कि के समय के लिए माफी माँगता हूँ. लेकिन यह क्या, उम्मीद है, आप होता है पर - प्रश्नोत्तरी पर ऐसा करने में सक्षम हो बहुत कम से कम, इस pseudocode मिल बाहर लिखा. और फिर, हम थे लिखने के लिए pseudocode, वास्तव में, हम यह कर सकता है बहुत जल्दी. हम हम लिखा टिप्पणियों की हर पंक्ति यहाँ के बारे में तब्दील करने के लिए सी कोड की एक लाइन. एक नया चर, लेखन की घोषणा एक पाश, कुछ घटाव, कुछ गुणन, और कुछ असाइनमेंट. हम शायद भी करना चाहती हूँ एक वापसी लाइन में लिखें. हम भी डाल करने के लिए चाहते हो सकता है यहां कुछ जांचता है. हाँ. छात्र: तो हम इलाज कर सकते हैं वास्तविक स्ट्रिंग के रूप में है? क्योंकि मुझे पता है कि यह सिर्फ एक पता है. की तरह, कैसे आप लंबाई के मिल जाएगा तार के माध्यम से पारित किया जा रहा? जेसन Hirschhorn: तो कैसे किया एक स्ट्रिंग की लंबाई? Strlen. छात्र: strlen, हाँ. लेकिन आप के रूप में रख सकते हैं उस के लिए तर्क? जेसन Hirschhorn: तो strlen एक चार सितारा लेता है. और यह कि चार सितारा इस प्रकार है, और यह यह एक करने के लिए हो जाता है जब तक गिनती रहता है बैकस्लैश 0. strlen वास्तव में था अन्य कार्यक्रमों में से एक हम कोड के लिए जा रहे थे. उस कोड के लिए एक और अच्छा एक है. एक कि थोड़ा आसान है क्योंकि अगर आप इस बारे में सोचने के लिए जा रहे हैं धारणा - मैं तो बस ज़ोर से कहा - strlen इस प्रकार है एक सूचक और रहता जा रहा है और गिनती और जब तक ट्रैक रखने आप एक बैकस्लैश 0 तक पहुँचने. छात्र: ठीक है, यह मिल गया. जेसन Hirschhorn: की तो सबसे अच्छा प्रश्नोत्तरी 0 कल पर किस्मत. आप किसी भी सवाल है, तो मैं हूँ इस के बाद बाहर हो. मुझे ईमेल करने के लिए स्वतंत्र महसूस करो. यदि आप अपने खुद के TF पहुंच से बाहर मेरे अनुभाग में, या नहीं मिलता है मेरी अगर आप यह चाहते ईमेल करें. तुम बाहर बेकार करना चाहते हैं और सिर्फ भेजते हैं मुझे एक ईमेल, एक freakout ईमेल, मैं हूँ , एक स्माइली चेहरा, जैसे, तुम्हें वापस भेज या, जैसे, एक मजाक या कुछ और. तो साथ ही ऐसा करने के लिए स्वतंत्र. गुड लक फिर से, और मैं हूँ सभी अगले हफ्ते मिलते हैं.