स्पीकर 1: हाय सब लोग. हम शुरू करने जा रहे हैं. मैं लोगों को अभी भी जा रहे हैं में छान हो. लेकिन समय के हित में, हम कर सकते हैं तो समय पर यहाँ से बाहर तुम लोगों को मिलता है, हम शुरू करने जा रहे हैं. तो CS50 प्रश्नोत्तरी 0 समीक्षा करने का स्वागत करते हैं. एहसास नहीं है जो आप उन लोगों के लिए अभी तक, आप बुधवार को एक सवाल है. वू हू. आप अभी तक पढ़ाई शुरू नहीं किया है या यह अभी तक मौजूद है कि महसूस नहीं किया है, पिछले परीक्षाएँ और सब के बारे में जानकारी अपने प्रश्नोत्तरी cs50.net/quizzes पर हैं. कुछ बहुत अच्छी चीजें वहाँ पर नहीं है, 10 पिछले से पिछले परीक्षाएँ वर्ष के रूप में अच्छी तरह से जानकारी इस क्विज और विषयों के बारे में कि कवर किया जाएगा. तो चलो शुरू हो जाओ. तो तुम लोग, पहले याद हो सकता है वर्ग दाऊद के दिन उन लैंप पर था. तो अनिवार्य रूप से, सब कुछ हो जाता है कि एक कंप्यूटर के हुड के तहत पर बाइनरी में किया. बाइनरी यह लगता है कि क्या मतलब है जैसे, 0 और 1 के. यह दो मूल्यों है कि प्रतिनिधित्व किया जा सकता है. तो सिर्फ खंड के पहले दिन में जैसे दाऊद एक रोशनी पर बदल गया जब बल्ब, हमारे कंप्यूटर पर प्रतिनिधित्व करते हैं, या 1 को समझता 0 के रूप में द्विआधारी और 1 की, पर या बंद. बाइनरी के मूल बातें. हर जगह प्रतिनिधित्व किया है बेस दो में. तो आप करने के लिए 0 2 जोड़ 1 सभी तरह से 2. अपने द्विआधारी करने के लिए क्या है की गणना करने के लिए दशमलव, तुम सिर्फ इस समीकरण का पालन करें प्रकार की बात. आप उन स्थानों में से किसी में एक 1 है, आप से गुणा जो कुछ इसमें बेस के साथ, इसे जोड़ने के लिए, और आप दशमलव मिलता है. तो यह आप भरोसा कैसे है बाइनरी में से 5. बस हम पर क्या कर रहे थे जैसे पिछले स्लाइड, यह आप कैसे होता है 1 से 5 का प्रतिनिधित्व करते हैं. इसी तरह, बस आप जोड़ सकते हैं की तरह है और दशमलव में घटाना या 10 आधार है, या वास्तव में किसी भी आधार पर जोड़ सकते हैं और बाइनरी में घटाना. जब आप आप उम्मीद करेंगे कि क्या वास्तव में यह अधिक से अधिक के बराबर होती है, तो दो को जोड़ें 1 से, आप एक 1, यह एक 0 कर ले, और बस, इसके अलावा उस तरह से करते हैं जैसे आप नियमित रूप से उम्मीद करेंगे दशमलव या किसी भी अन्य आधार. कूल. मैं, सब कुछ पहले की तरह कहा तो है कि हमारे कंप्यूटर के हुड के नीचे चला जाता है 0 और 1 का, या बाइनरी में किया जाता है. इसलिए हम व्यक्त करते कैसे, उदाहरण के लिए, पत्र, या संख्याओं, या वर्ण? और जवाब है कि ASCII है. ASCII वर्ण के बीच एक मानचित्रण है हम सामान्य रूप में देखना होगा कि एक के, बी जैसे अंग्रेजी भाषा, सी, अंडरस्कोर, डैश, और ऐसा कुछ. और यह एक ASCII मूल्य के लिए नक्शे है कि. एक ASCII मूल्य सिर्फ एक संख्या है कि अपने कंप्यूटर से समझा जा सकता है. और तुम इसके अलावा क्या कर सकते हैं बस की तरह और संख्या के साथ घटाव, आप कर सकते हैं ASCII मूल्यों के साथ उन्हें. इस उदाहरण में तो क्या हुआ इस बाहर मुद्रित होगा? हाँ, तो सिर्फ एक अंतरिक्ष बी अंतरिक्ष सी अंतरिक्ष डी जहाँ मेरे माउस गए थे? आप 65 में एक पूर्णांक परिभाषित कर सकते हैं नोटिस. और आप का उपयोग कि बाहर प्रिंट जब प्रतिशत सी, यह एक के रूप में है कि व्याख्या करेंगे चरित्र और ए बाहर प्रिंट होगा इसी तरह, आप घोषणा कर सकते हैं यह एक चार के रूप में. और तुम प्रतिशत का उपयोग कर इसे बाहर प्रिंट जब सी, के रूप में यह है कि व्याख्या करेंगे प्रतिशत डी और यदि आप जोड़ सकते हैं बस की तरह संख्या, आप अक्षर हैं जोड़ सकते हैं इस मामले में ASCII मूल्यों,. हर किसी के लिए तो एक छोटी सी सूचक. 5, एक स्ट्रिंग के रूप में, नहीं करता वास्तव में 5 बराबर. तो हम कैसे परिवर्तित हो सकता है पूर्णांक से 5 स्ट्रिंग 5? किसी भी विचार? हाँ. इसलिए हम एक स्ट्रिंग के रूप में 5 है, हम 0 घटाना कर सकते हैं. और कहा कि हमें 5 देता हूँ. और इसी तरह, हम एक के रूप में 5 है तो पूर्णांक, स्ट्रिंग 0 तक कि जोड़ें. और कहा कि हमें स्ट्रिंग 5 देता है. कूल. अब, एक जहां व्याख्यान के लिए वापस याद हम एल्गोरिदम के बारे में बात की थी. इसलिए हम वास्तव में एक कंप्यूटर चाहते हैं कि कैसे दिलचस्प बातें करते हैं? तुम बस जोड़ने और घटाकर, पता संख्या और मुद्रण बातें बाहर नहीं है कि रोमांचक. आम तौर पर, हम करने के लिए हमारे कंप्यूटर चाहते हैं एल्गोरिथ्म किसी तरह का प्रदर्शन करते हैं. एक छोटे से अधिक जटिल कुछ सिर्फ साधारण अंकगणित से. एक एल्गोरिथ्म कदम सेट से सिर्फ एक कदम है प्रदर्शन करने के लिए के लिए निर्देश की एक निश्चित task-- सिर्फ एक नुस्खा की तरह. आप के पहले दिन याद हो सकता है दाऊद हमें एक कमरे में गिनती की थी, जहां क्लास लोगों के और कितने लोग कमरे में थे. आप गिनती करने के लिए इस्तेमाल किया जा सकता है एक के बाद एक. 1, 2, 3, 4. उस मामले में, एक रेखीय समय एल्गोरिथ्म. लेकिन दाऊद के लिए एक एल्गोरिथ्म शुरू की आप कमरे में लोगों की गिनती करने के लिए हर किसी के ऊपर खड़ा है, जहां आप अपने कहना किसी अन्य व्यक्ति के लिए संख्या, कि जोड़ संख्या, और एक व्यक्ति नीचे बैठता है. और तुम उस दोहराएँ. कि एल्गोरिथ्म का एक प्रकार है. हम कैसे कुशल एक विश्लेषण कर सकते हैं यह समय की दौड़ पर एल्गोरिथ्म आधारित है. लेकिन हम एक छोटा सा बात करेंगे उस बारे में बाद में अधिक. इतना सब एल्गोरिदम भी कर सकते हैं pseudocode में लिखा जाना. Pseudocode बस की तरह एक अंग्रेजी है वाक्यविन्यास का प्रतिनिधित्व करने के लिए इस्तेमाल किया एक प्रोग्रामिंग भाषा. उदाहरण के लिए, एक उपयोगकर्ता हम चाहते थे पूछने के लिए मेरे पसंदीदा संख्या अनुमान करने के लिए, हम जैसे pseudocode हो सकता है. एक उपयोगकर्ताओं को लगता है कि हो जाओ. अनुमान सही है, तो उन्हें बताना वे सही कर रहे हैं, और उन्हें बता वे सही नहीं कर रहे हैं. और pseudocode आसानी से करने का एक तरीका है एक विचार या एक एल्गोरिथ्म का प्रतिनिधित्व. तो अब हम वास्तव में लिखने के लिए चाहते हो सकता है इस भाषा में है कि कंप्यूटर समझ सकता है. इसलिए हम अपने pseudocode लिख सकता है और स्रोत कोड में है कि व्याख्या. अब तक, स्रोत कोड का पालन करना होगा की एक निश्चित वाक्यविन्यास को एक प्रोग्रामिंग भाषा. और अब तक, CS50 में, हम है ज्यादातर सी का उपयोग किया गया. इसलिए इस सी के लिए स्रोत कोड हो सकता है. बाद में पाठ्यक्रम में, तुम रात में आ गए अन्य प्रोग्रामिंग के साथ संपर्क में PHP जैसी भाषाओं. या फिर आप भी, आप अन्य कक्षाएं लेने अगर जावा, अजगर, या भी OCML कर सकता है. लेकिन हमारे ग कार्यक्रम भाषा में, यह है हम के लिए स्रोत कोड लिख सकते हैं कैसे pseudocode एल्गोरिथ्म कि मैं तो बस पहले बताया. तो कैसे वास्तव में आपके कंप्यूटर करता है कि समझ में आया? मैं सिर्फ सच में, यह पहले कहा शून्य और लोगों को समझता है. तो यह कैसे स्रोत से प्राप्त करता है हो सकता है कि कुछ करने के लिए कोड समझा? ठीक है, हम कुछ है एक संकलक कहा जाता है. आप में से अधिकांश में वापस याद है आपकी psets, आप इस कार्यक्रम में किसी तरह का था एक डॉट सी फाइल में लिखा है. और फिर तुम बनाने टाइप करेंगे. तो क्या कर रही है? आप संकलन करने के लिए बनाने टाइप कर सकते हैं अपने कार्यक्रम someone-- क्योंकि जो कोई भी अपने पी सेट लिखा था; शायद David-- एक बनाने फ़ाइल बनाया. और वह चलाने के लिए पता करने के लिए करना बताता है आपका संकलक, कहा जाता बजना, कि वसीयत तो आपत्ति करने के लिए अपने स्रोत कोड संकलन शून्य और लोगों जो कोड, अपने कंप्यूटर समझता है. लेकिन बाद में एक छोटे से, हम जायेंगे compilers के बारे में अधिक गहराई में. तो याद pset 0, where-- हाँ, आप में एक सवाल है? दर्शक: [अश्राव्य]? स्पीकर 1: हाँ. मैं वास्तव में उन्हें लगता है कि ऑनलाइन होना चाहिए. हाँ. दर्शक: यह [अश्राव्य] की तरह है? स्पीकर 1: यह नहीं है. Cs50.net/quizzes पर हैं. दर्शक: स्लैश परीक्षाएँ, 2013 स्लेश 0 स्लेश, और बस के माध्यम से क्लिक करें परीक्षाएँ 2013 और प्रश्नोत्तरी 0, खंड स्लाइड्स की समीक्षा करें. स्पीकर 1: हाँ, तो तुम लोगों के लिए चाहते हैं यह पुल और पर इसे देखो अपने खुद के कंप्यूटर, वह भी ठीक है. फिर से कहो. दर्शक: [अश्राव्य]. स्पीकर 1: हाँ, [अश्राव्य] डमी चर रहा है. हाँ, ओह? दर्शक: [अश्राव्य]? स्पीकर 1: नहीं, हड़ताल परीक्षा पर नहीं हैं. क्षमा करें, था उसे सवाल था, परीक्षा पर हमले. और ऐसा नहीं है. तो pset 0, तुम लोग सब होना चाहिए खरोंच का उपयोग कर कुछ लागू किया है. और हम कुछ बुनियादी प्रोग्रामिंग सीखा खरोंच का उपयोग कर इमारत ब्लॉकों. तो चलो कुछ पर एक नज़र रखना इन ब्लॉक का निर्माण कि एक कार्यक्रम बनाते हैं. पहले बूलियन अभिव्यक्ति है. बूलियन अभिव्यक्ति वाले हैं और है कि 0 या कुछ भी दो संभावित मान. इस मामले में, सही है या गलत, पर या बंद है, और हाँ या ना. बहुत आसान है, एक साधारण का एक उदाहरण है, एक बूलियन का उपयोग करता है कि कार्यक्रम यहां अभिव्यक्ति की. इसलिए करने के लिए बूलियन अभिव्यक्ति के लिए आदेश में उपयोगी हो सकता है, हम बूलियन ऑपरेटरों है. ये इस्तेमाल किया जा सकता है कि ऑपरेटरों रहे निश्चित मूल्यों की तुलना करें. तो हमारे पास है और या नहीं के बराबर है, कम से कम या अधिक से अधिक के बराबर या के बराबर, और से भी कम से कम या अधिक से अधिक. लेकिन इन ऑपरेटरों बहुत उपयोगी नहीं हैं हम उन्हें गठबंधन कर सकते हैं जब तक स्थितियां. तो तुम लोग खरोंच से याद कर सकते हैं और अपने पी से हम उस सेट स्थितियां था. वे में कांटे की तरह, अनिवार्य रूप से कर रहे हैं, अपने कार्यक्रम का तर्क है कि आधार पर कि क्या निष्पादित एक शर्त पूरी कर रहा है. हम था कि स्थितियों की तो एक इस कोर्स में कई बार इस्तेमाल किया है और, अगर, और बाकी की स्थिति, अगर. यहाँ का एक उदाहरण है आप उसका इस्तेमाल कर सकते हैं. किसी के बीच फर्क पता है सिर्फ बयानों अगर सब का उपयोग अगर, किसी और छंद नीचे रास्ता, अगर, और बाकी संयुक्त? हाँ? दर्शक: [अश्राव्य]. स्पीकर 1: बिल्कुल. तो अगर मैं था, तो यह सभी तरह से नीचे जिस तरह से, यहां तक ​​कि इस हालत देता है सच है, यह अभी भी जारी रहेगा अगले दो परीक्षण. जबकि, एक और को, अगर, एक और को साथ बयान, एक सच रिटर्न अगर, दूसरों का परीक्षण नहीं कर रहे हैं. उस के बारे में कोई सवाल? कूल. तो आप एक बाकी के एक अगर किसी और का उपयोग यदि आप जानते हैं बयान कि यह केवल कर सकते हैं इन मामलों में से एक हो. एक्स 0 से कम है तो अगर हम यह पता है, निश्चित रूप से नहीं किया जा रहा 0 से अधिक. इसके बाद, एक और इमारत ब्लॉक हमने सीखा है कि छोरों हैं. हम छोरों के तीन प्रकार के हैं. छोरों के लिए, छोरों जबकि, और छोरों जबकि करते हैं. और आम तौर पर, आप जब नीचे बैठने के लिए कुछ लिखना, आप को फैसला करना है आप उपयोग करना चाहते तीन में से कौन सा. तो कैसे हम जो एक तय करते हैं? हम जानते हैं कि हम आम तौर पर एक पाश के लिए उपयोग कितनी बार हम पुनरावृति करना चाहते हैं कुछ के माध्यम से या कितनी बार हम किसी कार्य को करने के लिए चाहते हैं. हम कुछ की जरूरत है अगर हम छोरों जबकि उपयोग हालत चालू रखने के लिए सच हो सकता है. और हम बहुत समान है, जबकि ऐसा उपयोग जबकि, लेकिन हम अपने कोड पर चलाना चाहते हैं कम से कम एक बार. Do में जो कुछ भी है तो करते हैं, करेंगे हमेशा कम से कम एक बार चलाते हैं. जबकि, जबकि साथ, यह अगर सब पर नहीं चल सकते हालत से संतुष्ट नहीं है. उस के साथ कोई सवाल? पाश के लिए एक की तो संरचना. तुम लोग यह सब देखा है. आप यह इनिशियलाइज़. आप हालत किसी तरह का है. तो, उदाहरण के लिए, हम को प्रारंभ हो सकता है के लिए के रूप में मैं 0 के बराबर होती है. मैं कम से कम 10 है. और मैं ++. हम किया है कि बहुत ही आसान एक. एक जबकि पाश के लिए, इसी तरह, आपके पास आरंभीकरण का किसी तरह का है, हालत किसी तरह का, और अद्यतन किसी तरह का. तो हम भी पाश के लिए हमारे लागू कर सकते हैं एक जबकि पाश के रूप में इस का उपयोग कर. और इसी प्रकार एक जबकि पाश के साथ, हम कुछ आरंभीकरण हो सकता है, , कुछ निष्पादित यह अद्यतन, और तो हालत की जाँच करें. तो अब काम करता है. हम सब कुछ एक साथ डाल दिया. हम कुछ लिखने के लिए चाहते हो सकता है समारोह की तरह. आम समारोह कि तुम हो सकता है पहले से ही देखा है मुख्य है. मुख्य एक समारोह है. यह एक प्रकार की वापसी, पूर्णांक है. यह मुख्य एक समारोह का नाम है. और यह तर्क, argc और argv है. तो मुख्य बस एक समारोह है. आप का इस्तेमाल किया गया हो सकता है अन्य कार्यों, printf-- printf एक function-- है GetInt, toupper. लेकिन इन किया गया है के लिए होता है द्वारा हमारे लिए लागू किया पुस्तकालय के कुछ प्रकार. तुम लोगों सहित याद है इस CS50.h पुस्तकालय या मानक आई / ओ लाइब्रेरी. हाँ, सवाल? दर्शक: सी में सिर्फ निहित मुख्य है? यह बस की तरह [अश्राव्य] करता है? स्पीकर 1: सवाल है मुख्य अगर ग में निहित है. और हाँ, सभी कार्य एक मुख्य समारोह है. यह एक तरह कंप्यूटर के लिए आवश्यक है शुरू करने के लिए जहां पता करने के लिए कोड चल रहा है. दर्शक: तो तुम नहीं होता [अश्राव्य]? स्पीकर 1: नहीं कोई अन्य प्रश्न? कूल. आप एक समारोह का उपयोग कर सकते हैं तो बस की तरह कि आप के लिए लिखा है, आप भी कर सकते हैं अपने खुद के समारोह में लिखें. यह किसी कि हो सकता है एक समारोह है मात्रा की गणना करने के लिए लिखा है उदाहरण के लिए एक क्यू, के. एक प्रकार की वापसी इस मामले में, यहाँ है पूर्णांक, हमारे समारोह नाम क्यू और हमारे मापदंडों की सूची. और आप डेटा लिखने के लिए है कि ध्यान दें आप करना चाहते पैरामीटर के प्रकार उपयोग या काम नहीं करता है बाकी किस तरह का पता पैरामीटर मैं स्वीकार करना चाहिए. इसलिए, इस मामले में, हम चाहते हैं हमारे निवेश के रूप में एक पूर्णांक. तो क्यों हम कार्यों का उपयोग करने के लिए चाहते हो सकता है? सबसे पहले संगठन के लिए महान. वे में अपने कोड को तोड़ने में मदद अधिक मात्रा का आयोजन किया और कर यह पढ़ने के लिए आसान. सरलीकरण. इस डिजाइन के लिए अच्छा है. आप कोड का एक टुकड़ा पढ़ रहे हैं और मुख्य समारोह, वास्तव में है वास्तव में लंबे समय से, यह करने के लिए कठिन हो सकता है क्या हो रहा है के बारे में कारण. तो आप कार्यों में टूट अगर, इसे पढ़ने के लिए आसान हो सकता है. और पुन: उपयोग करने की क्षमता. आप कोड का एक हिस्सा है, तो जा रहा है कि कहा जाता है या कई बार चलाने, बजाय कि कोड 10 बार नए सिरे से लिखना के अपने मुख्य समारोह में, तुम हो सकता है यह पुन: उपयोग करना चाहते हैं. और फिर हर बार आपको लगता है कि उपयोग करने की आवश्यकता कोड का टुकड़ा, समारोह कॉल. तो अब हम वापस खरोंच तक याद है, हम भी कुछ अवधारणाओं के बारे में बात की थी जिनमें से एक सूत्रण है. थ्रेड कई की अवधारणा है कोड के दृश्यों एक ही समय में क्रियान्वित. तब दाऊद था, जहां एक दिन के लिए वापस लगता है तुम लोगों की संख्या से दूर गिनती कमरे में लोग. मूलतः, क्या जा रहा था पर तुम लोगों की सब थे अलग धागे चल रहा है. और उन धागों को एक साथ आ रहे थे जवाब किसी तरह का पाने के लिए. इसी तरह, स्क्रैच में, आप जब है कई sprites, आप कर सकते हैं एक बिल्ली और एक कुत्ता है. और वे एक साथ होगा उनकी खुद की स्क्रिप्ट चला रहा है. यही सूत्रण का एक उदाहरण है. और दूसरी अवधारणा थी कि खरोंच में शुरू की घटनाओं था. और घटनाओं की जब कई हिस्से हैं अपने कोड एक दूसरे के साथ संवाद. आप का इस्तेमाल किया जब स्क्रैच में, यह था प्रसारण नियंत्रण और जब मैं ब्लॉक मिले. और यह भी, समस्या सेट 4 में, हमने देखा के रूप में अच्छी तरह की घटनाओं का एक छोटा सा. तुम लोग इस्तेमाल किया गया हो सकता है Gevent पुस्तकालय. और वहाँ एक समारोह था waitForClick जिसमें आप इंतजार कर रहे थे उपयोगकर्ता क्लिक करने के लिए. और अपने लिए क्लिक करें, इस मामले में, हो जाएगा क्लिक के लिए घटना और इंतजार आपकी है ईवेंट हैंडलर. और यह भी, अपने psets भर में चल रहा है और अपने psets पर काम कर रहा है, तो आप साथ संपर्क में आ सकता है इन आदेशों की कुछ. यह आप में टाइप क्या है आपकी टर्मिनल विंडो या जो कुछ भी खिड़की कि, के लिए अपनी जी संपादित करें पर पता चलता है अनिवार्य रूप से, अपने कंप्यूटर से नेविगेट. तो उदाहरण के लिए, लोकसभा सूचीबद्ध करता है एक निर्देशिका की सामग्री. निर्देशिका एक नया फ़ोल्डर बनाता बनाओ. सीडी, परिवर्तन निर्देशिका. आरएम, हटाने, एक फ़ाइल को हटाता है या कुछ निर्देशिका. और फिर निर्देशिका हटाने एक निर्देशिका हटा. दर्शक: [अश्राव्य]? स्पीकर 1: हाँ, ज़रूर. क्षमा करें, सवाल था कि आप अगर इस डालने का सुझाव होगा धोखा शीट पर. यह मदद कर सकता है. आप कमरा है, तो आप उस पर डाल सकते हैं. यह भी अभी काफी आम तौर पर अच्छा है आप इसका इस्तेमाल क्योंकि जब याद करने के लिए तुम चाहते हो सकता है अभी यह याद है. वह अपने जीवन को बहुत आसान बना देंगे. मैं आपके सवाल का जवाब? तो अब, हम एक छोटा सा बात की पुस्तकालयों के बारे में संक्षेप. लेकिन दो मुख्य वाले हम किया गया है कि अब तक पाठ्यक्रम में हैं का उपयोग मानक मैं / हे और CS50. चीज़ें किस तरह शामिल हैं मानक आई / ओ लाइब्रेरी में? हाँ, अब तक हम printf का उपयोग किया है. CS50 में, हम GetInt का उपयोग किया है और GetString. और डेटा प्रकार स्ट्रिंग भी होता है इस CS50 पुस्तकालय में घोषित किया जाना है. हम के बारे में गहराई में एक छोटे से अधिक बात करेंगे कैसे पुस्तकालयों काम करते हैं और कैसे वे अपने कोड के बाकी के साथ बातचीत. लेकिन उन दो मुख्य वाले हैं कि हम अब तक में साथ संपर्क में आ गए हैं बेशक. प्रकार. ये कितना याद करने के लिए अच्छा कर रहे हैं प्रत्येक प्रकार कैसे द्वारा या प्रतिनिधित्व किया है कई बाइट्स प्रकार के प्रत्येक requires-- पूर्णांक, 4 बाइट्स; चार, 1 बाइट. फ्लोट 4 बाइट्स है. एक डबल क्या है? दर्शक: [अश्राव्य]. स्पीकर 1: हाँ, तो एक नाव लेकिन आकार दोगुना. क्या एक लंबे समय के बारे में? दर्शक: [अश्राव्य]. स्पीकर 1: ठीक है. एक लंबे समय क्या है? दर्शक: [अश्राव्य]. स्पीकर 1: हाँ, एक पूर्णांक दोगुना. हाँ. दर्शक: [अश्राव्य]. स्पीकर 1: लंबे [अश्राव्य]. और फिर एक लंबे समय तक कि डबल है. दर्शक: नहीं, नहीं. एक लंबे समय तक सिर्फ एक पूर्णांक है. यह वास्तुकला पर निर्भर करता है पहले [अश्राव्य] और पूर्णांक में एक ही आकार है. [अश्राव्य]. स्पीकर 1: तो एक लंबे और एक पूर्णांक ही हैं. और फिर एक लंबे डबल पूर्णांक है. कूल. और फिर, पिछले प्रकार क्या है? दर्शक: सूचक. स्पीकर 1: हाँ, तो हम सीखा संकेत के बारे में एक छोटा सा. और चाहे एक सूचक है क्या की यह to-- ओर इशारा करते हुए एक चार सितारा हो सकता है या एक पूर्णांक star-- यह हमेशा एक संकेतक के लिए 4 बाइट्स है. उस के बारे में प्रश्न? हाँ? दर्शक: [अश्राव्य]? स्पीकर 1: तो एक लंबी और एक पूर्णांक हैं इस CS50 उपकरण में एक ही. दर्शक: उपकरण पूरी तरह से कर रहे हैं विनिमेय. स्पीकर 1: हाँ. तो फिर एक लंबी लंबी डबल एक पूर्णांक है. दर्शक: यह 32 बिट है? स्पीकर 1: 32 बिट, हाँ. दर्शक: तो [अश्राव्य]? स्पीकर 1: हाँ, अगर यह नहीं है स्पष्ट रूप से, आप कहते हैं एक 32 बिट मान लेना चाहिए. दर्शक: यह कुछ कहेंगे एक संभालने की तरह उपकरण की तरह वास्तुकला. 64 बिट, केवल बातों के लिए कि परिवर्तन चाहता है और संकेत दिए गए हैं. वे दोनों [अश्राव्य]. स्पीकर 1: हाँ? दर्शक: प्रश्न. अभ्यास परीक्षाएँ में से एक पर तो, यह एक अहस्ताक्षरित पूर्णांक के बारे में पूछता है. तो कैसे है कि निर्धारित किया जाएगा एक पूर्णांक [अश्राव्य] से? स्पीकर 1: एक अहस्ताक्षरित में भी 4 बाइट्स है. लेकिन एक हस्ताक्षरित बारे में अलग क्या है पूर्णांक और एक अहस्ताक्षरित int? दर्शक: [अश्राव्य]. स्पीकर 1: ठीक है. एक नकारात्मक मूल्यों का प्रतिनिधित्व कर सकते हैं. लेकिन कैसे यह है कि क्या करता है? दर्शक: [अश्राव्य]. स्पीकर 1: हाँ, यह 1 बचाता है बिट साइन प्रतिनिधित्व करने के लिए. हस्ताक्षर किए एक सा है कि साइन प्रतिनिधित्व करता है. और अहस्ताक्षरित सिर्फ सभी सकारात्मक है. दर्शक: ठीक है. तो तुम एक डबल का कहना है कि एक नाव के दो बार आकार? स्पीकर 1: डबल दो बार है एक नाव के आकार, हाँ. दर्शक: एक सूचक कैसे करता है एक करने के लिए लंबे [अश्राव्य]? स्पीकर 1: कैसे करता है तो सवाल यह है एक लंबे long-- के लिए सूचक कैसे है कि केवल चार बाइट्स जब है अपनी 8 बाइट्स एक लंबे. तो एक सूचक है क्या याद, अनिवार्य रूप से, बहुत आधार मूल्य पर. दर्शक: [अश्राव्य]. स्पीकर 1: हाँ, तो एक सूचक सिर्फ एक स्मृति स्थान है. तो यह कितना अंतरिक्ष फर्क नहीं पड़ता कि सूचक की ओर इशारा कर रहा है. यह केवल ट्रैक रखने के लिए 4 बाइट्स की जरूरत कि स्मृति स्थान की. कोई अन्य प्रश्न? कूल. तो आखिरी बात मैं है मानक उत्पादन है. आप उन्हें बार बार इस्तेमाल करना चाहिए आप याद कर सकते हैं कि बहुत हो गया. हम उपयोग लेकिन जब यह है printf, उदाहरण के लिए. और हम इन प्लेसहोल्डर है कि प्रारूप कोड कहा जाता था. तो पूर्णांक के लिए प्रतिशत ग चार, प्रतिशत मैं, और हम भी प्रतिशत डी का उपयोग कर सकते हैं. यह एक ही बात है. लेकिन, आम तौर पर, में CS50 हम प्रतिशत मैं उपयोग करने के लिए प्रयास करें. नाव के लिए प्रतिशत च. लंबे लंबे समय के लिए प्रतिशत एलडी और स्ट्रिंग के लिए प्रतिशत है. इसी तरह, हम कुछ प्रयोग कर रहे थे इन भागने दृश्यों की. उदाहरण के लिए, बैकस्लैश n के लिए नई लाइन के लिए. यह आपको स्वरूपण रहे हैं के लिए बस है प्रिंट च के लिए अपने कोड. हाँ? दर्शक: प्रतिशत घ किस लिए है? स्पीकर 1: तो सवाल प्रतिशत विकास के लिए क्या है? प्रतिशत डी ints के लिए है. प्रतिशत विकास तथा प्रतिशत मैं वही कर रहे हैं. दर्शक: के बीच क्या अंतर है बैकस्लैश n और बैकस्लैश आर? स्पीकर 1: तो सवाल यह है कि क्या है प्रतिक्रिया और एन के बीच अंतर प्रतिक्रिया आर? मैं बैकस्लैश आर लगता is-- दर्शक: तो बैकस्लैश आर बस का तात्पर्य लाइन की शुरुआत करने के लिए रिटर्न वास्तव में एक नई लाइन के लिए जा रहा बिना. तो तुम एक बैकस्लैश आर प्रिंट और आप अगर लाइन की शुरुआत करने के लिए वापस जाओ तो आप के ऊपर लिख, अधिक सामान प्रिंट पर पहले से ही है कि सामान [अश्राव्य]. जबकि, एन वास्तव में एक नया करने के लिए चला जाता है लाइन और [अश्राव्य] को जाता है. स्पीकर 1: ठीक है, कोई अन्य प्रश्न? ठीक है. मैं करने के लिए इसे बंद हाथ करने के लिए जा रहा हूँ जारी रहेगा जो दान. [वाहवाही] दान: सभी righty. तो मैं एक और व्यापक के बारे में बात कर सकता हूँ कर रहे हैं कि वर्ग से विचारों की श्रृंखला मोटे तौर पर दो सप्ताह के प्रतिनिधि और सप्ताह में तीन की शुरुआत से शुरू का सिर्फ एक रास्ता है जो कास्टिंग, के साथ एक खास प्रकार का एक मूल्य के रूप में इलाज एक अलग प्रकार के लिए मूल्य. तो हम करने के लिए घर का काम के साथ ऐसा कर सकते हैं ints, ints को तैरता है, और लंबे समय से चाहता दोगुना करने के लिए. इन सभी बातों के तरीके के रूप में इस्तेमाल किया जा सकता है कुछ न्यूमेरिक मूल्य के इलाज का कुछ अन्य के रूप में शून्य से चार न्यूमेरिक मूल्य. कुछ मुद्दों पर इस के साथ कर रहे हैं तो आप डाली जब आता है, जो जाहिर है, ints के लिए नाव की तरह बातें. तो यह थोड़ा अजीब है. हम 1.31 है कि एक नाव है. हम 10,000 से गुणा. और फिर हम एक पूर्णांक के रूप में इसे प्रिंट. इस उत्पादन में क्या करता है? 10,000 बार 1.31. तो 13,000, अनुमान है कि है? दर्शक: मैं यह 10,000 है. दान: तो मैं 10,000 से गुणा कर रहा हूँ मैं इसे कास्टिंग रहा हूँ से पहले. दर्शक: ओह. वहाँ एक 9 नहीं होगा और कुछ 0 संख्या? दान: तुम कुछ अजीब अंक हो सकता है. तो सही, यह 1.3 गुना 10,000 है. इसलिए कि 13,000 है. और इस अतिरिक्त weird-- दर्शक: 13,100. दान: 13,100. , रोब धन्यवाद. और इस अतिरिक्त weirdness-- इस 9,9-- बस इस कास्टिंग क्योंकि समाप्त हुआ नीचे जहां गोलाई यह नहीं होना चाहिए. हाँ. दर्शक: कास्टिंग होता है कुछ और बाद? दान: इसलिए क्योंकि मैं यह प्रिंट में है यह पहले इस गुणा करता है इस कास्टिंग करता है. दर्शक: [अश्राव्य]. दान: मुझे लगता है कि यह पहले देना होगा लगता है हाँ, 10,000 जो होगा. और कुछ? कूल. तो यह 13,099 है. ऐसा क्यों होता है? अस्पष्टता. तैरता सही नहीं हैं. वे केवल एक को संख्या का प्रतिनिधित्व कर सकते हैं महत्वपूर्ण आंकड़े की निश्चित संख्या. हम पर 8 हस्ताक्षर अंजीर प्रिंट आउट तो अगर इस नाव, हम एक तरह से मिलता है बदसूरत दिखने संख्या. और वह है क्योंकि 1.31 सही ढंग से नहीं कर सकते सरल द्वारा प्रतिनिधित्व किया मशीन में दो की शक्तियों. यह निकटतम लेने को समाप्त होता है तो जो समाप्त होता है, लगता है एक छोटे से कम किया जा रहा है. भावना करें? ठीक है. अब, स्विच का एक अलग तरीका है सशर्त बयान जहां सब कर हम एक एकल चर रहा है के बारे में परवाह है. तो इस विशेष उदाहरण में, हम कर रहे हैं उपयोगकर्ता से एक पूर्णांक हो रही है. और फिर हम देख रहे हैं कि पूर्णांक है क्या. मुमकिन है, यह नंबर एक और चार के बीच. यही कारण है कि हम के लिए पूछ रहे हैं. तो आप में से एक स्विच करना चर नाम. तो फिर तुम संभव के मामलों की स्थापना यह हो सकता है मूल्यों. तो एक मामला है, यह कम है कहना. और फिर तुम बाहर निकलना तोड़ स्विच हालत की तो तुम जा रहा रखने के लिए नहीं है. अगले case-- में इसलिए मामले में दो और मामले three-- यह मामला दो अगर यह सिर्फ करने के लिए नीचे चला जाता है इसके साथ के रूप में देखता कोड की पहली पंक्ति यह एक ब्रेक देखता है जब तक तीन मामले. तो कारण आप को मामले एक मिल केवल प्रिंट कम है क्योंकि मैं यहाँ इस तोड़ दिया है. मैं तो, कहते हैं, इस break-- नजरअंदाज कर दिया मैं इस breakaway-- फेंक दिया अगर यह कम प्रिंट होगा, और फिर यह होगा मध्य प्रिंट, और फिर यह टूट जाएगा. टूट के एक महत्वपूर्ण हिस्सा हैं तो की शर्तों को स्विच और वे वहाँ होना चाहिए. स्पष्ट रूप से कहा नहीं कर रहे हैं कि किसी भी मामले डिफ़ॉल्ट रूप से नियंत्रित किया जाता है और स्विच में मामला डाली जानी चाहिए. दर्शक: तो 1, 2, 3, और 4 N होगा? दान: n हो सकता है कि मूल्यों. हाँ. हाँ? दर्शक: तो तुम जब [अश्राव्य] कि? दान: तुम तो कम प्रिंट, और होता यह मध्यम प्रिंट, और होता फिर यह टूट जाएगा. दर्शक: क्यों यह प्रिंट होगा बीच अगर [अश्राव्य]? दान: एक मामले के तहत तो सब कुछ एक ब्रेक के अंतर्गत आती है पहले. इसलिए मामले एक प्रिंट के नीचे मामला है के रूप में एक यह निम्नलिखित प्रिंट है. हाँ? दर्शक: [अश्राव्य]? दान: तो यह संख्या सिर्फ एक विशेष है मूल्य कि इस चर ठीक है, ले जा सकते हैं? कि मतलब? हाँ. दर्शक: [अश्राव्य]? दान: हाँ, मामला दो प्रिंट होगा मध्यम और फिर टूट गया. दर्शक: [अश्राव्य]? Dan: मैं किसी भी लगता है? क्या अन्य डेटा प्रकार आप पर स्विच कर सकते हैं? दर्शक: आप बदल सकते हैं किसी भी डेटा से अधिक प्रकार के. लेकिन यह केवल घर का काम अधिक कुछ भी मतलब और ints और इस तरह से सामान, क्योंकि आप एक सूचक पर स्विच कर रहे हैं कि वास्तव में, मतलब नहीं है यह भी चलो, तो भार पर स्विच आप क्योंकि चल बिन्दु का ऐसा परिशुद्धता में, आप वास्तव में नहीं होता वैसे भी करना चाहते हैं. इसलिए बहुत ज्यादा, बस ints और लगता है कि जैसे घर का काम और सामान. दान: आप स्पष्ट है जब हाँ, यह बात है तुम्हें पता है मानों कि, मुझे लगता है, हो सकता है एक स्विच है कि वास्तव में उपयोगी है. अच्छा है? ठीक है. स्कोप एक घोषित कि सीमा है चर फैली हुई है. मेरे पास कोड के इस छोटे से हिस्सा में तो, यह त्रुटियों से भरा होगा. और कारण है कि मैं इस पूर्णांक घोषित किया जाता है मैं पाश के लिए इस के दायरे के भीतर. और फिर मैं उस संदर्भ की कोशिश कर रहा हूँ मैं पाश क्षेत्र के लिए उस के बाहर. तो बुनियादी तौर पर, आप गुंजाइश के बारे में सोच सकते हैं आप घोषणा कि कुछ के रूप में घुंघराले ब्रेसिज़ के एक सेट के अंदर के साथ ही उन घुंघराले ब्रेसिज़ के भीतर मौजूद है. और आप कोशिश करते हैं और कि चर का उपयोग करें उन घुंघराले ब्रेसिज़ के बाहर, तुम हूँ संकलक से कोई त्रुटि मिलती है. हाँ? दर्शक: तो यह एक काम नहीं करता है? दान: यह हाँ, काम नहीं करता है. स्ट्रिंग्स. स्ट्रिंग एक चार *. वे वही कर रहे हैं. वे सिर्फ पात्रों को संकेत दिए गए हैं. और आप हैं कि किसी भी तार समाप्त होना चाहिए बस जो बैकस्लैश शून्य, साथ एक सी कन्वेंशन. यह अशक्त टर्मिनेटर कहा जाता है. और NULL-- राजधानी एन, राजधानी यू, राजधानी एल, राजधानी L-- के रूप में ही नहीं है नल टर्मिनेटर. यह एक संकेत है. यह एक चरित्र है. वे बहुत अलग हैं. यह याद रखें. यह शायद, प्रश्नोत्तरी पर होगा. मैं प्रश्नोत्तरी नहीं देखा है. हाँ? दर्शक: तो नल सूचक है, कहते हैं, है ना? दान: हाँ. दर्शक: क्या [अश्राव्य] करता है? दान:, कहते हैं, malloc कहा जाता है जब आप प्राप्त करने के लिए पर्याप्त स्मृति नहीं है जो कुछ भी आप के लिए पूछ रहे हैं आकार, malloc नल वापसी करेंगे. एक समारोह में जब भी यह मूल रूप से है एक सूचक वापस करने के लिए माना जाता है, आप नल क्योंकि खिलाफ जांच की जरूरत नल एक सुंदर good-- है यह है, की तरह, कचरा मूल्य है. यह जहाँ तक संकेत दिए जाने के रूप में एक शून्य है. जब भी आप एक समारोह कॉल, कि एक सूचक देता है. आप होना जाँच करना चाहते करने जा रहे हैं कि सूचक नल नहीं है कि नल बहुत आम है. यह एक कचरा वापसी की तरह है. कुछ सही नहीं गया था तो, अगर बस के बजाय रिक्त वापसी. दर्शक: [अश्राव्य]? दान: हाँ, और कहा कि यह है. दर्शक: [अश्राव्य]? दान: इस रूप में यह जादू. यह अशक्त टर्मिनेटर है. यह छोटा अक्षर एन यू एल एल यदि है आप यह वर्तनी रहे हैं. दर्शक: और मैं बस चला गया पीठ और यह परीक्षण किया गया. और अगर आप एक चल बिन्दु डाल करने की कोशिश एक स्विच में मूल्य, यह तुम पर चिल्लाना हूँ कह, बयान अभिव्यक्ति की आवश्यकता पूर्णांक प्रकार की. दान: वहाँ तुम जाओ. लेकिन हाँ, प्रश्न फिर क्या था? दर्शक: [अश्राव्य]? दान: तो राजधानी एन, राजधानी यू, राजधानी एल, राजधानी एल एक वास्तविक सी बात है. यह शून्य सूचक है और होगा केवल इस तरह के रूप में व्यवहार किया. आप कभी कोशिश और जादू नहीं होगा रिक्त चरित्र और किसी भी देखते हैं इस के अलावा अन्य तरीका है. हाँ? दर्शक: तो अधिकतम चार लौटने या नोट में कुछ है, यह होगा एक ही समारोह में अवतार लेना [अश्राव्य] के रूप में? दर्शक: तो आप की बात कर रहे हैं getchar से चार अधिकतम लौटने, या जो कुछ भी यह है? दर्शक: हाँ. दर्शक: हाँ, सामान्य तो उन सभी बातों के लिए अवधि प्रहरी मान रहे हैं. तो GetInt से पूर्णांक अधिकतम लौटने की तरह और getchar से चार मैक्स, यह है अगर, सब ठीक है, की तरह होना चाहिए इन बातों को, हमारे लिए लौट रहे हैं कुछ गलत हो गया. संकेत के लिए, हम बस के लिए होता है इस प्रहरी मूल्य कि हर कोई पर सहमत हैं. और यह आपके लौटने की बात है कोई बात बिगड़ जाए जब. तो चार अधिकतम हम प्रयोग कर रहे हैं क्या है कुछ का प्रतिनिधित्व करने के लिए अशक्त या getchar की तरह. दर्शक: आप getchar का परीक्षण कर रहे हैं तो, तुम सिर्फ रिक्त डाल सकता है? कि एक फर्क होता? दान: तुम सिर्फ रिक्त जाँच नहीं कर सका. आप क्योंकि चार मैक्स की जांच करने के लिए होगा समारोह से वापसी मान है एक चरित्र नहीं एक सूचक. हाँ? दर्शक: इस सवाल पूछता है स्ट्रिंग की लंबाई के लिए. रिक्त चरित्र शामिल करता है? दान: नहीं और वह कैसे स्ट्रिंग लंबाई वास्तव में है इसके माध्यम से चला जाता है क्योंकि रोकने के लिए जानता है वर्ण के अपने सरणी तक यह एक रिक्त चरित्र देखता है. और फिर यह सब की तरह है, ठीक है, मैं काम कर रहा हूँ. दर्शक: [अश्राव्य] पाँच? दान: हैलो पाँच होगा. हां. तो सरणियों लगातार कर रहे हैं स्मृति के ब्लॉक. वे कह कर तुरंत उपयोग कर सकते है घुंघराले में, सरणी का नाम और उसके बाद आप जाना चाहते हैं जो कुछ भी सूचकांक ब्रेसिज़, , वे के माध्यम से शून्य से अनुक्रमित रहे हैं करने के लिए 1 शून्य से सरणी की लंबाई. और वे के प्रकार से घोषित कर रहे हैं आप में भंडारण कर रहे हैं कि बात सरणी, सरणी के नाम, और उसके बाद जो आकार है कि सरणी की है. तो इस लंबाई का एक चार सरणी है इन मूल्यों है कि छह. हाँ? दर्शक: [अश्राव्य]? दान: हाँ. दर्शक: [अश्राव्य]? दान: तुम क्या हो रहा है है सरणी में पहले से ही बनाया है. तो आप के बजाय यह निर्दिष्ट कर सकता है, के रूप में का कहना है कि, चार, जो कुछ नाम आपके सरणी खाली कोष्ठक घुंघराले बराबर होती है, एच अल्पविराम ई अल्पविराम एल अल्पविराम एल अल्पविराम ब्रेस हे अल्पविराम रिक्त चरित्र और घुंघराले ब्रेस. वह भी एक घोषणा के रूप में काम करेगा. दर्शक: [अश्राव्य]? दान: फिर आप की जरूरत है आकार पहले से ही बनाया है. दर्शक: [अश्राव्य]? दान: हाँ. सभी righty. कमांड लाइन तर्क का एक तरीका है उपयोगकर्ता के रूप से निवेश हो रहा मुख्य तर्क. मुख्य दो तर्क लेता है. जा रहा है कि तर्क की संख्या आदेश पंक्ति और एक साथ पारित स्ट्रिंग वेक्टर या एक स्ट्रिंग सरणी तर्कों का सभी का. इसलिए मुझे लगता है, कहते हैं, इस तरह के रूप में एक समारोह में कहा कि अगर 1 अंतरिक्ष, 2 अंतरिक्ष, तीन बाहर एक बिंदी, argc 4 होगा. और argv 0 बाहर एक डॉट होगा. Argv1 1 होगा. argv2 2 argv3 होगा होगा 3, कि विशेष मामले में. हाँ? दर्शक: [अश्राव्य]? दान: सरणी में पिछले तत्व सरणी लंबाई argc है क्योंकि प्लस ARGB में से एक, पिछले तत्व नल सूचक है. यह argc प्लस 1 है. मैं सिर्फ यह कहा कि मामले में तो 0 argv जाएगी बाहर एक डॉट है. argv 1 1 argv2 3 3 2 argv है. एक बड़ा है जो argv 4, argc से रिक्त हो जाएगा. और वह नल सूचक है. हाँ. स्ट्रिंग है क्योंकि और वह है एक चार सितारा एक सूचक है. तो यह एक ही प्रकार हो गया है. हाँ? दर्शक: दो सवाल. एक तो, अंतर के बीच क्या है एक प्रकार से अन्य यह और GetString उपयोगकर्ता इंजन में? और दो, यह भीतर संग्रहीत किया जाता है अपनी हाल की स्मृति? तो इस तरह के GetString होगा [अश्राव्य] हो? दान: जहाँ यह संग्रहीत किया जाता है? यह संग्रह किया गया है, जहां मैं नहीं जानता. दर्शक: तो, वास्तव में, आप कैसे किसी भी पता आप यह तर्क है कॉल समारोह ढेर में जमा हो जाती है? तो argc और argv तर्क मुख्य करने के लिए कर रहे हैं और वे ढेर पर हैं, या वास्तव में बस के रूप में आप क्या सोचते हैं ऊपर ढेर की शुरुआत. अन्य हिस्सा क्या था प्रश्न का? दर्शक: तो क्या [अश्राव्य]? दान: हाँ, यह सिर्फ एक अलग तरीका है के उपयोगकर्ता से इनपुट हो रही है. यह एक थोड़ा और अधिक कुशल और यह स्क्रिप्ट के लिए handier है क्योंकि आप बस अपने मुख्य तर्क पारित कर सकते हैं समारोह बल्कि प्रतीक्षा करने के लिए होने से उपयोगकर्ताओं के लिए आप किसी भी उपयोगकर्ताओं को नहीं है. दर्शक: और हाँ, तार मिल [अश्राव्य] होगा. यह आप की जरूरत के सामान की दुकान होगी. दान: हाँ? दर्शक: [अश्राव्य]? दान: हाँ, argv 0 हमेशा शामिल डॉट समारोह कॉल के स्लेश. हाँ? दर्शक: [अश्राव्य]? दान: हाँ, तर्कों के प्रत्येक रहे हैं रिक्त चरित्र में समाप्त हो गया है क्योंकि वे तार कर रहे हैं. दर्शक: [अश्राव्य]? दान: हाँ, argv argc एक शून्य सूचक है. दर्शक: [अश्राव्य]? दान: ओह, हाँ. हाँ, माफ करना. दर्शक: तो [अश्राव्य]? दान: तुम था अगर सवाल है तो कमांड लाइन डॉट, 2, 1 बाहर एक डॉट स्लेश होता कमांड लाइन की संख्या तर्क दो हो या यह तीन हो सकता है? दर्शक: मैं यह नहीं करता है लगता है सच बात. मैं ओह, आप पारित नहीं किया था, कहने के लिए करते हैं जब किसी भी कमांड लाइन तर्क, जाहिर है, आप समारोह में कहा. इसलिए मैं शब्दो में बाहर करने के लिए करते हैं कमांड लाइन से समारोह यह भले ही तर्क argv में शामिल थे. दान: लेकिन यह test-- पर था yeah-- और भी आप कुछ कहना अगर argc 3 बराबर होती है जैसे, आप सुरक्षित खड़े रहे. हाँ? दर्शक: [अश्राव्य]? Dan: मैं तो बजाय इस फोन के बारे में सोच argc और स्ट्रिंग argv कोष्ठक में लेकिन एक ही प्रकार रखा और अभी फोन एक तरह अलग उन्हें कुछ और बी, यह अभी भी काम करेगा? और यह अभी भी काम करेगा, आप just-- होगा बजाय argc-- का उपयोग करने का आप ए और बी का उपयोग होता. हाँ? दर्शक: [अश्राव्य]? दान: तो सवाल GetString है ढेर में स्मृति की दुकान के लिए जा रहा GetString चार है क्योंकि *. यह क्योंकि ढेर में स्मृति भंडार वास्तविक भीतर अब malloc कॉल GetString का कार्यान्वयन. ठीक है, पर चलती है. सुरक्षा. इसलिए सही मायने में सुरक्षित होने के लिए, यदि आप कोई पर भरोसा एक और आप किसी को कोई भी उपयोग की अनुमति आपकी जानकारी के जो क्यों है हर कोई अपने ही मशीनों बनाता है अपने खुद के ऑपरेटिंग सिस्टम, अपने सभी खरोंच से कार्यक्रम, और जाहिर है किसी भी अन्य मशीनों से कनेक्ट नहीं है इंटरनेट के माध्यम से. तो कंप्यूटर असुरक्षित हैं. वे वास्तव में हैं. हम अन्य लोगों पर भरोसा करना होगा. और सुरक्षा के विचार आप कर रहे हैं वह यह है कि की राशि को सीमित करने की कोशिश कर रहा जरूरत है कि आप पर भरोसा है. और इसका मतलब है की एक तुम हो कि क्रिप्टोग्राफी के माध्यम से है. क्रिप्टोग्राफी, अनिवार्य रूप से, है हम रहस्य है. कभी कभी हम अपने रहस्यों को पारित करने के लिए है साथ के माध्यम से, कहते हैं, इंटरनेट या अन्य बातों के. और हम लोग नहीं चाहते हैं इन रहस्यों को जानने के लिए. इसलिए हम एक रास्ता में हमारे रहस्यों को एनक्रिप्ट कि हम कोई भी समझ सकता है उम्मीद है. इसलिए हम used-- इस class-- के पाठ्यक्रम के माध्यम से सीज़र सिफर तरह बातें और दोनों बहुत, बहुत हैं जो [अश्राव्य], बातें encrypting के असुरक्षित तरीके. वे यह पता लगाने के लिए आसान कर रहे हैं क्या वे कर रहे हैं और अपने रहस्य क्या हैं. असली दुनिया और अधिक का उपयोग करता है जटिल एन्क्रिप्शन योजनाओं. और हम में नहीं मिलेगा कि अधिक से अधिक. डिबगिंग. GDB सबसे अच्छा है. मैं फिर से इस तनाव के लिए जा रहा हूँ. GDB हर समय हर प्रयोग करें समय आप एक समस्या है. GDB में उपयोगी होते हैं कि कमानों हैं आप एक पंक्ति या तो पारित, जो तोड़ नंबर एक समारोह का नाम अनिवार्य रूप से जहां अपने कोड में आप बंद करना चाहते हैं, और नियंत्रण लेने में सक्षम हो. प्रिंट एक चर लेता है और बाहर प्रिंट कि चर उस पर जो भी है अपने निष्पादन में बिंदु. अगले अपने निष्पादन चालें एक कदम के साथ. और एक समारोह के अंदर कदम कदम अपने निष्पादन में. अन्य चीजें कैसे है जो, चलाए जा रहे हैं आप वास्तव में अपने कोड चलाते हैं. जारी रखें सभी आवश्यक कदम उठा लेता है अगले ब्रेक के बात करने के लिए. और बहुत से, वहाँ कई अन्य हैं. उन्हें देखो. वे महान हैं. हाँ? दर्शक: [अश्राव्य]? दान: हाँ, एक डिबगर है. तो एक डिबगर एक प्रोग्राम है कि यदि आप अपने कार्यक्रम डिबग करने देता है. इसके लिए कीड़े पाता है कि एक कार्यक्रम नहीं है आप, हालांकि यह बहुत अच्छा होगा. और खोज मेरे लिए पिछले है. हम बात है कि खोज के प्रकार तो इस वर्ग में के बारे में रैखिक खोज रहे हैं, जो आप प्रत्येक के माध्यम से देखो कि बस है खोज अंतरिक्ष के तत्व, एक एक समय पर तत्व, आपको क्या लगता है, जब तक आप के लिए या आप जब तक देख रहे हैं अपनी खोज को अंतरिक्ष के अंत जिस पर क्या आप नहीं मिल सकता है का कहना है कि बिंदु आप के लिए देख रहे थे कि तत्व. और यह, पर सबसे अच्छा निरंतर समय लगता है जो 1 से 0 और सबसे खराब रैखिक पर n के 0 है जो समय,. जरूरत है जो द्विआधारी खोज, घिनौना तत्वों. आप अपने तत्वों के बीच में जाना है, देखते हैं अगर आप के लिए देख रहे हैं तत्व तत्व से भी बड़ा या छोटा होता है आप बीच में कर रहे हैं कि. यह बड़ा है, आप नीचे का कहना है कि अपनी खोज के अंतरिक्ष अपनी है वर्तमान स्थान, मध्य, और आप इस प्रक्रिया को पुनः आरंभ. यह छोटा है, तो आप कहते हैं कि देखो हाँ, क्या बात है the-- कि? दर्शक: [अश्राव्य]? दान: हाँ. में सिखाया गया है कि तरह के किसी भी तरह कक्षा की परीक्षा के लिए निष्पक्ष खेल है. [हंसी] दान: और तुम नहीं किया है कि तथ्य एक समस्या सेट के लिए यह करने के लिए, यह उचित है परीक्षण के लिए खेल. दर्शक: हम इस पर कैसे जा सकते हैं to-- दान: यह खत्म हो गया होगा. अध्यक्ष 2: के लिए वास्तविक कोड [अश्राव्य] study.cs50.net पर है. आप अभ्यास समस्या को देखो तो के मर्ज क्रमबद्ध पेज में study.cs50.net, कोड नहीं है क्रमबद्ध विलय को लागू करने के लिए. तो आप को लागू करने की जरूरत नहीं है यह अपने आप को आज रात. लेकिन यकीन है कि आप बल्कि यह समझ कर से बस यह याद रखना. दर्शक: [अश्राव्य]? अध्यक्ष 2: पर मर्ज क्रमबद्ध पेज study.cs50.net, एक अभ्यास है आप के माध्यम से क्लिक करते हैं कि, समस्या समस्या, बहुत अंत में वहाँ एक मर्ज है जो समाधान, क्रमबद्ध कार्यान्वयन. लेकिन यकीन है कि आप इसे समझते हैं बल्कि सिर्फ यह याद रखना से या यह नीचे नकल. दर्शक: और एक पूरी तरह से वैध परीक्षा के लिए समस्या होगी यहाँ की तरह कुछ एक सूची है. इस सूची के बाद की तरह दिखता है क्या चयन की तरह एक कदम या सम्मिलन सॉर्ट या जो भी हो. सूची में से एक पूर्ण चलना. आप की जरूरत के अंत नहीं है तो भी अगर इसके लिए कोड, आपको यह समझने की जरूरत है यह कैसे हो रहा है पता करने के लिए पर्याप्त इस सरणी संशोधित किया जाना है. दान: कि मेरे लिए यह बात है. [वाहवाही] लुकास: हे सब लोग. मेरा नाम लुकास है. मैं सभी, प्रत्यावर्तन के बारे में बात करने जा रहा हूँ हमने सीखा है कि प्रकार, और एक सभी संकेत का छोटा सा. ठीक है? तो सब से पहले, प्रत्यावर्तन. यह कहना है कि क्या मतलब है एक समारोह पुनरावर्ती है? दर्शक: कहते हैं. लुकास: ठीक है, हाँ, खुद कहता है. तो उदाहरण के लिए इस तस्वीर की तरह. यह अंदर की तस्वीर की तरह है एक तस्वीर के और इतने पर. तो उदाहरण के लिए, आप दान के रूप में have-- कर सकते हैं कि द्विआधारी खोज के बारे में बात कर रहा था. एक तरह से जो में द्विआधारी खोज है पुनरावर्ती आप कर रहे हैं कि तथ्य यह है एक संख्या को खोजने की कोशिश. तो आप बीच में चलते हैं. वहाँ संख्या तो आप जाँच बाईं और सही में. और फिर आप नंबर पता लगाने अगर बाईं तरफ होने जा रहा है, यह ऐसा ही है फिर से खोज कर के रूप में बात लेकिन बस सूची के बाईं तरफ. यह कैसे लगता तो है कि जैसे यह पुनरावर्ती है. तुम लोग पुनरावर्ती है तो इसलिए मर्ज प्रकार के लिए समाधान. ठीक है, तो यहाँ एक उदाहरण है. तो चलो मैं चयन करना चाहते हैं कि हम कहते हैं 1 से n करने के लिए सभी नंबरों. मैं महसूस कर सकते हैं कि n का योग संख्या n प्लस n शून्य से 1 1 पर निर्भर है. लेकिन फिर, मैं n शून्य से 1 पर नजर डालें तो प्लस n शून्य से 2 प्लस 1, कि एक ही है संक्षेप संख्या के रूप में बात n करने के लिए शून्य से 1 अप. तो मैं एक समान राशि की राशि कह सकता n शून्य से 1 के एन प्लस राशि के बराबर होती है. कि मतलब? और मैं भी कुछ और होता है, जो कि बेस मामले बुलाया ऊपर संख्याओं का योग शून्य पर शून्य होगा. इसलिए जैसे ही मैं नंबर करने के लिए मिल के रूप में शून्य, मैं गिनती करना बंद करो. कि मतलब? तो यहाँ का एक उदाहरण है मुझे लगता है कि लागू कर सकते हैं. इसलिए मैं कुछ में यह कार्य किया है. कि एक पूर्णांक n लेता है. N है अगर तो यहाँ मैं पहले की जांच कम या शून्य के बराबर होती है. तो यह शून्य करने के लिए कम या बराबर है तो मैं हमारे आधार मामला है, जो शून्य वापसी. अन्यथा, मैं अभी वापस कर सकते हैं n प्लस संख्याओं का योग से n शून्य से एक के लिए एक. भावना करें? ठीक है. तो यहाँ यह कैसा लग रहा है. आप 2 से बराबर की राशि 2 प्लस 1 का योग. और 1 के कुछ प्लस 1 है 0 जो 0 की राशि,. भावना करें? हम के ढेर पर लगता है तो आपके कार्यक्रम, यह यह कैसा लग रहा है. सबसे पहले, हम मुख्य समारोह है. और फिर मुख्य समारोह राशि 2 कहा जाता है. और फिर राशि 2 ओह, कहने के लिए जा रहा है, राशि 2 2 प्लस एक की राशि के बराबर होती है. तो मैं ढेर करने के लिए 1 का योग जोड़ें. और 1 का योग का योग कॉल करने के लिए जा रहा है 0, जो भी जोड़ा जा रहा है ढेर करने के लिए. और कर रहे हैं कि इन लोगों में से तो प्रत्येक दूसरे के शीर्ष पर वापस जाने के लिए है अन्य लोगों के लिए जा रहा रख सकते हैं पहले. तो उदाहरण के लिए, यहाँ, 0 की राशि, पहला, 0 वापसी करने जा रही है. और फिर 1 की राशि का चयन करें. फिर 1 का योग करने जा रहा है 2 की राशि के 1 वापसी. और अंत में, 2 का योग चल रहा है मुख्य करने के लिए 3 लौटने के लिए. कि मतलब? यह समझने के लिए कैसे वास्तव में महत्वपूर्ण है ढेर और काम कर करने की कोशिश कर रहा है यह समझ में आता है देखते हैं. ठीक है, तो छँटाई. तो क्यों, महत्वपूर्ण छँटाई है सब से पहले? हम क्यों परवाह करूँ? कोई है? मुझे एक उदाहरण दे? हाँ? दर्शक: [अश्राव्य]. लुकास: ठीक है, हाँ. तो आप और अधिक कुशलता से खोज सकते हैं. यह एक अच्छा तरीका है. तो, उदाहरण के लिए, हम एक बहुत की है बातें, वास्तव में हमारे जीवन कि क्रमबद्ध हैं. उदाहरण के लिए, जानने के लिए. यह सब करने के लिए बहुत महत्वपूर्ण है आदेश में किसी तरह का शब्द है कि हम आसानी से उपयोग कर सकते हैं. इसलिए कि वह क्या कह रहा था है. आप और अधिक कुशलता से खोज सकते हैं. यह एक के लिए किया जाएगा कितना मुश्किल के बारे में सोचो शब्द हैं जिसमें शब्दकोश यादृच्छिक क्रम. आप बहुत ज्यादा, पर देखने के लिए होगा हर एक शब्द जब तक आप पाते आप देख रहे हैं कि शब्द. आप भी फेसबुक का उपयोग कर रहे हैं, जब आप अपने दोस्तों को देख रहे हैं, आप कर रहे हैं फेसबुक डाल कि देखने जा अपने करीब दोस्त के शीर्ष पर है आप ज्यादा है कि बात नहीं है कि. आप की तह तक सभी तरह जाओ अपने दोस्त की सूची, तुम को देखने के लिए जा रहे हैं आप शायद यह भी नहीं है कि लोग आप दोस्तों के साथ कर रहे हैं कि याद है. और कहा कि फेसबुक प्रकार है क्योंकि कैसे के आधार पर अपने मित्रों को आप उन्हें हैं बंद. तो डेटा के आयोजन. इसके अलावा नि. तो आप सभी Pokemons देखते हैं कि नंबर हैं. और कहा कि एक आसान की तरह है डेटा तक पहुँचने का रास्ता. दर्शक: नि पहुँचने. लुकास: हाँ. दर्शक: [अश्राव्य]. लुकास: हाँ. ठीक है, तो चयन क्रमबद्ध. चुनाव में क्रमबद्ध चयन करने के लिए जा रहा है एक सूची में सबसे छोटी unsorted मूल्य प्रत्येक प्रत्येक यात्रा में समय. यह एक तरह से है कि आप प्रकार की तरह है आपके सिर में आप करने की कोशिश कर रहे हैं जब हाथ पर एक सूची तरह. असल में, तुम सब तुम देखो है सबसे छोटी संख्या के लिए. आप हल सूची में डाल दिया. और फिर आप के लिए देखो अगले सबसे छोटी संख्या. और फिर तुम क्या कर रखना कि और इतने पर. इसलिए चयन क्रमबद्ध आप मूल रूप से है हर समय छोटी से छोटी चयन unsorted मूल्य. क्रमबद्ध के अंत में रखो सूची का हिस्सा है. और वह कर रखना. तो चलो जल्दी से देखते हैं क्या इस तरह दिखता है. तो यहाँ हल और unsorted सूची. सूची के अनुसार क्रमबद्ध के लिए तो, यह शुरू में खाली है. और फिर मैं चयन करने के लिए जा रहा हूँ 2 जो यहाँ सबसे छोटी संख्या,. तो मैं नंबर 2 हो और मैं डाल सूची के सामने. और फिर मैं अगले छोटी से छोटी के लिए देखो 3 जो तत्व,. तो मैं अंत में यह डाल क्रमबद्ध सूची की. और फिर मुझे लगता है कि कर रखना. मैं 4 पाते और अंत में डाल दिया. 5 ढूँढें और अंत में डाल दिया. और उस समय की कैसे सब पर देखने के लिए कि मैं अंत है पर इसे डाल कह रहा हूँ असल में, दो मानों गमागमन. ठीक है? और फिर आखरी तुम बस एक और तत्व है. तो यह पहले से ही हल है. ठीक है, तो प्रविष्टि तरह. निवेशन तरह आप भी लिए जा रहे हैं एक हल होने की बात और एक unsorted सूची. केवल बात यह है कि हर बार कि आप हल करने के लिए एक तत्व जोड़ रहे हैं सूची, तुम सिर्फ तत्व उठा कि unsorted सूची के सामने है. और फिर तुम क्या खोजने के लिए जा रहे हैं स्थिति यह हल में होना चाहिए सूची का हिस्सा है. चलो यह तो है देखते हैं क्या यह और अधिक समझ में आता है. इसलिए शुरू में, उदाहरण के लिए, मैं कोशिश कर रहा हूँ में तीन नंबर डालने के लिए सूची का हल हिस्सा. तो सूची में कुछ भी नहीं है. तो मैं बस संख्या 3 डाल सकते हैं. अब, मैं करने के लिए 5 नंबर जोड़ना चाहते हैं सूची का हल हिस्सा. तो मैं नंबर 5 पर दिखेगा. मैं इसे 3 से अधिक है कि नोटिस. इसलिए मैं इसे 3 के बाद हो गया है कि पता है. तो मैं 3 और 5 डाल दिया. तब मैं नंबर 2 सम्मिलित करना चाहते हैं. मैं नंबर 2 वास्तव में है कि नोटिस फिर 3 और 5 दोनों पिछले. इसलिए मैं वास्तव में यह सब डाल दिया है सूची की शुरुआत में जिस तरह से. इसलिए मुझे लगता है, एक तरह से, सभी शिफ्ट करने के लिए है क्रमबद्ध सूची तो मैं कर सकता हूँ में तत्वों संख्या 2 के लिए जगह बनाने. तब मैं नंबर 6 को देखें. मैं इसे 5 के बाद होना चाहिए कि देखते हैं. तो मैं वहाँ रख दिया. और अंत में, मैं नंबर 4 पर दिखेगा. और मैं यह चाहिए नोटिस 3 और 5 के बीच हो. और फिर मैं वहाँ रखा और पारी अन्य सभी तत्वों. भावना करें? बुलबुला तरह. इसलिए बुलबुला तरह आप क्या कर रहे हैं मूल रूप से है जा रहा है कि हम बुलबुले इसे कहते do-- को आप list-- के माध्यम से जाना क्रमबद्ध क्योंकि मैं सिर्फ दिखाने अगर यह वास्तव में बेहतर है आप this-- पसंद और आप की तुलना करने के लिए जा रहे हैं आसन्न संख्या. और तुम स्वैप करने के लिए जा रहे हैं उनके पदों वे नहीं कर रहे हैं सही क्रम में. तो बुनियादी तौर पर, के लिए क्या हो रहा है यहाँ है हो सकता है, उदाहरण के लिए, आप 8 और 6 है. आपको लगता है कि हल आदेश होगा पता वास्तव में सही 6 और 5, हो सकता है? तो आप आदेश स्वैप करने के लिए जा रहे हैं. तब मैं यहां 8 और 4 देखें. और मैं एक ही बात करते हैं. मैं फिर से स्वैप. और अंत में, 2 और 8. मैं भी उन्हें स्वैप. यह बुलबुला तरह क्योंकि बाद कहा जाता है इन पुनरावृत्तियों में से प्रत्येक, वास्तव में, सूची में सबसे बड़ी संख्या सब हो जाता है सूची के अंत में जिस तरह से. कि मतलब? यह यह गमागमन रहता है क्योंकि और सही करने के लिए यह चलती. ठीक है, तो यह दूसरी यात्रा है. यह एक ही बात होगी. मैं एक स्वैप करता हूँ और तो आखरी. कोई स्वैप कर रहे हैं मुझे लगता है कि और सूची हल है. बुलबुला प्रकार में तो, हम मूल रूप से रखना सूची के माध्यम से जा रहा है और गमागमन बातें मैं मैं नहीं किया है कि सूचना तक कि चलना कर किसी भी स्वैप, जो सूची में पहले से ही हल है कि इसका मतलब है. भावना करें? का एक छोटा सा बात करते हैं समय चल रहा है के बारे में. तो तुम लोग बिग याद है हे, ओमेगा, और थीटा? हाँ? ठीक है, बड़ी हे सब से पहले, क्या है? दर्शक: [अश्राव्य]. लुकास: हाँ, यह एक सबसे खराब स्थिति कहा जाता है सिर्फ यह है कि इसका मतलब है जो देखने का समय, आप कितना कार्यक्रम की उम्मीद चलाने के लिए लेने के लिए. जैसे, मामले में of-- इस case-- एन में. में तत्वों की संख्या सबसे खराब स्थिति में सूची. जैसे, सबसे ज्यादा संभव मामले में. बुलबुला प्रकार के लिए तो, उदाहरण के लिए, हम n वर्ग की बड़ी हे है. हम क्यों कि क्या करना है? क्यों बुलबुला बड़ी हे n वर्ग तरह है? दर्शक: [अश्राव्य]. लुकास: हाँ, तो सबसे ज्यादा मामले हो जाएगा कि मैं n पुनरावृत्तियों करना होगा. तो पुनरावृत्तियों में से प्रत्येक के लिए जा रहा है अंत करने के लिए सबसे बड़ा तत्व लाना सूची की. तो सबसे खराब स्थिति है कि मैं है बात यह है कि एन बार ऐसा करने के लिए. और उस समय से प्रत्येक के लिए, मैं करने के लिए है मैं तुलना करने के लिए है क्योंकि n स्वैप करना प्रत्येक दो तत्वों. यह n चुकता है तो इसलिए यह एन बार पता है क्योंकि. फिर, चयन क्रमबद्ध भी n वर्ग है क्योंकि, प्रत्येक यात्रा के लिए, मैं करने के लिए है हर एक तत्व को देखो सूची में. और फिर, सबसे छोटा लगता है जो मैं करने के लिए इसका मतलब है कि n तत्वों के माध्यम से देखो. और मैं ऐसा इसलिए है क्योंकि एन बार क्या करना है मैं सब n तत्वों का चयन किया है. एक प्रविष्टि सॉर्ट भी n वर्ग है सबसे बुरी स्थिति होगी क्योंकि , एक हो, मैं डालने के लिए है n संख्या, है ना? तो मैं पहले से ही मैं जा रहा हूँ कि पता n पुनरावृत्तियों है. लेकिन मैं था उन लोगों की संख्या में से प्रत्येक के लिए, अगर संख्या के सभी को देखने के लिए क्रमबद्ध सूची और यह सभी तरह से रखा सामने, कि n वर्ग होगा यह एन बार n फिर से हो जाएगा. भावना करें? क्या ओमेगा के बारे में? दर्शक: [अश्राव्य]. लुकास: यह सबसे अच्छी स्थिति है. इसलिए यह समय की एक बहुत कुछ के लिए में, की तरह है सबसे अच्छी स्थिति है, छँटाई सूची में पहले से ही हल है जब. तो आप वास्तव में नहीं है कुछ भी करने को. बुलबुला तरह सबसे अच्छा है n की स्थिति. तुम लोगों को पता है क्यों? दर्शक: [अश्राव्य]. लुकास: हाँ, आप का ट्रैक रखने डेटा राशन किसी भी स्वैप था कि क्या है या आप कुछ है नहीं, करने के लिए सेट की तरह एक चलना अगर वहाँ था, अगर सच सूची में पहले से ही, मूल रूप से, हल है क्या होने जा रहा है मैं जा रहा हूँ है प्रत्येक दो स्वैप करने के लिए कोशिश आसन्न तत्वों. मुझे लगता है कि देखने के लिए जा रहा हूँ कोई स्वैप कर रहे हैं. और मैं सिर्फ सही दूर वापस. तो यह है कि मैं बस के लिए किया था कि इसका मतलब सूची एक समय के माध्यम से जाना. मैं देखने के लिए क्योंकि तो यह n है n तत्वों पर. क्यों चयन क्रमबद्ध n वर्ग? हाँ, सूची हल है, भले के लिए चयन की तरह हर चलना, मैं न्यूनतम तत्व का चयन किया है. इसलिए कि मैं देखने के लिए बाहर का मतलब है कि unsorted में सभी तत्वों पर सूची और न्यूनतम लगता है प्रत्येक यात्रा के लिए. कि मतलब? और सम्मिलन तलवार में, क्योंकि n है मैं डालने की कोशिश कर रहा हूँ कि मामला संख्या और संख्या के सभी, जब मैं उन्हें सम्मिलित करने का प्रयास, मुझे लगता है वे देखते हैं कि सही स्थिति में हैं. मैं अन्य सभी की जांच जाने की जरूरत नहीं है unsorted सूची में संख्या. यह n हो जाएगा तो इसलिए. भावना करें? और थीटा क्या है? दर्शक: [अश्राव्य]. लुकास: क्या, माफ करना? फिर से कहो. दर्शक: [अश्राव्य]. लुकास: बिल्कुल. तो आपको लगता है कि केवल चयन देख सकते हैं मर्ज में संग्रहीत क्रमबद्ध thetas है. आप केवल थीटा है क्योंकि और वह है बड़ी हे और ओमेगा दोनों एक ही हैं. ठीक है. और अंत में, लॉग n में तरह है विलय. दान कह रहा था के रूप में और फिर,, की तरह मिलाएं तरह का एक ही तरीका है की तरह है कि आप द्विआधारी खोज करते हैं. तो आप सूची मिलता है. और तुम आधे में कटौती करने जा रहे हैं. और फिर तुम उन्हें कटौती छोटे हिस्सों में. और तब आप उन्हें मर्ज. तुम लोग सही, याद है कि? ठीक है, वह कह रहा था. ठीक है, संकेत. तो एक सूचक क्या है? दर्शक: [अश्राव्य]. लुकास: एक पते. ठीक है. मैं दाऊद का एक गुच्छा से पता चलता है कि पता Binky के वीडियो और बातें इशारा कर एक दूसरे को. लेकिन मैं संकेत के बारे में सोचना पसंद केवल एक पते के रूप में. तो यह जा रहा है कि एक चर है एक पते संग्रहीत करने के लिए. तो यह सिर्फ इस विशेष चर है कि चार बाइट्स लंबा है. कुछ भी करने के लिए कि सूचक है, याद रखें हमारे 32 बिट के लिए लंबे समय से हमेशा चार बाइट्स मशीन के मामले के साथ तो उपकरण. और यह सिर्फ स्थान है इसके अंदर एक चर की. ठीक है, तो बुनियादी तौर पर, इस स्मृति नहीं है. तो स्मृति के प्रत्येक ब्लॉक वास्तव में है एक का पता है जो लेबल, slotty स्मृति. इसलिए कि मैं हो सकता है कि इसका मतलब है के लिए एक संकेत इशारा इन पतों की किसी भी. इसलिए हम संकेत का उपयोग करेंगे कारण है मैं स्थान याद है अगर कि एक विशिष्ट चर एक स्मृति है. और तुम लोग याद उन में से एक है कि मैं एक समारोह है कि अगर मामलों था मैं वास्तव में अगर आप चाहते हैं reals के लिए स्वैप, मैं वास्तव में एक सूचक भेज दिया है. नहीं चर. तुम लोगों को याद है? फर्क between-- नाम क्या है? मूल्य और फोन करके बुला संदर्भ से, सही? हाँ, ठीक है. तो मूल्य से कहते हैं. आप सिर्फ एक चर करने के लिए भेजते हैं आप सिर्फ एक मूल्य भेज रहे कार्य करते हैं. तो आप वास्तव में भेज रहे हैं चर की एक प्रति. और अपने कार्यक्रम कम परवाह नहीं कर सका वास्तव में एक ही चर के बारे में अगर एक प्रतिलिपि बनाता है. और संदर्भ मतलब है कि द्वारा बुला मैं वास्तव में की एक प्रति भेज रहा हूँ उस चर के लिए संकेतक. तो यह है कि मैं भेज रहा हूँ कि इसका मतलब कि चर का स्थान. इसलिए मैं का स्थान है भावना चर, जब मैं फोन समारोह संकेत के साथ, मैं वास्तव में करने में सक्षम हूँ मुख्य में था कि डेटा को बदलने. भावना करें? हालांकि, सूचक एक प्रति है, सूचक अभी का असली पता है मैं बदलना चाहते है कि चर. भावना करें? तो संकेत का निर्माण. हमेशा सूचक है, याद रखें यह इशारा कर रहा है कि प्रकार एक स्टार के लिए और उसके बाद. और फिर आप नाम डाल दिया. तो आप जब भी याद है कि जो भी सितारा, यह करने के लिए एक सूचक की तरह है जो भी चर कि तुम था कि टाइप करें. तो यहाँ सितारा में, उदाहरण के लिए, यह है एक सूचक और एक पूर्णांक. और फिर चार सितारा एक सूचक है चार सितारा और बहुत आगे है. हाँ? दर्शक: क्या हम अगर एक n करने के लिए सूचक एक्स स्टार के लिए. मुझे लगता है कि एक्स के लिए एक संकेत बनाता है पता है. यह भी एक पूर्णांक एक्स की घोषणा करता है? लुकास: ठीक है, तो आप n सितारा एक्स जब कहते हैं, आप एक के लिए एक संकेत नहीं पैदा कर रहे हैं चर एक्स. आप एक्स नाम का एक सूचक बना रहे हैं. दर्शक: [अश्राव्य]. लुकास: मैं n सितारा एक्स कहना तो, जब मैं कर रहा हूँ अरे, स्मृति में, मैं जा रहा हूँ, कह रही है इन तीन बक्से में से एक मिलता है. और मुझे लगता है कि कि कहने जा रहा हूँ है, जो एक्स होने जा रहा है जा रहा एक सूचक हो. और संकेत के बारे में कुछ दिलचस्प हम वे कहते हैं कि यह है कि एक 32 बिट मशीन के लिए 4 बाइट्स. और उसके लिए कारण है 4 बाइट्स 32 बिट कर रहे हैं. 64 बिट वास्तव में कर रहे हैं कि और मशीनों संकेत पते हैं 64 बिट लंबे होते हैं कि. तो यह सिर्फ मतलब है कि का आकार मशीन में पते अलग है. तो संदर्भित और dereferencing. दो ऑपरेटरों रहे हैं कि तुम लोगों को याद रखना चाहिए. पहले एम्परसेंड है. दूसरा सितारा है. कि स्टार और इस से भ्रमित मत जाओ क्योंकि में, याद है कि स्टार इस मामले में, आप n सितारा है. यह एक साथ एक पूरी बात की तरह है. कोई n अंतरिक्ष सितारा है. तो यह है कि यह प्रकार है कि इसका मतलब है. आप जब कि, याद रखें चर सितारा, आप कर रहे हैं प्रकार के बारे में बात कर. आप तो बस सितारा और जब चर का नाम, यह मतलब है कि आप सूचक, dereferencing रहे हैं जो आप देख रहे हैं कि इसका मतलब है सूचक, पता खोजने यह है , की ओर इशारा करते हैं कि पता करने के लिए जा रहा है, और जब भी में देख तुम वहाँ है. इसलिए मैं तुम्हारे पास जब कि मेरे छात्रों बताओ सितारा, आप यह है कि सोचना चाहिए की सामग्री का संक्षिप्त नाम है. आप एक सूचक है तो और आप सितारा सूचक करते हैं, यह बात है सूचक की सामग्री. तो आप यह की ओर इशारा करते है जो कुछ करने के लिए जाना और निरंतर सामग्री को देखो. और एम्परसेंड ही है के पते के रूप में बात. मैं जैसे a-- एक चर है, तो चलो पूर्णांक एक बराबर होती है कि मैंने किया कहना 3-- मुझे इस बात का पता लगाने के लिए चाहते हैं चर एक स्मृति, मैं अभी कर सकते हैं एक एम्परसेंड. तो यह एक का पता है. भावना करें? तो यहाँ एक उदाहरण है. इस पूर्णांक बी और int सी याद आ रही है. 3 साधन के बराबर होती है पूर्णांक तो यह है कि मैं याद करने के लिए जा रहा हूँ. और मैं एक स्लॉट खोजने के लिए जा रहा हूँ और यहाँ 3 नंबर डाल दिया. और फिर पूर्णांक बी 4 के बराबर होती है. मैं एक ही बात करने जा रहा हूँ. स्मृति में जाओ और एक नंबर डाल बक्से में से एक में 4. और int 5 के बराबर होती है. एक और बॉक्स लगाएं और एक नंबर 5 डाल दिया. इसलिए बाहर कर इस लाइन क्या है? n सितारा देहात एम्परसेंड एक बराबर होती है. तो सब से पहले, एन सितारा देहात. यह क्या कर रहा है? दर्शक: [अश्राव्य]. लुकास: हाँ, तो n सितारा देहात, सबसे पहले, देहात नामक एक सूचक की घोषणा की. और फिर इसका मूल्य बताए है कि सूचक एक का पता होना चाहिए. तो एक एम्परसेंड. फिर, मैं सितारा पंजाब करते हैं, एक सितारा पीबी क्या है? ओह, माफ करना. यह भी याद आ रही है. n सितारा पंजाब. मैं स्टार पीसी मतलब. मैं बहुत शर्मिंदा हूँ. यह एक ही बात है. लेकिन अब मैं एक सूचक बनाने की गिरफ्तारी अच्छा हूँ फिर सी के लिए एक संकेत बी और को. हाँ? दर्शक: [अश्राव्य]? लुकास: हाँ. तो आप स्मृति के लिए जाना है और आप के लिए जाना पा के लिए डेसिग्नेटर है कि बॉक्स, आप वास्तव में करने के लिए जा रहे हैं एक का कोई पता देखें. ठीक है? हाँ? दर्शक: [अश्राव्य]? लुकास: हाँ, सूचक एक पता है. भूल जाते हैं कि कभी. यह सबसे महत्वपूर्ण तरह है संकेत के बारे में हिस्सा. भंडारण और पता नहीं है कुछ परिवर्तनशील है. और कुछ? कोई अन्य प्रश्न? ठीक है. तो सूचक और सारणियों. याद रखें कि मैं सरणी 3 int करते हैं, मूल रूप से, मैं क्या कर रहा हूँ मैं तरह, हूँ की, एक सूचक में घोषित करने. तो सरणी प्रकार के लिए एक संकेत की तरह है स्मृति में विशिष्ट स्थान जिसमें मैं पूर्णांकों के लिए तीन स्लॉट आवंटित. कि मतलब? मैं int सरणी 3 करते तो, जब मैं क्या कर रहा हूँ कर रही है, असल में, तीन पैदा कर रही है स्मृति में स्लॉट. इसलिए मैं सिर्फ स्मृति में तीन स्लॉट हैं. इसलिए मुझे लगता है, तो, एक सितारा सरणी, यह करते हैं मूल रूप से सरणी की सामग्री का मतलब है, जो मैं जाना, मैं सूचक मिटा मतलब यह की ओर इशारा करते है कि उस जगह पर, और मैं नंबर एक डाल दिया. और फिर, मैं सितारा सरणी प्लस 1 करते हैं, कि सरणी कर के रूप में एक ही बात है बस मैं करने के लिए जाना है, जिसका अर्थ एक कोष्ठक इस पर इशारा कर रहा है कि जगह. और फिर प्लस 1 बनावट मुझे एक बदलाव की स्थिति. इसलिए मुझे लगता है, वास्तव में, इस स्थिति में जाना और नंबर दो डाल. और फिर, अंत में, मैं जब करना सरणी प्लस 2, मैं कहाँ जाना पर सरणी की ओर इशारा करते हुए. और फिर मैं स्मृति ब्लॉक करने के लिए कदम. और फिर मैं यहाँ तीन नंबर डाल दिया. हाँ? दर्शक: तो सितारा सरणी बस है बहुत पहली बात कह रही है. और तुम सिर्फ क्योंकि, 1 जोड़ सकते हैं हम केवल सच हो कि पहले पता संदर्भित. लुकास: हाँ. क्यों हम, उदाहरण के लिए, सरणी कहना है 0, सरणी 1 और सरणी 2? मैं, तुम क्यों 0 करते हो, कह रहा हूँ 1, 2, 3 के बजाय 1, 2, 3? कारणों में से एक, एक, कंप्यूटर है प्रोग्रामर शुरू करने के लिए पसंद करते हैं 0 से गिनती. आप सरणी 0 करते क्योंकि जब दो, है यह सरणी कर के रूप में एक ही बात है जिसका अर्थ है अधिक 0, मैं करने के लिए जाना स्थिति यह है कि, और मैं नहीं है किसी भी स्मृति ब्लॉकों को छोड़. इसलिए मैं किसी भी स्मृति ब्लॉक कदम नहीं है. हाँ? दर्शक: [अश्राव्य]? लुकास: तो वह क्या है पूछ रहा है कर के बीच अंतर इस या malloc कर. अंतर यह है कि है int सरणी 3 एक पैदा कर रही है ढेर पर सरणी. और मैं malloc करते हैं, यह ढेर पर बनाता है. कि मतलब? तो कैसे malloc वास्तव में काम करता है? तो क्यों न हम भी malloc का उपयोग करने की आवश्यकता है? आंकड़े के अपने संकलक तरह बाहर सभी आप घोषित चर कि. और वह सभी के लिए जगह बनाता है ढेर में उनमें से. तो अपने चर के सभी जा रहे हैं कहीं ढेर में किया जाना है. यहाँ तो वातावरण चर है. उन चर के लिए तो बुनियादी तौर पर, अंतरिक्ष स्मृति में कम से आवंटित है समय संकलन. तो यह है कि आपके कंप्यूटर का मतलब उन चर के सभी जानते हैं पहले से. यह क्या मूल्य पता करने की जरूरत नहीं है आप उन्हें में डाल करने के लिए जा रहे हैं. लेकिन यह कैसे पता करने की जरूरत आप की जरूरत ज्यादा स्मृति. लेकिन अब, उदाहरण के लिए, हम कहते हैं कि आप एक सरणी बनाने या एक ले जा रहे हैं आप ले जा रहे हैं कि स्ट्रिंग उपयोगकर्ता से. आप नहीं जानते कि कितनी देर स्ट्रिंग उदाहरण के लिए, होने जा रहा है. तो आप वास्तव में कितने पता नहीं है स्मृति ब्लॉकों आप सही, आवंटित? तो यह वास्तव में के लिए मतलब नहीं है आप 100 अक्षरों डाल कहने के लिए. और तब उपयोगकर्ता 150 लिखते हैं तो क्या होगा? आप खराब हो जा रहे हैं. तो बुनियादी तौर पर, आप कैसे के बारे में सुनिश्चित नहीं किया जा सकता आप आवंटित की जरूरत ज्यादा स्मृति जब आप प्रोग्राम संकलन. तुम बस चलाने के समय पर पता है. आप ढेर है तो यही कारण है कि है. तो ढेर स्मृति किया जा रहा है आप के दौरान आवंटन कर रहे हैं कि कार्यक्रम चल रहा है की अवधि. तो बुनियादी तौर पर, आप malloc करते हैं, क्या आप में स्मृति का आवंटन कर रहे हैं आप कर रहे हैं जिसका मतलब है कि देखने का समय, उस वक्त पर सही निर्णय लेने कि आप कि स्मृति होनी चाहिए. आप यह आवंटन हो जाने पर तो है कि. कि मतलब? तो ढेर चर है, याद उस समय संकलन पर बनाए जाते हैं. और फिर ढेर चर है तुम जाओ के रूप में बनाया जाता है उदाहरण के लिए malloc, साथ. दर्शक: [अश्राव्य]? लुकास: तो GetString है malloc फोन करने वाला. मुझे malloc के बारे में बात करते हैं, और मैं GetString समझाता हूँ. तो malloc एक ही बात है स्मृति आवंटन के रूप में. तो यह आवंटित करने के लिए जा रहा है ढेर पर स्मृति. और यह एक सूचक वापस जाने के लिए जा रहा है जहां कि स्मृति में आवंटित की गई थी. तो आप do-- जब यहाँ example-- के लिए n सितारा सूचक. और फिर सूचक malloc के बराबर होती है इंच बार 10 का आकार. मैं एक सूचक बना रहा हूँ. और फिर मैं करने के लिए कि सूचक बताए हूँ सूचक है कि malloc का मूल्य मुझे दे रहा है. तो मैं पूछ रहा हूँ malloc आप आवंटित कर सकते हैं 10 पूर्णांकों के लिए अंतरिक्ष. यही बात कह रहा है. और malloc मुझे वापस देता है एक उस जगह के लिए संकेतक. भावना करें? ठीक है. मैं और GetString, मूल रूप से, एक कर रही है आप आवंटित कर सकते हैं ताकि malloc करने के लिए कॉल क्रम के दौरान स्मृति. हमेशा शून्य के लिए जाँच करने के लिए याद malloc अशक्त वापस जाने के लिए जा रहा है क्योंकि यह स्मृति आवंटित नहीं कर सकते हैं. मान लीजिए कि आप एक हास्यास्पद के लिए पूछना है कि हम कहते हैं स्मृति की राशि. आपका कंप्यूटर नहीं किया जा रहा है ज्यादा कि आवंटित करने में सक्षम. तो malloc बस जा रहा है अशक्त लौटने के लिए. तो हमेशा के लिए जाँच अगर याद आप malloc से मिला कि सूचक है अशक्त या नहीं यह है, तो आप कर सकते हैं, क्योंकि एक सूचक dereferencing किया और पक्ष दोष के कारण. और अंत में, मत भूलना अपने मुक्त स्मृति. Malloc ढेर में स्मृति पैदा कर रही है. और आप स्मृति को मुक्त करने के लिए है कार्यक्रम समाप्त होने से पहले. ठीक है, यह सब मेरे लिए है. क्षमा करें, रोब. धन्यवाद. [वाहवाही] लुकास: किसी भी पिछले सवाल रोब से पहले आता है? नहीं? हाँ? दर्शक: मैं नहीं देखा था यह एक ऑनलाइन. आप अभी तक इसे अपलोड किया है? लुकास: मैं डेव लगता है कि जल्द ही इसे अपलोड. डेव: यह पोस्ट किया जाएगा. लुकास: यह ऑनलाइन हो जाएगा. दर्शक: यह हो रहा है. लुकास: यह हो रहा है? ठीक है. हाँ? दर्शक: [अश्राव्य]? लुकास: हाँ, तुम मुक्त करना चाहिए सभी ढेर में डाल दिया है कि स्मृति. दर्शक: [अश्राव्य]? लुकास: हाँ. आप एक संस्कृति malloc है कि किसी भी समय, आप नि: शुल्क एक संस्कृति होनी चाहिए तुम्हारे जाने के बाद कि चर का उपयोग बंद. तो malloc और मुक्त हैं हमेशा एक साथ. उनकी सबसे अच्छी दोस्त. हाँ. रोब? रोब: मैं जल्दी से जाना होगा. और भी वीडियो डाल दिया जाएगा. मैं पर mic है. ठीक है, तो सप्ताह पांच चीजें. हम पहली बात हो चुकी है. तो केवल एक ढेर है कि वहाँ याद सक्रिय समारोह कॉल प्रति फ्रेम. हम एक दूसरे में देखेंगे. और भी वास्तव में क्या जाता है याद प्रत्येक ढेर फ्रेम में होने जा रहे हैं हमारे कार्यों का स्थानीय चर, में पारित कर रहे हैं कि तर्क हमारे एक जोड़े के साथ काम करता है, अन्य बातों के आप वास्तव में नहीं है के बारे में चिंता करने की जरूरत है. यहाँ तो जहां एक उदाहरण कार्यक्रम है, नोटिस, मुख्य वापसी printfing है foo 4 के लिए मूल्य. foo बस वापस जाने के लिए जा रहा है बार 4 अल्पविराम 6 के लिए मूल्य. और बार कुछ स्थानीय सेट करने के लिए जा रहा है 4 बार 6 के बराबर चर एन. और फिर n वापसी. तो चलो भर में ढेर को देखो इस कार्यक्रम की वास्तविक चलना. इसलिए हमारे ढेर के नीचे है. ढेर बढ़ता है याद रखें. हमारे ढेर के नीचे तो, हम मुख्य लिए एक ढेर फ्रेम किया है. जब कार्यक्रम शुरू होता है, मुख्य हमेशा पर होने जा रहा है हमारे ढेर के नीचे. और के अंदर क्या है हमारी मुख्य लिए फ्रेम ढेर? तो कोई स्थानीय कर रहे हैं, भले ही मुख्य करने के लिए चर मैंने पहले कहा, जैसे हम argc और RGV स्थान ले रहा है मुख्य ढेर फ्रेम के अंदर. अब करने जा रहा है तो मुख्य समारोह foo कहते हैं. और कहा कि foo जा रहा है इसका मतलब अपने स्वयं के ढेर फ्रेम मिलता है. तो अब हम के अंदर हो समारोह foo. और क्या में जाने की जरूरत है foo के ढेर फ्रेम? खैर, foo एक तर्क n है. उस के बाद से और एन 4 के बराबर है क्या मुख्य foo के तर्क के रूप में गुजर रहा है. तो अब foo बार फोन करने के लिए जा रहा है. क्या बार के अंदर किया जा रहा है 'अपनी ढेर फ्रेम की? यह छह के बराबर 4 वाई के बराबर एक्स है. यही कारण है कि हम करने जा रहे हैं वह सब नहीं है बार क्योंकि ढेर फ्रेम में यह भी एक स्थानीय चर n है. और एन हम 24 के बराबर सेट करने के लिए जा रहे हैं. तो अब बार n वापस जाने के लिए जा रहा है. तो बार के लिए 24 लौट रहा है ढेर फ्रेम foo. और बार है कि अब, लौट रहा है क्योंकि हम ढेर फ्रेम popping रहे हैं इसका मतलब ढेर से दूर पट्टी के लिए. बार किया गया था कि इतना सब स्मृति का उपयोग ढेर से दूर अब है. अब, foo भी जा रहा है मुख्य करने के लिए 24 लौटने के लिए. तो अब है कि foo, स्मृति लौट रहा है कि foo अपने 'में इस्तेमाल कर रहा था ढेर फ्रेम भी चला गया है. और अब, मुख्य printf कॉल करने के लिए जा रहा है. तो printf बस एक समारोह है. हम printf कहते हैं, यह होने जा रहा है printf के लिए एक और ढेर फ्रेम समारोह कॉल. क्या हम printf गुजर रहे हैं? कि जाने के लिए क्या हो रहा है अपने ढेर फ्रेम पर. बहुत कम से कम, हम गुजर रहे हैं उस प्रतिशत मैं n बैकस्लैश और तर्क 24. यह ढेर फ्रेम में यह अधिक हो सकता है printf कुछ का उपयोग किया जाना होता है स्थानीय चर. हम नहीं जानते. लेकिन वह सब printf में चला जाता है फ्रेम हो चुकी है. यह printf निष्पादित करने के लिए जा रहा है. तो printf किया है. यह वापस आ जाएगी. अंत में, मुख्य किया जाता है. मुख्य वापसी करेंगे. और फिर हमारे कार्यक्रम किया जाता है. हाँ? दर्शक: आप देख रहे हैं [अश्राव्य] तर्क [अश्राव्य] मापदंडों? रोब: तो एक सूक्ष्म अंतर नहीं है तर्क और मापदंडों के बीच. और वास्तव में, आम बात में, लोगों को देते हैं बस हर समय उन्हें मिश्रण करने के लिए. लेकिन पैरामीटर सामान्य हैं चीजों के नाम है. तो argc और argv हैं मुख्य करने के लिए पैरामीटर. तर्क क्या आप वास्तव में कर रहे हैं उन मापदंडों के रूप में गुजरती हैं. तो वहाँ मैं 4 के Foo, 4 कॉल मैं में गुजर रहा हूँ तर्क है. और के अंदर पैरामीटर एन, Foo, मूल्य 4 पर ले जाता है 4 के बाद से तर्क था. दर्शक: [अश्राव्य]? रोब: n बार एक स्थानीय चर रहा है. एन, अभी भी foo के लिए स्थानीय है लेकिन यह फू के लिए एक पैरामीटर है. यह एक स्थानीय चर नहीं है. हाँ? दर्शक: [अश्राव्य]? रोब: foo अभी बुला रहा है बार और जो भी बार रिटर्न लौटने. दर्शक: [अश्राव्य]? रोब: हाँ, बस कई को देखने के लिए फ्रेम हो चुकी है. हाँ? दर्शक: क्यों foo बुलाया गया था printf से पहले? रोब: क्यों foo printf से पहले कहा जाता था? मैं हो सकता था तो, बजाय, कुछ किया पूर्णांक की तरह एक्स 4 की foo के बराबर होती है और फिर एक्स मुद्रित. लेकिन इसके बजाय, मैं समारोह संयुक्त printf तर्क में कहते हैं. लेकिन सूचना है कि हम वास्तव में नहीं कर सकते हम जब तक printf को कॉल निष्पादित 4 के foo क्या है पता. इसलिए हम इस मूल्यांकन करने के लिए जा रहे हैं. और जो कुछ किया है केवल एक बार जा रहे हैं वापस आते हैं और इस मूल्यांकन करने के लिए. हाँ? दर्शक: दोनों बार के बाद से [अश्राव्य] मूल्य, क्यों हम [अश्राव्य] नहीं है? रोब: वे पूरी तरह से पूर्णांक होना चाहिए. उस पर पकड़ा नहीं गया था कई गुजरता. तो यह पूर्णांक बार और पूर्णांक होना चाहिए उन दोनों के बाद से foo पूर्णांकों लौट रहे हैं. वे नहीं जा रहे हैं तो शून्य ही है वास्तविक मूल्यों को वापस जाने के लिए. हाँ? दर्शक: आप एक पंक्ति थी तो ऊपर वापसी, [अश्राव्य]? रोब: वापसी के ऊपर एक रेखा? दर्शक: हाँ. जैसा आप printf और [सुनाई] किया, यह दो बार प्रिंट होगा? रोब: foo के अंदर तो? हम यहीं एक printf था? दर्शक: हाँ. रोब: तो अगर हम एक printf सही था यहां, यह एक बार प्रिंट होगा. हम एक बार सही foo बुला रहे हैं यहाँ है, तो हम printf मारा हूँ. तो फिर हम बार फोन करता हूँ. और फिर foo वापस आ जाएगी. और यह बात है. हम केवल कभी मुठभेड़ एक बार printf. हाँ? दर्शक: [अश्राव्य] हम पहली बार कर रहे हैं क्योंकि printf foo बुला printf बुला और फिर हम गुजर रहे हैं तर्क. रोब: सिद्धांत में तो नहीं है, printf foo बुला? तो कोई. सी जा रहा है कि बस आदेश हम कर सकते हैं, इससे पहले इन बातों है निष्पादित , तर्कों के सभी एक समारोह कॉल समारोह के लिए है पूरी तरह से मूल्यांकन किया जाना. तो यह पूरी तरह से मूल्यांकन किया जाता है? हाँ, यह सिर्फ एक स्ट्रिंग है. यह सिर्फ एक मूल्य है. तो फिर हम पूरी तरह से करने के लिए है इस मूल्यांकन. यह अब सभी की, बार किया जाता है अपने तर्कों मूल्यांकन कर रहे हैं. और अब हम कर सकते हैं printf के लिए कहते हैं. हाँ? दर्शक: एक सवाल. आप एक शून्य समारोह है, तो चाहिए आप वापसी अर्धविराम है? रोब: आप एक वापसी अर्धविराम नहीं करते आप एक शून्य समारोह है. ठीक है. तो अब कुछ ढेर सामान. तो ढेर हम सौदा करने जा रहे हैं कि कैसे गतिशील स्मृति प्रबंधन के साथ. और यह सीधे साथ विरोधाभासों हम स्वत कहेंगे जो ढेर स्मृति प्रबंधन. ढेर पर तो, क्या तुम सच में है कभी नहीं कैसे स्थानीय चर के साथ सौदा करने के लिए धक्का दिया और सब बंद popped किया जा रहा है इन ढेर फ्रेम और वह सब सामान. आप इसके बारे में चिंता करने की ज़रूरत नहीं है. यह स्वचालित है. तो ढेर पुस्तिका है. और [अश्राव्य] इन कार्यों से आता है malloc और मुक्त. तो यहाँ एक और कार्यक्रम है. हम क्या कर रहे सभी mallocing है एक पूर्णांक. हम स्टार एक्स में यह भंडारण कर रहे हैं. बेशक, हम जाँच करने के लिए एक्स शून्य है देखने के लिए. तो हम बस क्या स्थापित करने के लिए जा रहे हैं एक्स 50 करने के लिए इशारा कर रहा है. , की ओर इशारा कर रहा है कि क्या एक्स प्रिंट प्रिंट एक्स, और फिर फ्री एक्स. तो कैसे यह वास्तव में लग रहा है हम अपने ढेर और ढेर पर लगता है? तो हम फिर से शुरू करेंगे. पहले के रूप में हमारे ढेर के नीचे. तुमको सीधे ढेर कि याद रखें ढेर विरोध करता है? तो हम करने जा रहे हैं वहाँ हमारे ढेर के ऊपर. हमारे ढेर के नीचे तो, हम हैं मुख्य लिए हमारे ढेर फ्रेम. यह argc, argv के लिए स्थान है, और हम अब एक स्थानीय चर एक्स, जो है एक पूर्णांक सितारा है. इसलिए हम पुनरावृति करने के लिए जा रहे हैं इस कार्यक्रम के माध्यम से. हम पहली बात है malloc के लिए एक फोन. इसलिए हम malloc के लिए एक फोन कर रहे हैं. Malloc एक समारोह है. यह एक ढेर फ्रेम हो रहा है. क्या हम malloc को पारित कर रहे हैं? अंदर जाने के लिए जा रहा है ढेर फ्रेम की. हम 4 है जो एन, के आकार गुजर रहे हैं. इसलिए कि malloc को पारित कर दिया है. Malloc क्या करता है? यह हमें ढेर पर कुछ जगह पकड़ लेता है. तो हम ढेर करने के लिए जाने के लिए जा रहे हैं. और हम हड़पने के लिए जा रहे हैं ढेर से 4 बाइट्स. तो चलो बस उस दे एक मनमाना पता. 0x123 कि बस एक है नाटक ढेर पर है कि पता. तो उस के अंदर वास्तव में क्या है पता Ox123 पर स्मृति के क्षेत्र? कचरा. इसलिए हम इसमें कुछ भी जमा नहीं किया है. तो जहाँ तक हम जानते हैं कुछ भी हो सकता है. आप यह शून्य है मान नहीं होना चाहिए. यह नहीं शून्य सबसे अधिक संभावना है. तो अब malloc रिटर्न. और हम जब malloc रिटर्न क्या करते हो? हम यह रिटर्न क्या निर्धारित किया है. हम के बराबर एक्स सेट यह लौट रहा है. तो क्या यह लौट रहा है? उस के बाद से यह 0x123 लौट रहा है स्मृति के ब्लॉक का पता यह है कि सिर्फ ढेर में आवंटित. तो 0x123 एक्स अब सेट किया जा रहा है लौटने 0x123 के बराबर है, जो pictorially, हम अक्सर एक वास्तविक होने एक्स के रूप में आकर्षित उस ब्लॉक की ओर इशारा करते तीर. लेकिन एक्स सिर्फ उस पते जमा कर रहा है. तो अब हम एक्स शून्य है की जाँच करने के लिए है. यह शून्य नहीं है. हम चाहते हैं कि malloc सफल रहा कि नाटक. तो अब स्टार एक्स 50 के बराबर होती है. तो सितारा यह मतलब को याद उस पते पर जाना. तो 0x123 हम करने जा रहे हैं उस पते पर जाना. इसलिए कि वहां हमें लाता है. हम उस पते पर क्या कर रहे हैं? हम 50 भंडारण कर रहे हैं. तो इस लाइन के बाद, क्या है चीजों की तरह देखने के लिए जा रहे हैं. तो अब यह नहीं रह गया है वहां कचरा. अब हम 50 में है कि पता है कि विशेष पते क्योंकि हम चाहते हैं कि करने के लिए यह निर्धारित किया है. ठीक है? तो अब हम एफ मुद्रित करने के लिए जा रहे हैं. तो पहले हम स्टार एक्स मुद्रित करने के लिए जा रहे हैं. तो स्टार एक्स क्या है? फिर, स्टार एक्स के लिए जाने का मतलब एक्स की ओर इशारा कर रहा है कि बात. तो एक्स कि को 0x123 जाओ जमा कर रहा है. हम 50 मिलता है. इसलिए कि च मुद्रित. और यह बात 50 मुद्रित करने के लिए जा रहा है इसका मतलब है. और फिर देता है. और फिर हम दूसरे printf है. अब हम प्रतिशत पी रहे हैं. आप इसे नहीं देखा है, तो वह है बस आपको एक सूचक प्रिंट कैसे. इसलिए हम प्रतिशत प्रतिशत मैं है एफ, और पहले से ही उन सब के सब. तो प्रतिशत पी, एक सूचक मुद्रित. तो एक्स एक सूचक है. तो हम खुद को एक्स मुद्रित करने के लिए जा रहे हैं, हम अंदर वास्तव में है क्या मुद्रण कर रहे हैं तो पहले 0x123 है जो एक्स, प्रिंट एफ 50 मुद्रित करने के लिए जा रहा है. दूसरा छापा च जा रहा है हाँ 0x123 मुद्रित करने के लिए? दर्शक: आप प्रतिशत का उपयोग न करें एक्स एक सूचक मुद्रित करने के लिए? रोब: तो तुम प्रतिशत का उपयोग करते हैं एक्स एक सूचक मुद्रित करने के लिए? तो, आप कर सकते हैं, लेकिन प्रतिशत एक्स बस है आम तौर पर, के लिए जैसे आप कुछ है तो पूर्णांक और आप मुद्रित करना चाहते हैं यह एक हेक्साडेसिमल के रूप में. आप ऐसा कैसे सिर्फ है कि. जबकि, प्रतिशत घ होगा दशमलव के रूप में मुद्रित. हम प्रतिशत प्राप्त किया गया है कि है डी. मैं सिर्फ पूर्णांक है. प्रतिशत P विशेष रूप से है संकेत के लिए. तो एक्स एक सूचक है. हम प्रतिशत P उपयोग करना चाहते हैं. लेकिन प्रतिशत एक्स काम कर सकता था. हाँ? दर्शक: [अश्राव्य]? रोब: हाँ. इस के लिए कम से कम इतना call-- मैं इसे यहाँ में शामिल नहीं किया था. लेकिन इन दोनों तर्कों जरूरी हैं इस ढेर फ्रेम के अंदर किसी भी स्थानीय चर के साथ printf का उपयोग होना होता है. और फिर अगले कॉल अब printf को printf के अंदर ढेर फ्रेम है प्रतिशत पी बैकस्लैश n और जो कुछ भी एक्स के मूल्य 0x123 है, जो है. हाँ? दर्शक: [अश्राव्य]? रोब: यह कुछ प्रिंट हूँ कि इस तरह दिखता है. दर्शक: [अश्राव्य]. रोब: तो यह पता फार्म में यह प्रिंट. यह एक पते की तरह लग रहा है. हाँ? दर्शक: [अश्राव्य]? रोब: क्यों क्या है? दर्शक: [अश्राव्य]? रोब: क्यों इस सूचक 4 बाइट्स है? तो एक पूरी गुच्छा रहे हैं इस के सामने 0 के के. तो यह वास्तव में 0x0000000123 है. एक 64 बिट सिस्टम पर, वहाँ होगा अधिक शून्य की एक पूरी गुच्छा. हाँ? दर्शक: [अश्राव्य]. रोब: तो पहले printf print-- जा रहा है दर्शक: [अश्राव्य]. रोब: हाँ, यह मुद्रित करने के लिए जा रहा है क्या एक्स की ओर इशारा कर रहा है. स्टार यह क्या कहते हैं बात की ओर इशारा करते. यह पकड़ो. तो यह की ओर इशारा कर रहा है क्या? 50. यह पकड़ो. यही कारण है कि हम मुद्रित करने के लिए जा रहे हैं. अगले एक, जबकि, हम कर रहे हैं अभी से ही एक्स मुद्रण. च के अंदर क्या है? 0x123. ठीक है. और फिर, अंत में, हम स्वतंत्र है. क्या हम मुक्त करने के लिए पारित कर रहे हैं? हम एक्स गुजर रहे हैं. मैं वास्तव में प्रदर्शित समय यह ढेर फ्रेम में. इसलिए हम मूल्य गुजर रहे हैं 0x123 मुक्त करने के लिए. तो अब जानता मुक्त, सब ठीक है, मैं ढेर करने के लिए ऊपर जाना है और कहा कि स्मृति मुक्त. यह अब उपयोग कर रहा है पते 0x123 पर है. तो नि: शुल्क जारी करने जा रहा है ढेर से कि. अब हमारी ढेर फिर खाली है. हम कोई स्मृति लीक है. अब मुफ्त में वापस आ जाएगी. कि एक्स अभी भी 0x123 नोटिस. लेकिन यह है कि अब मान्य स्मृति नहीं है. हम अब भिन्नता एक्स चाहिए. हाँ? दर्शक: 0 बेमानी वापसी है? रोब: 0 बेमानी returen है? हाँ. हम सिर्फ वहाँ क्योंकि उस डाल हम हवा के लिए एक वापसी एक है. तो यह हाँ, देता है, की तरह है 0 वापसी शामिल हैं. हाँ? दर्शक: [अश्राव्य]? रोब: तो नि: शुल्क एक्स के बाद, क्या होता है अगर हम संकेतक भिन्नता की कोशिश की? यह कुछ भी गलत हो जाता है कि संभव है. हम अभी भी 50 मिल जाएगा कि यह संभव है. ऐसा लगता है कि स्मृति है कि, यह भी संभव है, अब कुछ और के लिए इस्तेमाल किया जा रहा है. तो यह अपरिभाषित व्यवहार है. और अपरिभाषित कुछ भी मतलब हो सकता है. हाँ? दर्शक: [अश्राव्य]? रोब: नहीं, तो आप आवंटित अगर कुछ और करने के लिए एक्स. तो यहीं अगर हम एक्स के बराबर होती कहा malloc कुछ else-- malloc आकार event-- फिर उस मूल ब्लॉक स्मृति से मुक्त नहीं है. और हम आधिकारिक तौर पर इसे खो दिया है. यह एक स्मृति रिसाव है. हम सभी संदर्भ खो दिया है स्मृति की कि ब्लॉक करने के लिए. इसलिए हम कभी यह मुक्त कर सकते हैं कोई रास्ता नहीं है. ठीक है, तो फिर किया 0 साधन वापसी. ठीक है, तो ढेर अतिप्रवाह. यहाँ विचार क्या है? तो याद है, ढेर नीचे जा रहा है. ढेर ऊपर जा रहा है. तो इस व्याख्यान से उदाहरण था, मैं जहां मुख्य बस जा रहा है, लगता है कि जा रहा है जो इस समारोह foo, कॉल अधिक बारी बारी से अपने आप कॉल करने के लिए और फिर से. तो फ्रेम करने के लिए जा रहे हैं ढेर वास्तव में एक ही काम करते हैं. इसलिए हम मुख्य के साथ शुरू करने जा रहे हैं नीचे ढेर फ्रेम के रूप में. फिर मुख्य, foo कॉल करने के लिए जा रहा है, जो एक ढेर फ्रेम हो रहा है. फिर foo foo कॉल करने के लिए जा रहा है फिर, जो हो रहा है एक और ढेर फ्रेम. और फिर, और फिर, और फिर, और फिर जब तक, अंत में, हम चलाते हैं ढेर में. तो यह है कि हम कैसे मिलता है एक ढेर अतिप्रवाह. और इस बिंदु पर, आप गलती SEG. या फिर आप वास्तव में SEG से पहले गलती होगी इस बिंदु लेकिन हाँ. दर्शक: कोर डंप है SEG गलती के रूप में एक ही? रोब: तो आप विभाजन देखेंगे गलती कोर फेंक दिया. आप एक कोर डंप जब मिल आप गलती SEG. और यह सभी की एक डंप की तरह है अपने मौजूदा स्मृति की सामग्री तो आप कोशिश करते हैं और पहचान कर सकते हैं क्यों आप गलती SEG. हाँ? दर्शक: [अश्राव्य]? रोब: तो विखंडन दोष साधन एक पोट अतिप्रवाह है. इसलिए जरूरी नहीं. विखंडन दोष आप कर रहे हैं कि इसका मतलब है एक तरह से छू स्मृति आप नहीं होना चाहिए. तो जो हो रहा है की एक तरह से, जब है आप हम छू शुरू, अतिप्रवाह हो चुकी है हम नहीं होना चाहिए कि एक तरह से स्मृति. हाँ? दर्शक: [अश्राव्य]? रोब: एक अनंत लूप के अंदर तो. की तरह, यह एक पुनरावर्ती अनंत की तरह है पाश और इसलिए हम एक और मिल ढेर प्रत्येक समय सीमा. लेकिन सिर्फ एक नियमित रूप से अंदर अनंत one-- जबकि ठीक है, चलो भी मुद्रित नहीं करते f-- कुछ करो. जो भी हो. हम हो रही हो नहीं जा रहे हैं एक और ढेर फ्रेम. हम सिर्फ पाशन रखने के लिए जा रहे हैं इस एकल अनुदेश से अधिक. ढेर नहीं बढ़ रहा है. यह प्रत्येक पुनरावर्ती कि तथ्य है कॉल हमें एक ढेर फ्रेम दे रहा है. हम एक ढेर अतिप्रवाह मिल रहा है. हाँ? दर्शक: तो अगर आप पाने के लिए कहा पाश जबकि और फिर [अश्राव्य]? रोब: अगर जबकि पाश के अंदर तो एक printf वहाँ था, आप अभी भी होगा SEG नहीं गलती. मैं सिर्फ बातें भ्रमित नहीं करना चाहता था. यह पाश होगा. आप एक एकल ढेर मिलता था printf के लिए फ्रेम. तो printf लौटेंगे. तो फिर तुम फिर पाश था. आप एक एकल ढेर मिलता था printf के लिए फ्रेम. यह लौटेंगे. एकल ढेर फ्रेम. तो आप इस अनंत नहीं मिल रहे ढेर फ्रेम जमा. दर्शक: [अश्राव्य]? रोब: हाँ. तो इस पर ढेर अतिप्रवाह होता है इनमें से कोई नहीं क्योंकि foo के लिए कॉल लौट रहे हैं. हम वापस, तो हम करेंगे तो ढेर फ्रेम खोने लगते हैं. और फिर हम अतिप्रवाह हो चुकी है नहीं होगा. आप एक आधार के मामले जरूरत यही कारण है कि अपने निजी कार्यों के लिए. हाँ? दर्शक: संभावित आकार और है ढेर के लिए उसी के लिए ढेर सभी कार्यक्रमों? रोब: मोटे तौर पर. है ढेर के संभावित आकार और सभी कार्यक्रमों के लिए एक ही ढेर? मोटे तौर पर. कुछ randomization के लिए है जहां ढेर शुरू होता है और जहां ढेर शुरू होता है. आप की एक पूरी बहुत कुछ के लिए होता है वैश्विक चर और बातें, आप कर सकते हैं कुछ जगह से दूर ले अपने ढेर के लिए. एक 64 बिट सिस्टम पर, आप वस्तुतः अनंत स्मृति है. सिर्फ इतना नहीं है. 32 बिट और 64 बिट, कि बीच एक महत्वपूर्ण अंतर है. आप एक पूरी बहुत अधिक प्राप्त करने के लिए जा रहे हैं एक 64 बिट पर ढेर और ढेर अंतरिक्ष प्रणाली अभी और भी है क्योंकि वे उपयोग कर सकते हैं पते. लेकिन एक व्यक्ति प्रणाली पर, यह होगा ढेर के लगभग एक ही राशि हो और ढेर अंतरिक्ष. ठीक है. तो आखिरी बात संकलन है. तो आप इस प्रक्रिया को पता होना चाहिए. चार बड़े कदम उठाए हैं. तो पहले एक होना चाहिए याद करने के लिए आसान हो सकता है. पूर्व प्रसंस्करण. यह उस में पूर्व उपसर्ग है. तो यह सब कुछ पहले आता है. याद करने की बात हैश है. तो हैश को परिभाषित करता है और हैश शामिल उन सभी में. उन सभी पूर्व प्रोसेसर हैं निर्देशों. ये बातें कर रहे हैं कि पूर्व प्रोसेसर का ख्याल रखता है. तो एक पूर्व प्रोसेसर क्या करता है? यह एक सच में मूक बात है. यह करने में सक्षम है इन सभी के सभी कर रहे हैं प्रतिलिपि, और कटौती, और चिपकाने की कार्रवाई. तो हैश मानक I0 डॉट घंटे भी शामिल है. कर रही है कि क्या है? यह मानक I0 डॉट घंटे हथियाने है फ़ाइल और शीर्ष में चिपका जहाँ भी यह हैश शामिल कहते हैं मानक I0 डॉट घंटे. और किसी भी हैश हम है कि परिभाषित देखा, क्या कर रही है? इसका हैश कि मूल्य नकल के रूप में और चिपकाने परिभाषित किया गया है कि परिभाषित जहाँ भी आप मूल्य का उपयोग कर रहे हैं. तो पूर्वप्रक्रमक सिर्फ सच में करता है सरल पाठ आधारित कार्रवाई. यह स्मार्ट कुछ भी नहीं है. तो सब कुछ है अधिक जटिल. तो अब है कि पूर्वप्रक्रमक है किया है, हम वास्तव में संकलन. तो संकलन क्या मतलब है? हम अब सी कोड से जा रहे हैं विधानसभा कोड के लिए. हाँ? दर्शक: [अश्राव्य]? रोब: हाँ, हम उस पकड़ा. तो संकलन. हम विधानसभा के लिए सी से जा रहे हैं. तो यह एक वास्तविक भाषा परिवर्तन है. खुद संकलन से जाने का मतलब करने के लिए एक उच्च स्तर की भाषा एक कम स्तर की भाषा. और सी एक उच्च स्तर की भाषा है विधानसभा की तुलना में. विधानसभा क्या है? कर रहे हैं कि इसका निर्देश, सुंदर बहुत, अपने CPU के लिए बनाया है. लेकिन अगर आपके कंप्यूटर अभी भी करता है विधानसभा समझ में नहीं. यह केवल लोगों और शून्य को समझता है. तो अगले कदम, संयोजन है जो इन निर्देशों से हमें लाता है आपके सीपीयू को समझता है और वास्तव में करने के लिए, उन्हें तब्दील लोगों और शून्य. द्विआधारी करने के लिए विधानसभा के लिए सी तो. लेकिन मैं अभी तक एक निष्पादन योग्य नहीं है. तो CS50 पुस्तकालय के बारे में सोच. हम एक द्विआधारी के लिए के साथ आप प्रदान की है GetString है जो इस CS50 पुस्तकालय, और GetInt और यह सब. लेकिन CS50 library-- में और itself-- का कार्यान्वयन संभव नहीं है. यह एक मुख्य समारोह नहीं है. यह बाइनरी का एक गुच्छा है आप उपयोग कर सकते हैं. तो लिंक हम सब एक साथ लाने के लिए कैसे है इन विभिन्न द्विआधारी फ़ाइलों की एक वास्तविक निष्पादन में. आप टाइप कर सकते हैं कि एक डॉट डॉट बाहर स्लेश. तो इस फ़ाइल की तरह है कि आप , लिखा - जो कुछ भी अपने कार्यक्रम is-- Ceaser डॉट सी. लेकिन अब यह संकलित किया गया है द्विआधारी करने के लिए नीचे. तो Ceaser डॉट ओ. और यह हमारे CS50 द्विआधारी पुस्तकालयों है. और वे संयुक्त किया जा रहा हो एक एकल निष्पादन में. हाँ? दर्शक: [अश्राव्य]? रोब: तो पहले शामिल हैं, याद रखना, शामिल वास्तव में एक है हैश पूर्व प्रोसेसर कदम. लेकिन वह अलग है. आप किसी भी कार्य का उपयोग नहीं कर रहे हैं कि फिर अपने एकल फाइल के बाहर हैं, नहीं, तुम कुछ भी लिंक करने की जरूरत नहीं है तुम सब कुछ के बाद से. उस ने कहा, printf में जोड़ा जा रहा है. आप कभी printf का उपयोग करते हैं, कि कुछ है उस में जुड़े होने की जरूरत आपको लगता है कि लिखने के लिए नहीं था. और, वास्तव में, printf स्वतः है में जुड़े. तुम्हें पता है कैसे कमांड लाइन पर या जब आप इसे देख, बनाने के प्रकार कड़ी है जो पानी का छींटा एल CS50, CS50 पुस्तकालय में? कि जैसे printf, और सामान, जा रहा है स्वचालित रूप में जोड़ा जा सके. किसी भी चीज पर अन्य प्रश्न? दर्शक: [अश्राव्य]? रोब: जोड़ने? हम की एक पूरी गुच्छा है अलग बाइनरी फ़ाइलें. यह विहित उदाहरण है कि हम इस्तेमाल CS50 पुस्तकालय है. हम संकलित और आप के लिए दे दिया है इस CS50 पुस्तकालय के लिए द्विआधारी. आप GetString उपयोग करना चाहते हैं अपने कार्यक्रम में. तो तुम जाओ और GetString का उपयोग करें. लेकिन के लिए मेरे बाइनरी कोड के बिना GetString, आप अपने कोड संकलन जब नीचे, आप वास्तव में नहीं चला सकते हैं अपने कार्यक्रम GetString स्ट्रिंग है क्योंकि अभी तक पूरी तरह से परिभाषित नहीं. आप मेरे द्विआधारी में लिंक यह केवल जब कि सब, कि अब GetString शामिल ठीक है, मैं वास्तव में यह कर सकते हैं GetString निष्पादित. मेरी फाइल पूरा हो गया है. और मैं यह भी चला सकते हैं. हाँ? दर्शक: परिवर्तित जोड़ने है द्विआधारी निष्पादन करने के लिए? आप अन्य नहीं है तो भी अगर पुस्तकालयों, यह अभी नहीं होगा अनुवाद करने के लिए आवश्यक [अश्राव्य]? रोब: तो एक निष्पादन बाइनरी में अब भी है. यह सिर्फ एक पूरे के संयोजन है बायनेरिज़ का गुच्छा. दर्शक: बहुत बहुत धन्यवाद. रोब: कोई समस्या नहीं है. कोई अन्य प्रश्न? अन्यथा, हम पूरी तरह तैयार हैं. ठीक है. धन्यवाद. [वाहवाही] दर्शक: धन्यवाद. रोब: हाँ.