[संगीत खेल] डेविड जे Malan: सब ठीक है. इस CS50 है, और इस सप्ताह चार का अंत है. और विषयों में से एक आज डिजिटल फोरेंसिक में वह है, जानकारी उबरने की कला. और वास्तव में, भले ही आप बीच में हो सही अब शांति की तीन पर और ब्रेकआउट, अगले सप्ताह, ध्यान देने पर होगा ठीक इस डोमेन. सबसे अच्छे जॉब की तो एक मैं कभी था, वापस ग्रेजुएट स्कूल में था मैं स्थानीय के लिए काम कर रहा था जब मिडिलसेक्स काउंटी जिला अटार्नी कार्यालय, कर फोरेंसिक काम करते हैं. तो अनिवार्य रूप से, मैसाचुसेट्स राज्य पुलिस ने इस अवसर पर, मामलों पर कार्य करते समय होगा हार्ड ड्राइव की तरह बातों में लाना और फ्लॉपी डिस्क और मेमोरी कार्ड और पसंद है. और वे उन्हें हाथ में होगी मुझे और मेरे गुरु को, और हमारे लक्ष्य के सबूत मिल गया था, इन मीडिया पर किसी भी, अगर वहाँ था. अब, आप देखा हो सकता है झलक फोरेंसिक की इस दुनिया की मीडिया, टीवी और फिल्मों में. लेकिन काम मैं था, और हिम्मत है कि दुनिया, आप यह देखना होगा की तरह काफी नहीं है. पर एक नज़र रखना क्या आप शायद देखा है. [वीडियो प्लेबैक] ठीक है. अब, आप में एक अच्छे लग जाओ. [संगीत खेल] यह पकड़ो. कि पीछे. एक मिनट रुको. सही जाओ. , वहाँ. कि रुक. पूर्ण स्क्रीन. ठीक है. कि रुक. आप उस पर देंगे -Tighten? उस पर में -Vector वापस पहिया द्वारा आदमी. यहीं इस मौके पर में -Zoom. सही उपकरण -साथ, छवि बढ़े और बढ़ाई जा सकती है. कि क्या हो रहा है? यह तो एक वृद्धि कार्यक्रम है. कि किसी भी स्पष्ट है कि आप सकते हैं? मैं नहीं जानता. चलो इसे बढ़ाने करते हैं. -Enhance धारा ए 6. मैं विस्तार बढ़ाया, and-- मैं बढ़ाने के लिए पर्याप्त लगता है कि वहाँ. अपनी स्क्रीन करने के लिए इसे रिलीज. मैं उसकी आंख में प्रतिबिंब बढ़ाया. -Let माध्यम से इस दौड़ रहा है वीडियो वृद्धि. -Edgar, आप इस वृद्धि कर सकते हैं? पर -Hang. इस प्रतिबिंब पर काम कर रहा -I've. , वहाँ के किसी का प्रतिबिंब. -Reflection. आदमी के चेहरे की एक प्रतिबिंब, वहाँ है. -इस प्रतिबिंब! एक प्रतिबिंब, वहाँ है. दर्पण पर में -Zoom. आप एक प्रतिबिंब देख सकते हैं. आप यहाँ से छवि को बढ़ाने सकते हैं? आप इसे बढ़ाने सकते हैं? आप इसे बढ़ाने सकते हैं? हम इस वृद्धि कर सकते हैं? आप इसे बढ़ाने सकते हैं? एक दूसरे पर पकड़ो. मैं बढ़ाने करेंगे. दरवाजे पर में -Zoom. 10 -Times. -Zoom. में -Move. -More. -रुको, बंद करो. बंद करो. यह -Pause. हमें 75 डिग्री -Rotate खड़ी आसपास, कृपया. बंद करो. भाग पर वापस जाएं दरवाजे के बारे में फिर से. बिटमैप कर सकते हैं कि एक छवि बढ़ाने -Got? हम प्रदीप सिंह उपयोग कर सकते हैं -Maybe विधि खिड़कियों में देखने के लिए. -इस सॉफ्टवेयर कला का राज्य है. -इस Eigenvalue बंद है. सही -साथ algorithms-- का संयोजन -वह का लिया रोशनी अगले स्तर तक एल्गोरिदम, और मैं उन्हें इस्तेमाल कर सकते हैं इस तस्वीर में वृद्धि. पर -Lock और जेड अक्ष बढ़ाना. -Enhance. बढ़ाएँ. -Enhance. -Freeze और वृद्धि. [अंत वीडियो प्लेबैक] डेविड जे Malan: तो उन हैं सभी शब्दों, लेकिन वे नहीं थे सही ढंग से वाक्य में इस्तेमाल किया. और वास्तव में भविष्य में, किसी भी समय, , आप किसी शब्द को कहते सुना है, कृपया बस थोड़ा सा व्यंग्य, "बढ़ाने". आप को बढ़ाने के लिए प्रयास करते हैं, क्योंकि उदाहरण के लिए, यह क्या होता है. तो यहाँ एक भव्य तस्वीर है. इस CS50 की अपनी Daven है. और हम चाहते थे कि लगता है उसकी आंखों में चमक पर ध्यान केंद्रित, या का प्रतिबिंब स्पष्ट रूप से किया गया था कि बुरा आदमी सुरक्षा कैमरे द्वारा कब्जा कर लिया. यह तब होता है जब आप एक छवि पर ज़ूम है कि केवल एक सीमित संख्या है इसके साथ जुड़े बिट्स की. यही कारण है कि आप मिल जाएगा क्या है. और वास्तव में, Daven की आंखों में , शायद छह पिक्सल है लेकिन चार कि वास्तव में क्या लिखें वहाँ मंद प्रकाश था. तो समस्या सेट चार अंततः होगा आप विशेष रूप से, इस दुनिया का पता लगाने कुछ की प्रकृति द्वारा हम फाइल मैं / हे, जहां कॉल मैं / ओ के सिर्फ एक अच्छा तरीका है इनपुट और आउटपुट कह. तो इस प्रकार अब तक, बातचीत के सभी हम एक कंप्यूटर के साथ किया है साथ बड़े पैमाने पर किया गया है आपकी कीबोर्ड और स्क्रीन, लेकिन हार्ड डिस्क के साथ इतना नहीं, या लोगों को परे फ़ाइलों की बचत आप अपने आप को लिखें. अपने कार्यक्रमों प्रकार दूर है नहीं, बनाने, और बचत की गई और अपनी फाइलों को अद्यतन करने. खैर, एक फ़ाइल क्या है? खैर, एक JPEG की तरह कुछ. यह तुम हो सकता है एक छवि है है या फेसबुक पर अपलोड, या कहीं भी वेब पर देखते हैं. दरअसल, उस तस्वीर हम बस Daven देखा एक JPEG था. और क्या दिलचस्प है JPEGs तरह फ़ाइलों के बारे में वे पहचाना जा सकता है, आम तौर पर, बिट्स के कुछ पैटर्न से. दूसरे शब्दों में, कि यह क्या है एक GIF से एक JPEG अलग है एक पद से एक पिंग से एक एक्सेल फाइल से दस्तावेज? खैर, यह सिर्फ अलग है बिट्स के पैटर्न. और उन लोगों के अलग पैटर्न हैं आमतौर पर उन फ़ाइलों के शुरू में. आपके कंप्यूटर एक पद को खोलता है ताकि जब डॉक्टर, या एक कंप्यूटर एक JPEG खोलता है, इसे आम तौर पर दिखता है फ़ाइल में पहले कई बिट्स. और यह एक पैटर्न पहचानता है, तो यह ओह, यह एक छवि है, कहते हैं. मेरे लिए यह प्रदर्शित करते हैं एक ग्राफिक के रूप में उपयोगकर्ता. या, ओह, इस एक शब्द डॉक्टर की तरह लग रहा है. मुझे एक निबंध के रूप में उपयोगकर्ता के लिए यह दिखाते हैं. उदाहरण के लिए, JPEGs, यह कर रहे हैं, पता चला है काफी परिष्कृत हुड के नीचे. लेकिन सबसे अधिक हर में पहले तीन बाइट्स जेपीईजी इन तीन नंबर के साथ शुरू करते हैं. तो बाइट शून्य, एक, और दो में, कर रहे हैं सबसे हर जेपीईजी, 255, तो संख्या 216, तो संख्या 255. और आप में सक्षम हो जाएगा क्या अगले सप्ताह कर रही शुरू करने के लिए वास्तव में नीचे poking है JPEGs तरह फ़ाइलों के हुड और बिटमैप फ़ाइलों की तरह, और देख क्या हमेशा के रूप में लंबे समय के लिए हो गया है आप एक कंप्यूटर का उपयोग किया गया है, के रूप में. लेकिन आम तौर पर वहाँ नहीं है क्या इस तरह से दशमलव संख्या की तरह लिखा. कंप्यूटर वैज्ञानिकों नहीं करते दशमलव में बात करते हैं. वे वास्तव में द्विआधारी में बात नहीं करते. आमतौर पर, जब हम चाहते हैं संख्या व्यक्त करने के लिए, हम वास्तव में हेक्साडेसिमल उपयोग, जो आप याद कर सकते हैं समस्या सेट, कहते हैं, से चुनौती दी जो एक, आप एक अलग प्रणाली के बारे में सोचने के लिए. हम, ज़ाहिर है, परिचित हैं नौ के माध्यम से दशमलव, शून्य के साथ. हम द्विआधारी के बारे में बात की थी. और हम वास्तव में नहीं है ज्यादा यहाँ कि उपयोग करने के लिए बाहर पर, कंप्यूटर कि प्रयोग करेंगे क्योंकि. लेकिन प्रोग्रामर बहुत होगा अक्सर, लेकिन हमेशा नहीं, बस, जिसका मतलब है हेक्साडेसिमल का उपयोग यदि आप अपने वर्णमाला में 16 पत्र है के रूप में दो या दो से 10 करने का विरोध किया. तो आप कैसे उच्च करने के लिए गिनती है हेक्साडेसिमल में नौ से? तुम जाओ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, एक, बस कन्वेंशन द्वारा सी, डी, ई, एफ, बी. लेकिन क्या महत्वपूर्ण है कि प्रत्येक है इनमें से एक भी प्रतीक है. कोई 10 है. प्रत्येक क्योंकि, कोई 11 प्रतिशत से है आपके अंक का, सिर्फ दशमलव में पसंद बस बाइनरी में तरह और, बस चाहिए सम्मेलन द्वारा एक ही चरित्र, हो. तो हम वर्णमाला इतना है कि हेक्साडेसिमल के लिए हमारे निपटान पर. तो एक JPEG आप अगर कैसी दिखती है उन पहले तीन बाहर लिख रहे थे दशमलव के रूप में नहीं बाइट्स लेकिन उदाहरण के लिए, हेक्साडेसिमल के रूप में? और क्यों हेक्स कि उपयोगी भी सब क्या है? खैर, एक उदाहरण पर एक त्वरित देखो. मैं बिट्स बाहर लिखना तो अगर कि इन दशमलव numbers-- का प्रतिनिधित्व इस थोड़ा सा लगना हो सकता है अब वापस कुछ हफ्तों से, छोड़ एक और लेकिन सही एक बहुत आसान कर रहे हैं. 255 सबसे बड़ी संख्या है कि हम था आठ बिट के साथ प्रतिनिधित्व कर सकता है. यह सभी लोगों को थी. तो हल्का है कि केवल एक दिलचस्प बीच एक है. और आप की तरह बाहर करते हैं गणित, तुम, वास्तव में, कि परिणाम निकालना होगा एक के उस पैटर्न और शून्य 216 का प्रतिनिधित्व करता है. तो चलो बस के लिए निर्धारित करते हैं अब इन सही हैं. लेकिन क्यों यह दिलचस्प है? खैर, एक बाइट, निश्चित रूप से, आठ बिट है. और यह अगर आपको लगता है कि पता चला है चार बिट्स के दो हिस्सा के रूप में एक बाइट की, इस तरह. मुझे बस कुछ जगह जोड़ दें. तो इससे पहले, के बाद. मैं बस कुछ सफेद अंतरिक्ष जोड़ दिया है यहाँ दृश्य के लिए के लिए. कैसे हम अब में प्रतिनिधित्व हो सकता है, कहते हैं, हेक्साडेसिमल बिट्स के प्रत्येक ट्रैक्टर, चार बिट्स के प्रत्येक सेट? उदाहरण के लिए, बाईं तरफ तो अब, हम द्विआधारी में 1111 है. दशमलव में उस नंबर क्या है, आप गणित बाहर करते हैं? आप लोगों को जगह नहीं है, twos जगह, चौके जगह, और आठ भाग जगह. दर्शक: 15. डेविड जे Malan: यह 15 है. इसलिए हम आठ प्लस चार करते हैं प्लस दो प्लस एक, हम 15 मिलता है. तो मैं नीचे 15 नीचे लिख सकता है 1111, लेकिन यहां पूरे अंक हेक्साडेसिमल है, दशमलव नहीं. तो बजाय नीचे लिख के 15, 1-5, मैं, हेक्स में है कि लिखने के लिए जा रहा हूँ यदि आपके पास तुम वापस अगर आपको लगता है जो एफ के माध्यम से शून्य, क्या 15 होने जा रहा है? दर्शक: एफ. डेविड जे Malan: तो यह है कि यह च पता चला है. और तुम कह कर कि बाहर काम कर सकते हैं, एक 10 है अगर ठीक है, तो ठीक है, एफ 15 है. तो वास्तव में, हम फिर से लिखना सकता है च च के रूप में संख्या के इस एक ही सेट. और फिर हम गणित का एक सा है, हम चाहते हैं कि डी है कि परिणाम निकालना हूँ. आठ, बहुत आसान है क्योंकि हम आठ भाग जगह में एक एक है. और फिर, हम एफ एफ के एक जोड़े को और अधिक है. तो क्या मनुष्य सम्मेलन से करते हैं वे का उपयोग करते समय हेक्साडेसिमल वे बस है अधिक संक्षेप में यह एक छोटे से लिखना, कि सफेद अंतरिक्ष की सबसे से छुटकारा. और बस के लिए सुपर स्पष्ट होना इस हेक्साडेसिमल है कि पाठकों, बीच साधारण सम्मेलन मनुष्य आप शून्य लिखना है अन्य कोई अर्थ नहीं है, जो एक्स, के एक दृश्य पहचानकर्ता से, यहाँ एक हेक्स नंबर आता है. और फिर, तुम, च दो अंक डाल इस मामले में च, तो घ एक, तो च च. तो लंबी कहानी को कम, हेक्साडेसिमल सिर्फ आदत उपयोगी हो सकता है की प्रत्येक क्योंकि इसके अंक, एफ के माध्यम से शून्य, पूरी तरह से लाइनों चार बिट्स के एक पैटर्न के साथ. आप दो हेक्साडेसिमल अंक है, तो शून्य बार बार एफ, के माध्यम से, कि पूरी तरह से आप देता है आठ बिट्स या एक बाइट. यह आदत है तो इसलिए पारंपरिक उपयोगी हो. कोई बौद्धिक नहीं है सच से परे है कि सामग्री, अपनी वास्तविक उपयोगिता के अलावा अन्य. अब JPEGs ही नहीं हैं ग्राफिक्स के लिए फ़ाइल स्वरूपों. आप कर रहे हैं कि याद हो सकता है दुनिया में इस तरह फाइलें, कम से कम कुछ साल पहले से. तो यह वास्तव में था Windows XP में स्थापित दुनिया भर के कंप्यूटरों के लाखों लोगों पर. और यह एक बिटमैप फ़ाइल, बीएमपी था. और एक बिटमैप फ़ाइल के रूप में आप अगले देखेंगे सप्ताह, बस डॉट्स की एक पद्धति का मतलब है, वे कहते हैं के रूप में पिक्सल, एक सच, बिट्स पर मानचित्र. तो क्या हुआ, हालांकि दिलचस्प है, इस फ़ाइल प्रारूप, बीएमपी के बारे में है, कि हुड के नीचे, यह सिर्फ तीन बाइट्स से भी अधिक है इतना है कि अपने शीर्ष लेख रचना पहले कुछ काटता है बात करने के लिए. यह वास्तव में एक छोटे से लग रहा है पहली नज़र में जटिल. और तुम पी सेट में यह देखेंगे. और कुछ हो रही है इस के विशेष बाहर अब सिर्फ इस तथ्य के रूप में, इतना महत्वपूर्ण नहीं है कि हर बिटमैप की शुरुआत में फाइल, एक ग्राफिकल प्रारूप, संख्या की एक पूरी गुच्छा है. अब माइक्रोसॉफ्ट, इस प्रारूप के लेखक, उन कॉल करने के लिए जाता है बातें नहीं ints और घर का काम और तैरता लेकिन शब्दों और घ शब्दों और चाहता है और बाइट्स. तो वे सिर्फ अलग डेटा प्रकार के कर रहे हैं. वे अलग अलग नामों हो एक ही बात के लिए. लेकिन आप पी सेट चार में देखेंगे. लेकिन यह कहने के लिए ही है कि एक मानव अगर पर कुछ .BMP फ़ाइल डबल क्लिक करता है उसकी या उसके हार्ड ड्राइव, और एक खिड़की खुलती उसे या उस छवि दिखा ऊपर, ऑपरेटिंग क्योंकि हुआ सिस्टम शायद नहीं ही देखा .BMP फ़ाइल एक्सटेंशन फ़ाइल के नाम में, लेकिन यह भी तथ्य है कि वहाँ कुछ बिट्स के पैटर्न के लिए सम्मेलन बहुत शुरुआत में कि बिटमैप फ़ाइल की. लेकिन अब पर ध्यान केंद्रित करते हैं इस तरह के एक जटिल फ़ाइल, लेकिन इसके बजाय इस तरह से कुछ पर. मैं, एडिट में यहाँ मान लीजिए सिर्फ शुरुआत है बहुत आसान है कि एक कार्यक्रम का. मैं कुछ ऊपर भी शामिल है मिल गया है. अब मुझे मिल गया है # शामिल "structs.h" लेकिन मैं एक पल में वापस करने के लिए आया हूँ. लेकिन यह अभी के लिए उपयोगी है. तो यह एक कार्यक्रम है कि लागू करने के लिए जा रहा है रजिस्ट्रार के डेटाबेस की तरह. तो छात्रों का एक डाटाबेस, और दुनिया में हर छात्र शायद कुछ एक नाम और एक घर और है अन्य सामान है, लेकिन हम इसे सरल रखने देंगे. प्रत्येक छात्र को एक नाम और एक घर है. मैं एक लिखना चाहता था तो अगर जिसका उद्देश्य जीवन में कार्यक्रम बस से पुनरावृति करने के लिए किया गया था तीन अप करने पर शून्य, तीन छात्रों को अगर वहाँ हार्वर्ड विश्वविद्यालय में. और मैं सिर्फ GetString का उपयोग कर, प्राप्त करना चाहते हैं, प्रत्येक छात्र का नाम और घर, और फिर बस उन बाहर प्रिंट. इस तरह के सप्ताह की तरह है एक, दो सप्ताह सामान अब, मैं बस के लिए एक जहां चाहते हैं पाश या ऐसा कुछ. और मैं GetString कुछ कॉल करना चाहते हैं बार, और फिर एक बार कुछ च मुद्रित. तो मैं हालांकि ऐसा कैसे हो सकता है, जब एक नाम और एक घर दोनों प्रत्येक छात्र के लिए शामिल कर रहे हैं? तो मेरी पहली वृत्ति हो सकता है इस तरह से कुछ करना हो. मैं पहले अच्छी तरह से, मुझे दे, कह सकते हैं, , नामों बुलाया तारों की एक सरणी का कहना है. और मैं एक hardcode तीन यहाँ नहीं करना चाहती. क्या मैं वहाँ डाल करना चाहते हैं? सिर्फ है कि क्योंकि, छात्रों को तो शीर्ष पर घोषित एक स्थिर, मैं hardcode की जरूरत नहीं है, बस इतना कई स्थानों में तीन. इस तरह, मैं, यह एक ही स्थान बदल सकते हैं और यह हर जगह एक परिवर्तन को प्रभावित करता है. और फिर, मैं क्या कर सकता है स्ट्रिंग छात्रों घरों. और अब, मैं ऐसा कुछ कर सकता है मैं छात्रों <; के लिए (i = 0 int i ++. तो मैं तेजी से टाइप कर रहा हूँ, लेकिन यह है अब शायद परिचित वाक्यविन्यास. और अब, यह अधिक हाल था. मैं मैं वें में डाल करना चाहते हैं छात्र का नाम, मुझे लगता है मैं यह करने के बारे में सोच. और फिर, नहीं नाम लेकिन घरों मैं ब्रैकेट. मैं यह GetString करते हैं, और जाने मुझे वापस जाना है और इस लाइन को ठीक. सहमत हैं? असहमत हैं? यह बहुत उपयोगकर्ता के अनुकूल नहीं है. मुझे क्या करना है उपयोगकर्ता नहीं बताया है. लेकिन अब, मैं तो यह भी बाद में, चलो करना चाहता था कहते हैं, इन बातों प्रिंट out-- तो TODO बाद में. मैं अधिक के साथ क्या करने जा रहा हूँ यकीनन इस this-- के सही कार्यान्वयन नाम और मकान, तीन हो रही एक उपयोगकर्ता से प्रत्येक की उनमें से कुल. लेकिन यह बहुत अच्छा डिजाइन सही नहीं है? क्या एक छात्र न सिर्फ एक नाम है और एक घर, लेकिन यह भी एक आईडी नंबर, और एक टेलीफोन नंबर, और एक ईमेल पते, और शायद एक होम पेज, और शायद एक ट्विटर हैंडल, और अन्य विवरण के किसी भी संख्या एक छात्र या एक व्यक्ति के साथ जुड़े, अधिक आम तौर पर. हम जोड़ने के लिए शुरू होगा कैसे इस कार्यक्रम के लिए कार्यक्षमता? खैर, मैं शायद सबसे आसान तरीका की तरह लग रहा है , ऐसा कुछ कर हम कहते हैं करने के लिए हो सकता है, आईडी छात्रों int. तो मैं वहाँ में अपने सभी आईडी डाल सकता है. और फिर, कुछ के लिए फोन नंबर की तरह, मैं कैसे यकीन नहीं है बस अभी तक उस का प्रतिनिधित्व करते हैं. तो चलो आगे और सिर्फ कॉल जाने दो यह छात्रों, Twitters जो थोड़ा अजीब, but-- है और खेतों एक गुच्छा अधिक. मैं प्रभावी ढंग से करने के लिए शुरू कर दिया है कॉपी और यहाँ पेस्ट. और यह बहुत बढ़ती जा रही है बहुत जल्दी बोझल, है ना? अगर वहाँ थे यह अच्छा नहीं होगा दुनिया में एक आंकड़ा संरचना में जाना नहीं एक पूर्णांक या एक स्ट्रिंग, लेकिन कुछ के रूप में उच्च स्तर, एक अमूर्त, तो एक छात्र के रूप में जाना जाता है, बात करने के लिए? सी में निर्मित के साथ नहीं आया था छात्रों के लिए कार्यक्षमता, लेकिन मैं इसे इस तरह देना चाहता था तो क्या? खैर, यह मैं जा रहा हूँ, पता चला है , structs.h यहाँ नामक एक फ़ाइल खोलने और आप वास्तव में ऐसा कर सकते हैं. और हम अब इस कर रही शुरू करने जा रहे हैं. और पी सेट तीन के हुड के नीचे, आप पहले से ही अब यह कर रहा हूँ. एक छ रंगरूट के रूप में ऐसी कोई बात नहीं है या प्रोग्रामिंग भाषा सी में एक छ अंडाकार स्टैनफोर्ड में लोग उन कार्यान्वित यहां इस दृष्टिकोण का उपयोग करके डेटा प्रकार, अपने स्वयं के नए आंकड़ों की घोषणा एक नए कीवर्ड का उपयोग प्रकार कहा जाता संरचना और एक अन्य एक बुलाया typedef. और वास्तव में, भले ही वाक्यविन्यास सामान से थोड़ा अलग दिखता है हम में, पहले देखा है सिद्धांत, यह सुपर आसान है. यह सिर्फ "एक प्रकार परिभाषित मतलब है." यह एक होने जा रहा है संरचना, और एक संरचना सिर्फ एक कंटेनर की तरह है कई बातों के लिए. और उस संरचना जा रहा है नाम नामक एक स्ट्रिंग है, और एक स्ट्रिंग घर बुलाया. और चलो बस सुविधा के लिए, कहते हैं, इस पूरे डेटा संरचना छात्र. तो पल आप को मिल अर्धविराम, तुम अब अपने खुद के डेटा बनाया प्रकार बुलाया छात्र कि अब, पूर्णांक के साथ खड़ा है और नाव, और चार, और स्ट्रिंग, और जी रंगरूट, और जी अंडाकार, और किसी भी संख्या अन्य बातों के लोगों का आविष्कार किया है. इसलिए इस बारे में उपयोगी क्या है अब मैं वापस जाने के लिए अगर यह है कि 0 struct और इसे खत्म करने के लिए मैंने लिखा जो कार्यान्वयन, यहाँ अग्रिम में, सभी कि नोटिस अपरिहार्य messiness की कि मैंने कहा कि के रूप में शुरू हो रहा है के बारे में था फोन नंबर और Twitters और सभी करने के लिए इन अन्य चीजों एक छात्र की परिभाषा, अब इसे संक्षेप में लपेटा है छात्रों का सिर्फ एक सरणी के रूप में. और उन छात्रों में से प्रत्येक अब इसके अंदर कई चीजें हैं. तो यह है कि सिर्फ एक सवाल छोड़ देता है. आप कैसे नाम पर मिलता है, और घर, और आईडी, और जो कुछ है छात्र के अंदर? सुपर सरल, के रूप में अच्छी तरह से. नई वाक्य रचना, लेकिन एक साधारण विचार. सरणी में आप बस सूचकांक हम पिछले हफ्ते और इस रूप में किया था. और क्या स्पष्ट रूप से है वाक्यविन्यास का नया टुकड़ा? बस., जिसका अर्थ है "अंदर जाओ संरचना और क्षेत्र कहा जाता हो नाम, घर बुलाया क्षेत्र मिलता है छात्र बुलाया क्षेत्र मिलता है. " तो पी सेट तीन में, आप कर रहे हैं अब भी उस पर काम कर रहे, अभी और बहुत सारे लोगों को , आप के रूप में पता है कि कर रहे हैं की तरह चीजों का उपयोग शुरू जी rects और जी ovals और अन्य चीजें नहीं लगती कि सप्ताह शून्य, एक, या दो से आते हैं, कि स्टैनफोर्ड क्योंकि पता है कि कुछ नए डेटा प्रकार की घोषणा की. और वास्तव में, कि वास्तव में है क्या हम करेंगे पी सेट चार में, के रूप में अच्छी तरह से करते हैं, जब हम चीजों के साथ सौदा करने के लिए शुरू छवियों, बिटमैप, और अधिक की तरह. इसलिए कि सिर्फ एक नमूना और एक है क्या आ रहा है के लिए मानसिक मॉडल. अब, मैं procrastinated एक बिट आज सुबह. मैं देखने के लिए क्या तरह के उत्सुक था माइक्रोसॉफ्ट वॉलपेपर वास्तव में आज की तरह लग रहा है. और यह 2006 में किसी को पता चला है वास्तव में लगभग ठीक करने के लिए चला गया उसी जगह हकीकत में तस्वीर क्या इन दिनों ऐसा लग रहा है. क्षेत्र अब एक छोटे से ऊंचा हो गया है. तो छवियों के अब बोल रहा है, यहाँ Daven वापस लाने स्क्रीन और निकोलस पर, और सिर्फ तुम्हें याद दिलाना कि तुम दोपहर के भोजन के लिए हमारे साथ शामिल करना चाहते हैं तो हमारे सामान्य यूआरएल के लिए इस शुक्रवार, सिर यहां. तो हम कहाँ सोमवार को बंद छोड़ दिया? हम सही, इस समस्या को पेश किया? यह प्रतीत होता है एक सही था स्वैप के कार्यान्वयन, जिससे आप, दो ints लेने एक, बी नामक एक, एक बुलाया लौरा यहाँ था, जैसे उन्हें स्वैप दूध और पानी के साथ मंच पर, एक अस्थायी उपयोग करके चर, या एक खाली कप, हम एक और एक में में बी डाल सकता है ताकि चीजों की एक गड़बड़ कर के बिना बी. हम एक चर का उपयोग किया. यह अस्थायी कहा जाता है. लेकिन मौलिक क्या था सोमवार को इस कोड के साथ समस्या है? यहां समस्या क्या थी? हाँ. दर्शक: यह अधिक स्थान लेता है. डेविड जे Malan: अधिक ऊपर ले जाता है अंतरिक्ष, मैं एक चर का उपयोग कर रहा हूँ क्योंकि, और वह ठीक है. यह सच है, लेकिन मैं कर रहा हूँ यह ठीक है कहने जा रहा. यह भव्य में केवल 32 बिट्स है चीजों की योजना है, तो कोई बड़ी बात नहीं. अन्य विचार? दर्शक: यह केवल स्वैप स्थानीय स्तर पर चर. डेविड जे Malan: बिल्कुल. यह केवल स्थानीय चर स्वैप. किसी भी समय आप एक function-- कॉल क्योंकि मैं Annenberg से ट्रे था जब पिछली बार, आप तल पर मुख्य है. जैसे ही आप नामक एक समारोह फोन के रूप में स्वैप, स्वैप एक्स और वाई नहीं मिलता है, मूल मान. क्या हम दावा किया था, स्वैप मिलता है? दर्शक: प्रतियां. डेविड जे Malan: उन की प्रतियां तो. तो यह आप पर है, एक और दो हो जाता है पिछली बार से उदाहरण याद करते हैं, लेकिन एक और दो की प्रतिलिपि कि सफलतापूर्वक बदली हैं. लेकिन दुर्भाग्य से अंत में, उन मूल्यों को अभी भी वही कर रहे हैं. तो हम साथ यह देख सकते हैं हमारे नए दोस्त, उम्मीद है कि GDB, आप या TFS और सीए है कि निम्नानुसार की ओर से मार्गदर्शन दिया गया. तो कोई स्वैप याद चलो like-- लग रहा है इस तरह this-- दिखता खुला. हम दो के लिए, एक के लिए वाई एक्स initialized. प्रिंट एफ का एक गुच्छा था. लेकिन फिर, कुंजी कॉल यहाँ, स्वैप करने के लिए किया गया था जो वास्तव में कोड हम है बस एक पल पहले देखा था. कौन सा पहली बार में सही है नज़र, लेकिन कार्यात्मक, इस कार्यक्रम की वजह से काम नहीं करता है यह स्थायी रूप से एक्स और वाई स्वैप नहीं है. तो, एक त्वरित गर्म है यह देखते हैं यहाँ GDB, एक ./noswap साथ. भारी जानकारी का एक गुच्छा है कि मैं अब के लिए नियंत्रण एल के साथ से छुटकारा मिल जाएगा. और अब, मैं जा रहा हूँ आगे बढ़ो और इसे चलाते हैं. और दुर्भाग्य से, कि कि उपयोगी नहीं था. यह इस के अंदर कार्यक्रम भागा कार्यक्रम, GDB, एक डिबगर बुलाया लेकिन यह मेरे आसपास प्रहार नहीं जाने दिया. इसलिए मैं वास्तव में रोक सकते हैं कैसे इस कार्यक्रम के अंदर निष्पादन? तो टूट गया. और मैं किसी पर भी तोड़ सकता है लाइन नंबर, एक, 10, 15. लेकिन मैं यह भी प्रतीकात्मक तोड़ सकते हैं ब्रेक के मुख्य कह कर. और वह एक ब्रेक सेट करने के लिए जा रहा है बिंदु, जाहिरा तौर पर मुख्य लाइन 16 पर. और जहां लाइन 16 है? के कोड को ऊपर जाने दो और noswap के लिए ऊपर जाना है. और वास्तव में, लाइन 16 है बहुत पहले कार्यक्रम में. तो अब, मुझे आगे जाना है और प्रकार अगर , इस समय चलाने लिखें, इसे रोक दिया. तो चलो चारों ओर से प्रहार करते हैं. क्यों एक्स शून्य है x-- प्रिंट? और डॉलर के हस्ताक्षर की अनदेखी. यही शौक़ीन के लिए बस है कार्यक्रम का उपयोग. क्यों पल में एक्स शून्य है? हाँ. दर्शक: यह सही से पहले रोके गए रेखा 16, नहीं वास्तव में लाइन 16 पर. डेविड जे Malan: बिल्कुल. GDB, डिफ़ॉल्ट रूप से रुका हुआ है, किया गया है बस लाइन 16 से पहले निष्पादन. तो यह निष्पादित नहीं किया गया है जो कुछ अज्ञात मूल्य का है एक्स का मतलब है. और हम यह है कि भाग्यशाली है शून्य की तरह साफ कुछ. तो अब मैं अगले प्रकार हैं, अब यह 16 से मार डाला. मुझे 17 को निष्पादित करने के लिए यह इंतज़ार कर रहा है. मुझे आगे और प्रिंट एक्स चलते हैं. यह एक है. मुझे आगे और प्रिंट वाई चलते हैं. अब मैं क्या देखना चाहिए? दर्शक: [अश्राव्य] डेविड जे Malan: थोड़ा जोर. दर्शक: [अश्राव्य] डेविड जे Malan: काफी नहीं एक आम सहमति. तो हाँ, हम कुछ कचरा मूल्य देखते हैं. अब, वाई वहाँ 134514064 है. खैर, यह सिर्फ कुछ कचरा मूल्य है. मेरा कार्यक्रम रैम का उपयोग करता है विभिन्न प्रयोजनों के लिए. अन्य कार्य नहीं है. अन्य लोगों को अपने कंप्यूटर के अंदर लिखा था. तो उन बिट्स के लिए इस्तेमाल किया गया है अन्य मूल्यों, और मैं क्या देख रहा हूँ कुछ के अवशेष है कि स्मृति के पूर्व उपयोग. तो कोई बड़ी बात नहीं, क्योंकि जैसे ही मैं अगले टाइप करें और फिर वाई प्रिंट के रूप में, यह करने के लिए प्रारंभ है मैं चाहता हूँ कि मूल्य. तो अब, चलो एक छोटे से तेजी से आगे जाने दिया. अगले के लिए एन. चलो फिर से ऐसा करते हैं. चलो फिर से ऐसा करते हैं. लेकिन मैं हिट नहीं करना चाहते यहाँ यह, क्योंकि मैं अगर अंदर क्या हो रहा है देखना चाहते हैं स्वैप की, आदेश क्या है? दर्शक: कदम. डेविड जे Malan: कदम. तो यह एक में मुझे कदम बल्कि इस पर से समारोह,. और अब, यह एक छोटे से गुप्त है ईमानदारी से, लेकिन यह सिर्फ है मैं अब लाइन 33 में हूँ मुझे बता रहा है. और फिर यह करते हैं. छापा अस्थायी. कचरा मूल्य, नकारात्मक इस समय, लेकिन यह सिर्फ अभी भी एक कचरा मूल्य है. तो चलो आगे, प्रिंट अस्थायी करते हैं. यह 1 करने के लिए प्रारंभ है जो एक उर्फ ​​एक्स का मान था. अब, जहां हमारे एक हैं और से आ रही एक्स? खैर, हम मुख्य में नोटिस इन मूल्यों एक्स और वाई बुलाया. हम तो इस प्रकार के रूप में उन्हें स्वैप करने के लिए पारित किया. एक्स अल्पविराम वाई पहले आया था. और फिर, स्वैप उन्हें एक्स और वाई कह सकते हैं. लेकिन स्पष्टता के लिए, यह है ए और बी उन्हें बुला. लेकिन एक और बी अब होने जा रहे हैं क्रमशः एक्स और वाई, की प्रतियां. मैं अस्थायी वापस GDB को जाना तो अगर अब एक और एक अब एक है. मैं अब आगे क्या और अगर लेकिन प्रिंट करना एक, एक पर पहले से ही ले जाया गया है. दूध पूर्व में डाल दिया गया है संतरे का रस का गिलास, या ठीक इसके विपरीत. और मैं अब अगले फिर से करते हैं, और अगर मैं एक मानसिक स्वास्थ्य की जांच के रूप में बाहर प्रिंट, एक अभी भी दो है, लेकिन बी अब एक है. सच कहूँ तो, यह अभी भी वहाँ है. मैं क्या है अस्थायी परवाह नहीं है. लेकिन जैसे ही मैं अब टाइप के रूप में, हम कहते हैं, अब मैं अंत में हूँ, वापस जाने के लिए जारी कार्यक्रम. और दुर्भाग्य से, एक्स है अभी भी एक और वाई अभी भी दो है. तो वहाँ GDB की उपयोगिता क्या था? यह मुझे ठीक करने में मदद नहीं की थी समस्या से प्रति, लेकिन यह उम्मीद है कि मुझे मदद साकार से यह समझने कि हाँ, मेरा तर्क सही है, लेकिन मेरे कोड अंततः नहीं हो रही है एक स्थायी प्रभाव. इसलिए कि हम एक समस्या है अब आज हल करने के लिए जा रहा है. लेकिन इस के माध्यम से वहाँ मिलता है. स्ट्रिंग एक झूठ है. यह भी, नहीं एक डेटा प्रकार यह बात है सी में मौजूद है कुछ के लिए एक पर्याय हो गया कुछ और के लिए समय, और हम के रूप में इस प्रकार है कि प्रकट कर सकते हैं. मुझे आगे जाना है और खोलने के चलो एक कार्यक्रम तुलना -0 बुलाया. और यह एक प्रकार बाहर के बजाय, हम कोड के माध्यम से चलना शुरू करेंगे मैं पहले से ही लिखा है, लेकिन यह केवल कुछ लाइनें है. इसलिए इस तुलना -0 है. और पहली बात मैं कर रहा हूँ पाठ की एक पंक्ति हो रही है. लेकिन मैं क्या कर रहा हूँ नोटिस पहली बार के लिए कर रही है. क्या स्पष्ट रूप से लाइन 21 के बारे में अलग है? दरअसल, एक मिनट रुको. यह प्रति दो है. यही कारण है कि यहां तक ​​कि सही कार्यक्रम नहीं है. सब ठीक है, बिगाड़ने चेतावनी. ठीक है, तो कोई बात नहीं. यह एक भविष्य सवाल का जवाब है. यहाँ -0 तुलना, और मैं कर रहा हूँ है पाठ की एक पंक्ति प्राप्त करने के बारे में. कार्यक्रम के बहुत सरल. तो यह स्पष्ट है. इस सप्ताह एक, दो सप्ताह सामान की तरह है पल में. स्ट्रिंग एस = GetString. अब, मैं यहाँ नीचे फिर से कहना. स्ट्रिंग टी = GetString. इस में और फिर, पिछले बात कार्यक्रम, जैसा कि इसके नाम का सुझाव है, मैं उनकी तुलना करने की कोशिश करने के लिए जा रहा हूँ है. तो अगर, पहली स्ट्रिंग, = टी, तो मैं कर रहा हूँ के बराबर होती है आप एक ही बात को टाइप कहने जा रहा. वरना, मैं कहने जा रहा हूँ आप अलग अलग बातें लिखें. तो चलो संकलन और इस कार्यक्रम चलाते हैं. तो शून्य तुलना करना. अच्छा लग रहा है. कोई संकलन त्रुटियों. मुझे अब आगे चलते हैं और ./compare -0 लिखें. मुझे आगे जाना है और कुछ कहते हैं कि : Daven और कुछ: रोब. और मैं अलग अलग बातें लिखें. अब तक सब ठीक है. कार्यक्रम सही हो रहा है. लेकिन फिर इसे चलाते हैं. कुछ कहो: Gabe. कुछ कहो: Gabe. ठीक है. शायद मैं अंतरिक्ष बार मारा या कुछ दिखलाना. चलो फिर से ऐसा करते हैं. Zamyla तो. Zamyla. अलग अलग चीजें हैं. तो क्या चल रहा है? इसलिए हम इन दो लाइनों है कोड, GetString दो बार बुलाया जा रहा है. और फिर, मैं बस हूँ एस और टी की तुलना करने की कोशिश कर रहा. लेकिन हो रहा है तो वास्तव में क्या? खैर, मेरी लिखावट के बारे में कुछ हद तक इस उदाहरण कसाई. और वास्तव में फेंक दो इस को यहाँ पर, के रूप में अच्छी तरह से. इसलिए हम एक लाइन की तरह है स्ट्रिंग एस = GetString. इसलिए कि बस पहले है उस कार्यक्रम से दिलचस्प लाइन. लेकिन यह सब समय के लिए किया गया है क्या हुड के नीचे चल रहा है? खैर, बाएं हाथ पर पक्ष स्ट्रिंग है, जो चर के कुछ प्रकार है, और यह कहा जाता है. इसलिए मैं इस स्मृति उपयोग कर रहा है कि पता है, या राम, किसी तरह अपने कंप्यूटर में. तो मैं सूक्ष्म रूप में करने के लिए जा रहा हूँ एक वर्ग के रूप में उस आकर्षित. 32 बिट, यह पता चला है, लेकिन भविष्य में उस पर और अधिक. और फिर, क्या यहाँ पर हो रहा है? ठीक है, जाहिर GetString उपयोगकर्ता से एक स्ट्रिंग हो जाता है. और GetString मिला Zamyla या Gabe या Daven. तो चलो पहला चुनने उन की, Daven था. इसलिए प्रभावी रूप से, क्या GetString मिला मुझे लगता है कि पहले मामले में डी ए वी ए एन था. और फिर, और क्या किया यह मुझे चुपके से दे? दर्शक: [अश्राव्य] डेविड जे Malan: हाँ, / 0 या अशक्त चरित्र. तो इसे प्रभावी ढंग से मुझे एक स्ट्रिंग दे दी है. लेकिन हम पहले से ही पिछले से पता एक स्ट्रिंग सिर्फ एक सरणी है कि लग रहा है वर्ण की, और यह द्वारा समाप्त कर रहा है इस विशेष प्रहरी चरित्र, / 0. लेकिन अगर यह सच है और यह एक वर्ग है, यह स्पष्ट रूप से एक बहुत बड़ा आयत है. और वास्तव में, यह है, मैं केवल 32 बिट का दावा. और यह स्पष्ट रूप से 32 से अधिक है बिट्स, यह शायद इसलिए है क्योंकि आठ प्लस आठ प्लस आठ प्लस आठ प्लस आठ, सिर्फ ASCII में बाइट्स की वजह से. कैसे हो हम फिट करने के लिए जा रहे हैं यहाँ इस छोटे से बॉक्स में Daven? खैर, क्या वास्तव में GetString कर रहा है? खैर, इस ग्रिड यहां का प्रतिनिधित्व करता है मेरे कंप्यूटर की मेमोरी या राम. तो चलो मनमाने ढंग से अगर हम कहते हैं कि इनमें से प्रत्येक, एक बाइट का प्रतिनिधित्व करता है फिर हम एक के बारे में सोच सकते हैं बाइट एक पते वाले के रूप में, 33 ऑक्सफोर्ड स्ट्रीट, या 34 की तरह ऑक्सफोर्ड स्ट्रीट, या 35 ऑक्सफोर्ड स्ट्रीट. तो घरों पते बस की तरह और इमारतों पते हैं, इसलिए की व्यक्तिगत बाइट्स करना स्मृति पते या नंबर हैं कि विशिष्ट उन्हें पहचान. अब, यह मनमानी है. लेकिन मैं जा रहा हूँ, इसे सरल रखने के लिए बस कन्वेंशन द्वारा हेक्साडेसिमल उपयोग, लेकिन 0x अन्य कोई मतलब नहीं है से "इस हेक्साडेसिमल है." और मुझे लगता है कि दावा करने के लिए जा रहा हूँ 'डी' स्मृति में बाइट एक पर समाप्त होता है. मैं और कुछ नहीं में चल रहा है स्मृति, ताकि Daven पहला स्थान मिला बाइट एक पर. यह तो, 0x2 होने जा रहा है. इस 0x3 करने जा रहा है. इस 0x4 होने जा रहा है. इस 0x5 करने जा रहा है. इस 0X6 होने जा रहा है. लेकिन अगर आप एक बार में सोचना शुरू क्या कंप्यूटर के करने के बारे में हुड के नीचे, आप अनुमान करने शुरू कर सकते हैं आप कैसे हैं, कुछ साल पहले, होता खुद सी को लागू किया है. शायद GetString क्या है returning-- यह क्योंकि ऐसा नहीं है की तरह लगता है लौटने Daven, दर असल, वह निश्चित रूप से नहीं जा रहा है क्योंकि इस छोटे box-- में फिट करने के लिए तो क्या GetString शायद लौट रहा है? दर्शक: [अश्राव्य] डेविड जे Malan: Daven का स्थान. और यह यह कर दिया गया है कभी एक सप्ताह के बाद से. क्या GetString सच है लौटने के एक स्ट्रिंग, प्रति नहीं है. उस छोटे सफेद झूठ में से एक है. यह के पते लौट रहा है स्मृति में स्ट्रिंग, विशिष्ट पता. Daven 33 ऑक्सफोर्ड स्ट्रीट पर रहता है. लेकिन अधिक संक्षेप, गेविन रहता है 0x1 में, नंबर एक का पता. तो क्या इस में डाल दिया जाता है छोटे से बॉक्स तो, स्पष्ट होना कि स्ट्रिंग के बस पता है. तो यह सब समय, इस है पर जा कर दिया गया. लेकिन इस पर संकेत क्या अब सब तो यह है कि इसके अंदर एक नंबर, कौन है आप को रोकने के लिए, प्रोग्रामर, में किसी भी नंबर डाल से किसी भी चर और बस कूद स्मृति की है कि हिस्सा करने के लिए? और वास्तव में, हम देखेंगे एक खतरा है कि अगले समय है. लेकिन अब के लिए, यह अपर्याप्त महसूस करता है. मैं कहता हूँ, तो मुझे एक मिल स्ट्रिंग, आप मुझे Daven दे. लेकिन क्या तुम सच में मुझे Daven देना नहीं है. आप मुझे दे सभी Daven की पता है. मैं तो निश्चित रूप से पता है कैसे जहां Daven शुरू होता है और ends-- कहानी के weird-- हो रही Daven शुरू होता है और समाप्त होता है जहां, और, अगले तब स्मृति में स्ट्रिंग शुरू होता है? ठीक है, तुम सौंपने रहे हैं मुझे Daven की शुरुआत अनिवार्य रूप से, मुझे कैसे पता चलेगा उसके नाम के अंत कहाँ है? यह विशेष अशक्त चरित्र, जो सभी को और अधिक महत्वपूर्ण है अब नीचे तार अगर हुड बस पहचान कर रहे हैं विशिष्ट स्मृति में उनके स्थान के आधार पर. तो यह सब समय है, कि क्या चल रहा है. इसलिए हम अब देखो यहाँ कोड की व्याख्या आप लाइन 26 में बग होगा. क्यों Zamyla और Zamyla अलग है? क्यों Gabe और Gabe अलग है? हाँ, पीठ में. दर्शक: वे अलग पते हैं. डेविड जे Malan: बस क्योंकि वे अलग पते हैं. आप GetString कॉल क्योंकि जब फिर, मैं यहाँ जल्दी करूँगा जो, इस दूसरी लाइन, स्ट्रिंग है टी, मुझे लगता है कि कार्यक्रम में किया था, GetString के लिए किसी अन्य कॉल के बराबर होती है. मैं फोन अगली बार GetString, मैं जा रहा हूँ स्मृति का एक अलग हिस्सा पाने के लिए. GetString अनुमति दी है ऑपरेटिंग पूछने के लिए अधिक से अधिक स्मृति के लिए प्रणाली. यह एक ही पुन: उपयोग करने के लिए नहीं जा रहा है छह बाइट्स हर बार. यह एक नया हो रहा है स्मृति का हिस्सा, जो टी पाने के लिए जा रहा है इसका मतलब यहाँ पर कुछ अन्य मूल्य. मैं ऐसा इसलिए जब एस = बराबर होती है टी, आप की तुलना नहीं कर रहे हैं यह और एक के खिलाफ के खिलाफ डी इस और इस के खिलाफ वी. आप इस तुलना कर रहे हैं , जो इस के खिलाफ स्पष्ट रूप से सुंदर useful-- useless-- है , बहुत बेकार है वास्तव में कौन है क्योंकि तार स्मृति में हैं जहां परवाह करता है? और वास्तव में, हम नहीं है. और हम नहीं जा रहे हैं विशेष रूप से ध्यान रखने लगते हैं. केवल कीड़े पैदा कर सकते हैं कि हद तक और सुरक्षा खतरों इच्छा पैदा कर सकते हैं हम वास्तव में इस बारे में देखभाल करने के लिए शुरू करते हैं. तो चलो इस समस्या को दूर करते हैं. आप सुपर बस इसे ठीक, पता चला है. और जैसा कि मैंने पहले, वास्तव में चलो फिर पता चलता है कि, क्या होगा एक CS50 वर्ग में यदि आप करते हैं, और आप को लागू करने के लिए किया था दो तार के खिलाफ एक तुलना. आप स्पष्ट रूप से सिर्फ एस = टी बराबर होती उपयोग नहीं कर सकते. लेकिन सिर्फ तार्किक रूप से, कैसे आप इस स्ट्रिंग तुलना करेंगे सी कोड का उपयोग कर इस स्ट्रिंग के खिलाफ? हाँ. दर्शक: बस करना पाश के लिए [अश्राव्य] डेविड जे Malan: बिल्कुल सही. दर्शक: [अश्राव्य] डेविड जे Malan: हाँ. बस पाश या एक के लिए एक का उपयोग पाश या जो कुछ भी करते हैं. लेकिन सिर्फ बुनियादी विचार करते हैं तो उस इस स्मृति या एक सरणी का एक हिस्सा है और यह, पर पुनरावृति दोनों एक ही समय में. और बस पत्रों की तुलना करें. और तुम एक हो गया है थोड़ा सावधान, क्योंकि आप एक उंगली नहीं करना चाहती अन्य अतीत में जाने के लिए एक स्ट्रिंग है क्योंकि अन्य की तुलना में अब. तो आप के लिए जाँच करना चाहते करने जा रहे हैं अंत में इस विशेष मूल्य, अशक्त. लेकिन यह सच में, है अंत में, कि जैसे ही आसान. और सच कहूँ तो, हम की जरूरत नहीं है उस कार्य को दोहराने की. यहाँ दो संस्करण है. और क्या मैं यहाँ कहने जा रहा हूँ वह यह है कि बजाय एस की तुलना की, = टी के बराबर होती है स्ट्रिंग अगर मैं इसके बजाय, कहने जा रहा हूँ एस अल्पविराम टी की तुलना = 0 के बराबर होती है. अब, स्ट्रिंग तुलना क्या है? यह एक समारोह है, पता चला है कि जिसका उद्देश्य जीवन में सी, के साथ आता है दो तार की तुलना करने के लिए है. हम पढ़ और, अगर तुलना हलचल अपनी मैन पेज या दस्तावेज या CS50 संदर्भ, यह होगा बस आपको लगता है कि हलचल बताओ एक नकारात्मक या तो रिटर्न की तुलना नंबर या एक सकारात्मक संख्या या शून्य, शून्य का अर्थ है, जहां वे बराबर हो. तो सिर्फ अनुमान. यह क्या अगर मतलब हो सकता है तुलना हलचल नकारात्मक मूल्य या सकारात्मक मूल्य है? दर्शक: अधिक या कम. डेविड जे Malan: हाँ, से अधिक है या की तुलना में कम है. तो आप एक पूरे सॉर्ट करना चाहता था एक dictionary-- में तार का गुच्छा हम अंततः road-- नीचे के रूप में होगा सही समारोह संभावित उपयोग करने के लिए, यह है कि क्या करने जा रहा है क्योंकि आप के लिए तार की तुलना, और बताओ आप एक बी से पहले आता है, या करता है बी एक वर्णानुक्रम से पहले आते हैं. हम वास्तव में ऐसा कर सकते हैं. और मैं एक दूसरे को किया नोटिस इस उदाहरण में बात. और क्या उच्च बदल गया है इस मुख्य समारोह में? चार *. और यह कि अन्य सफेद झूठ है. यह सब समय, जब आपने स्ट्रिंग लिख गया, हम चुपके से नए सिरे से लिखना कर दिया गया है चार के रूप में स्ट्रिंग * तो वास्तव में उस बजना आप को समझता है. दूसरे शब्दों में, CS50.h में और हम अंत में देखेंगे, हम एक पर्याय कहा जाता स्ट्रिंग बनाया कि चार * के रूप में एक ही बात है. और अब के लिए, केवल इतना पता है कि * इस संदर्भ में, कम से कम, पते का मतलब है. क्या का पता? ठीक है, वास्तव में मैं ने कहा कि * चार, और, * int या * नाव नहीं * चार का मतलब है कि एक चार का पता. तो यहाँ इस छोटे से बॉक्स उर्फ स्ट्रिंग, वास्तव प्रकार * चार की है, जो कह रही है की बस एक अच्छा तरीका है, इस बॉक्स में एक पते जाना होगा. और क्या उस पते का उल्लेख करता है? जाहिर है, एक चार. लेकिन हम पूरी तरह से कर सकता पूर्णांक * और अन्य चीजें हैं. लेकिन अब के लिए, चार * वास्तव में सबसे अधिक है सरल और ब्याज में से एक. इसलिए इस समस्या जा रहा है फिर, हालांकि, वृद्धि करने के लिए. मैं इस कार्यक्रम को खोलने मान लीजिए. अब हम भविष्यवाणी कर सकते हैं चलो देखते हैं अगर क्या इस कोड के साथ गलत है. इस कार्यक्रम में तो, कॉपी 0, मैं हूँ आगे बढ़ो और फिर फोन करने वाला GetString और एस में मूल्य की दुकान. और फिर, क्यों मैं यह कर रहा हूँ बस सप्ताह अतीत से एक चेतावनी के रूप में? हम चाहते हैं कि GetString कहा था कभी कभी शून्य देता है. यह क्या अगर मतलब है GetString शून्य देता है? कुछ गलत हो गया. यह शायद स्ट्रिंग भी है मतलब बड़ा, स्मृति के कंप्यूटर के बाहर. यह सुपर, सुपर, सुपर होता है शायद ही कभी, लेकिन यह भी हो सकता है. हम इसके लिए जाँच करना चाहते हैं, और कि हम क्या कर रहे है. अगर तुम नहीं करते हम, अब देखेंगे क्योंकि बातों के लिए आदतन जाँच शुरू शून्य की तरह, आप कर सकते हैं वास्तव में जाने के लिए शुरू स्मृति में पते के लिए अमान्य है कि कर रहे हैं. और तुम उत्प्रेरण शुरू करने जा रहे हैं अधिक से अधिक विभाजन दोष. या एक मैक या पीसी, बस एक कंप्यूटर के कारण लटका करने के लिए या एक कार्यक्रम संभावित, फ्रीज करने के लिए. तो अब, मैं, कॉपी 0.c में दावा मुझे लगता है कि वैसे इन तारों की नकल करने जा रहा हूँ 28 लाइन. और फिर, मैं जा रहा हूँ तल पर दावा करने के लिए यहाँ मैं जा रहा हूँ कि उनमें से एक को बदलने की. तो इस पर ध्यान दिया. मैं अपने पुराने दोस्त strlen बुला रहा हूँ. और सिर्फ अंग्रेजी में समझाने इस लाइन 34 क्या कर रहा है? क्या टी ब्रैकेट 0 करता है बाईं तरफ का प्रतिनिधित्व करते हैं. हाँ. दर्शक: टी के प्रथम चरित्र? डेविड जे Malan: टी के प्रथम वर्ण. यह बात है. टी के प्रथम वर्ण, मैं चाहता हूँ अपरकेस संस्करण आवंटित करने के लिए टी में पहले चरित्र की. तो इस capitalizing है पहले अक्षर. और फिर, बहुत पिछले बात मैं करना इस कार्यक्रम में मैं यहाँ का दावा मूल, एस, और यहाँ नकल, टी. लेकिन कहानी के आधार पर हम बस तार वास्तव में क्या कर रहे हैं के बारे में बताया वास्तव में लाइन 28 क्या है कर रही है, और क्या है जा रहा है जिसके परिणामस्वरूप बग स्क्रीन पर हो सकता है? तो सबसे पहले, पहला सवाल, 28. स्ट्रिंग टी = वास्तव में क्या कर रही है? हम बाएँ हाथ में है तो यहाँ पक्ष स्ट्रिंग टी एस =; कि मुझे एक बॉक्स देता है यहाँ और एक बॉक्स यहाँ. और, इस पते 0x लगता है के मनमाने ढंग से, इस समय, कहने 50 चलो. क्या स्ट्रिंग टी एस = करता है हुड के नीचे क्या है? दर्शक: [अश्राव्य] डेविड जे Malan: यह स्मृति भंडार वहाँ पता है, इसलिए 0x50 वहाँ से चला जाता है. अब तो, अगर मैं पहली बार के लिए जाना टी में चरित्र और यह अपरकेस, मैं प्रभावी रूप से एस के लिए क्या कर रहा हूँ? मैं वास्तव में सही, एक ही बात कर रहा हूँ? क्योंकि अगर पता 0x50-- और सिर्फ मैं यहां बोर्ड पर ज्यादा जगह नहीं है, लेकिन, इस यहाँ नीचे 0x50 है कि मान अपने कंप्यूटर की स्मृति में कहीं. और मैं, उदाहरण के लिए, Gabe है इस तरह, यहां लोअरकेस में. और जैसा कि मैंने कहा है टी ब्रैकेट 0 पूंजीकृत हो जाता है. खैर, टी ब्रैकेट 0 टी में पहला अक्षर. तो थोड़ा छ जा रहा है बन बड़ा जी लेकिन समस्या , क्या यह भी करने के लिए बात है करता है? दर्शक: एक ही. डेविड जे Malan: एक ही सटीक बात. तो शायद एक सरल व्याख्या, वाक्यविन्यास थोड़ा अजीब है, भले ही. तो चलो यह करते हैं. ./copy -0 तो कॉपी 0 बनाओ और. कुछ कहो: Gabe. और दुर्भाग्य से, दोनों उन्हें अब पूंजीकृत किया गया है, लेकिन उस के लिए अंतर्निहित हम बस कर रहे हैं कि कारण अब पतों के साथ काम कर. तो हम कैसे शुरू करते है address-- कोई यमक intended-- हम पता करने के लिए शुरू करते हैं कैसे इस विशेष समस्या? खैर, copy1.c में, बातें जा रहे हैं एक छोटे से अधिक जटिल हो. लेकिन मैं एक दावा करेगा धारणात्मक सरल समाधान. पहली नज़र में मिलना बहुत मुश्किल. पहली के लिए आसान नहीं होने जा रहा समय तुम, शायद, यह बाहर प्रकार लेकिन समस्या यह है कि अगर बस टी = सिर्फ कर प्रतियां पता, क्या, फिर मैं तुम पर ले सकते हैं, तो समाधान होने जा रहा है वास्तव में एक स्ट्रिंग नकल के लिए? दर्शक: हम शायद हूँ फिर एक पाश का उपयोग करें. डेविड जे Malan: हाँ. तो हम फिर से एक पाश जरूरत जा रहे हैं. और हम कॉपी करना चाहते हैं क्योंकि अगर एक और स्ट्रिंग में एक स्ट्रिंग है, हम शायद यह करना चाहते हैं चरित्र द्वारा चरित्र. लेकिन समस्या यह है, तो है यह मूल रूप से है है अब हम स्पष्ट रूप से शुरू करने की जरूरत टी के लिए स्मृति का आवंटन. दूसरे शब्दों में, चलो इस एक आखिरी बार redraw. इस स्ट्रिंग एस = GetString है. और के रूप में अच्छी तरह से, यहाँ यह ऊपर डाल दिया. इस GetString है. कुछ के लिए और फिर, तस्वीर उस तरह के रूप में पहले होने जा रहा है, G-A-B-ई / 0. यही कारण है कि इस तरह एक छोटे से कुछ लग रहा है. और एस इसलिए, हम इस 0x50 कॉल और कहा कि 51, 52 होने जा रहा है. तो इस 0x50 है. और फिर, मैं स्ट्रिंग टी करना. स्मृति में, कि बस जा रहा है मुझे इस तरह एक छोटे से वर्ग दे. इसलिए महत्वपूर्ण कदम अब क्या है? मैं टी में है की नकल करना चाहते हैं, क्या रिक्त हम यहाँ में भरने की जरूरत है? या हम करने की आवश्यकता है एक उच्च स्तर पर करते हैं? हाँ? कोई है? हाँ. दर्शक: हम [अश्राव्य] की जरूरत है. डेविड जे Malan: हाँ, हम इस रिक्त को भरने की जरूरत है. मैं फिर कॉपी और नहीं कर सकता Gabe का नाम भुनाने मैं ऑपरेटिंग सिस्टम पूछने तक स्मृति का एक और हिस्सा के लिए कि मूल रूप में कम से कम के रूप में बड़ा है. इसलिए कि एक सवाल के साथ छोड़ देता है. मैं ऑपरेटिंग सिस्टम नहीं पूछ रहे हो कैसे सिर्फ एक साधारण सा pointer-- के लिए यह कहा जाता है, के रूप में एक पता, एक pointer-- नहीं एक साधारण सा बॉक्स के लिए इस तरह से एक स्ट्रिंग बुलाया? मैं कैसे ऑपरेटिंग पूछ रहे हो स्मृति का एक बड़ा हिस्सा के लिए प्रणाली? इस प्रकार अब तक, मैं केवल कि वापस मिल गया है परोक्ष रूप से GetString फोन करके. तो कैसे GetString है अपनी स्मृति हो रही है भी? खैर, यह है कि वहाँ पता चला है यहाँ यह अन्य समारोह कि हम अब उपयोग करने के लिए शुरू करेंगे. अब, इस तरह से अधिक गुप्त than-- लग रहा है और मैं it-- देख सकते हैं, जो केवल एक हूँ इस लाइन रास्ता अधिक गुप्त लग रहा है तो यह पहली नज़र में ऐसा करना चाहिए. लेकिन यह अलग तंग करते हैं. बाएं हाथ की तरफ, मैं चार * टी है. अंग्रेजी में तो, चलो तैयार करने के लिए शुरू करते हैं तकनीकी भाषा में उचित वाक्य. तो इस आबंटित है एक प्रकार चार के चर टी कहा जाता है *. अब, यह वास्तव में क्या मतलब है? खैर, इसका मतलब है कि, मैं क्या जा रहा हूँ टी कहा जाता है इस चर में डाल करने के लिए? एक चार की एक पते. ताकि, सिर्फ आसान है अधिक उचित तरीका के बाईं ओर का वर्णन. तो यह है कि यहां केवल इस बॉक्स बनाता है. तो दाईं ओर, शायद, हो रहा है बड़ा है कि आवंटित करने के लिए स्मृति की कैसे हिस्सा? तो चलो इस के अलावा तंग करते हैं. यह पहली नज़र में भारी है लेकिन अंदर यहाँ क्या हो रहा है? सबसे पहले, malloc, वहाँ जो हमारे नए दोस्त, जाहिरा तौर पर है "स्मृति आवंटित." तो यह पारित किया जा रहा तर्क है इसे में, तो यह एक बहुत बड़ा तर्क है. तो चलो इस के अलावा तंग करते हैं. एस के strlen, ज़ाहिर है, का प्रतिनिधित्व करता है the-- दर्शक: अक्षरों की संख्या. डेविड जे Malan: बस एस में पात्रों की संख्या. तो चलो की लंबाई, मूल स्ट्रिंग. तो जी एक-B-ए. तो यह शायद चार इस मामले में है. क्यों मैं के बाद +1 कर रहा हूँ एस के strlen बुला? दर्शक: [अश्राव्य] डेविड जे Malan: उसके लिए विशेष अशक्त चरित्र. अगर आप मुझसे पूछें की लंबाई क्या है Gabe का नाम, मैं चार कहने जा रहा हूँ. हुड के नीचे है, हालांकि, मैं जरूरत अशक्त चरित्र के लिए कि पांचवें बाइट. मैं +1 कर रहा हूँ तो इसलिए. अब सिर्फ मामले में आप इस चल रहे हैं अन्य की तुलना में एक कंप्यूटर पर कार्यक्रम, कहते हैं, CS50 उपकरण, जहां एक चार का आकार अलग हो सकती है अपना खुद का computer-- से मैं इस फोन कर सकते हैं कि पता चला है ऑपरेटर sizeof, बस, कंप्यूटर पूछना एक का आकार क्या है इस कंप्यूटर पर चार? और इस में पांच गुणा करके एक चार का आकार, द्वारा उदाहरण है जो अधिकांश कंप्यूटर पर होगा सिर्फ एक, malloc हो मुझे यह बड़ा के लिए आवंटित करने के लिए जा रहा है यहीं पर खत्म स्मृति का हिस्सा. और यह return-- जा रहा है यह बात है तो यह एक function-- है क्या मेरे पास वापस जाने के लिए जा रहे हैं? दर्शक: पता? डेविड जे Malan: क्या का पता? दर्शक: स्मृति की यह आवंटित? डेविड जे Malan: के स्मृति इसे दिये. इसलिए मुझे लगता है, सच में, कोई पता नहीं जहां यह खत्म होता जा रहा है. मुझे लगता है कि प्रस्ताव करने जा रहा हूँ यह 0x88 में खत्म हो रहा है. पूरी तरह से मनमाना, लेकिन 0x50 के अलावा अन्य कहीं, ऑपरेटिंग सिस्टम की वजह से, क्या विंडोज और मैक ओएस मेरे लिए क्या है, यह दे रही है कि यह सुनिश्चित कर लें मुझे राम के विभिन्न हिस्सा. तो यह मान यह है, जहां स्मृति का हिस्सा खत्म हो सकता है. तो इस 0x88, यहाँ में समाप्त होता है. तो अब स्पष्ट रूप से, मैं समझ सकता हूँ यह इस रूप में ही नहीं है कि, वे कम से इशारा कर रहे हैं क्योंकि स्मृति के विभिन्न मात्रा. अब मैं वास्तव में इस की नकल करना चाहते हैं तो में, के अपने प्रस्तावित समाधान करते हैं. , चलो बस जाओ, पाश के लिए एक का निर्माण करते हैं और टी ब्रैकेट कर मैं ब्रैकेट मैं हो जाता है. अब मैं उपयोग कर सकते हैं क्योंकि इस सरणी की तरह अंकन, क्योंकि भले ही malloc बहुत सामान्य रूप से मुझे स्मृति का आवंटन, स्मृति बस सन्निहित बाइट्स है. बाइट, बाइट, बाइट, वापस वापस करने के लिए वापस करने के लिए. मैं एक प्रोग्रामर के रूप में निश्चित रूप से कर सकते हैं एक सरणी, के रूप में व्यवहार जो मैं यह अंत में परिचित उपयोग कर सकते हैं बस कुछ वर्ग कोष्ठक का अंकन. तो मुझे, क्योंकि वहाँ थामने जाने यह भी, सभी एक ही बार में बहुत कुछ है मूल विचार संक्षिप्त करने के लिए हालांकि कि स्ट्रिंग है, यह सब समय, एक नए डेटा प्रकार से प्रति नहीं है. यह सिर्फ एक तथाकथित सूचक है एक चरित्र का एक पता, जो सिर्फ मतलब है कि यह एक नंबर कि मानव सम्मेलन से हम 0x कुछ के रूप में लिख देते हैं. लेकिन यह सिर्फ एक संख्या है 33 ऑक्सफोर्ड स्ट्रीट की तरह, जो होना होता है सीएस इमारत के पते. इन विवरणों पर कोई सवाल? हाँ? दर्शक: क्यों हम जाँच कर बराबर टी के लिए नल के लिए? डेविड जे Malan: क्यों हम करते हैं अशक्त के बराबर टी के लिए जाँच? हम documentation-- पढ़ें malloc के लिए महान question--, यह ठीक प्रिंट में कहने के लिए जा रहा है कभी कभी malloc, अशक्त वापसी हो सकती है बस GetString की तरह. और वास्तव में, GetString शून्य देता है बदले में, malloc शून्य देता है, तो GetString malloc का उपयोग करता है. ओएस और अगर है कि हो सकता है, मैक ओएस, विंडोज, जो भी हो, बस है आप के लिए स्मृति से बाहर. इसलिए कि वहां क्या हुआ. और मुझे एक और बात को प्रकट करते हैं कि सिर्फ अपने दिमाग उड़ा सकता है या पूरी तरह से बहुत दूर लाइन खत्म हो. लेकिन मुझे अपने आप को रोकना जाने नकल के लिए पाश के लिए एक ही है, जो एक क्षण पहले, याद था इस. टी ब्रैकेट मैं ब्रैकेट मैं हो जाता है. अच्छा और उपयोगकर्ता के अनुकूल है. फिर दो सप्ताह की तरह लगता है. लेकिन इस संस्करण वास्तव में हो सकता है गुप्त लग रहा है जो इस के रूप में पुन: लिखा. यह एक तकनीक बुलाया सूचक है गणित, पता गणित. लेकिन क्यों यह काम करता है? अब annoyingly, सी के लेखकों का उपयोग करने का निर्णय लिया विभिन्न प्रयोजनों के लिए * प्रतीक. हम यह पहले से ही एक बार इस्तेमाल किया देखा है जिसका मतलब है चार *, "मुझे एक चर दे उस होते जा रहा है एक चार का पता. " इस संदर्भ में तो चार * "मुझे एक चर दे मतलब है." दुर्भाग्य से, आप * बिना उपयोग करें उसके सामने एक शब्द, चार की तरह, यह अब कहा जाता है भिन्नता ऑपरेटर. और हम लंबे समय से पहले इस बात का अधिक देखेंगे. लेकिन यह सिर्फ "वहाँ जाना मतलब है." कोई मुझे सौंप अगर यह कह की तरह है कागज के एक टुकड़े पर "33 ऑक्सफोर्ड स्ट्रीट," मैं "* 33 ऑक्सफोर्ड स्ट्रीट," अगर इसका मतलब है कि "सीएस के निर्माण के लिए सड़क के नीचे चलते हैं." तो * सिर्फ वहाँ अगर जाने का मतलब उसके सामने कोई शब्द नहीं है. तो स्पष्ट होना, टी क्या है? टी का हिस्सा का पता है मेरे पास वापस दिया गया था कि स्मृति. एस, साफ होने का क्या, का पता है उदाहरण में हम चर्चा कर रहा है, लोअरकेस Gabe की? पता है of-- दर्शक: स्ट्रिंग. डेविड जे Malan: Gabe का मूल नाम की. इसलिए इसके बारे में पता है स्मृति के इस टुकड़ा. इसलिए मैं कहता हूँ अगर टी i-- मैं, नोटिस, हमारा पुराना दोस्त है. यह सिर्फ एक सूचकांक चर है उस पर शून्य से पुनरावृति है स्ट्रिंग है की लंबाई के लिए. तो यह तो शून्य, एक होने जा रहा है फिर दो, फिर तीन, चार. तो चलो इन नए इकट्ठा करते हैं स्क्रैच तरह पहेली टुकड़े, अगर तुम जाएगा, भले ही, फिर से, वाक्यविन्यास स्क्रैच की तुलना में कहीं अधिक रहस्यमय है. तो टी एक पता है + मैं मुझे देने जा रहा है एक नंबर, क्योंकि इन सभी कर रहे हैं हम हेक्स के रूप में ड्राइंग किया गया है कि संख्या. लेकिन वे सिर्फ संख्या हो. टी के पते हमने कहा तो अगर था 0x88, 0x88 प्लस शून्य क्या है. आप आराम से नहीं कर रहे हैं यहां तक ​​कि अगर अभी तक हेक्स साथ, एक अनुमान ले. दर्शक: मूल. डेविड जे Malan: 0x88 फिर भी. तो * क्या मतलब 0x88 करता है? इसका मतलब है जो "वहाँ जाओ", इसका मतलब है प्रभावी ढंग से, "यहाँ अपनी उंगली डाल दिया." और अब के दाएँ हाथ की ओर इस अभिव्यक्ति, * और फिर parens में, मैं जो, एस का मतलब + यहाँ थोड़ा जी से संबोधित करते हैं. एस + 0, ज़ाहिर है, जो कुछ भी है, है. तो अब, यह * है, है जो सिर्फ * 33 की तरह ऑक्सफोर्ड स्ट्रीट पते पर जाने का मतलब एस. तो यहाँ इस उंगली, दाहिने हाथ है. तो क्या मैं क्या में कॉपी करने के लिए जा रहा हूँ? जो सही पर बात, Gabe, यहाँ पर यहाँ थोड़ा जी,. उस की और इसलिए प्रभाव पाश की पहली यात्रा, आप यह लग रहा है, भले ही प्रस्तावित कुछ से पागल अधिक जटिल हम पहले देखा है बस कह रहा है यहां जाने के लिए और यहाँ कि चरित्र की नकल. यह आप दोनों स्थानों के लिए एक नक्शा दे रही है. और हम इस बात का कहीं अधिक देखेंगे. लेकिन अब के लिए, आशा है कि बस के लिए है इन बुनियादी विचारों में से कुछ परिचय. और वास्तव में, चलो हम देखते हैं यहाँ एक अंतिम कार्यक्रम, और फिर वादा किया claymation, जो सब कुछ ठीक कर देगा. ठीक है. तो मुझे वहाँ हम चले up-- खोलते हैं. हम वापस आ जाएंगे me-- तो जाने लंबे समय से पहले इस तस्वीर को. मुझे यहाँ इस अंतिम उदाहरण खोल दें. तो यहाँ एक सुपर, सुपर है accomplishes कि कार्यक्रम निम्न है कि जीवन में कुछ भी नहीं है. यह पहली बार दो चर, एक्स वाणी और इस बार संख्या नहीं हैं कि वाई,, दर असल. वे दर असल, पूर्णांकों नहीं कर रहे हैं. वे * जाहिरा तौर पर कर रहे हैं int. इसलिए किसी को भी बस, इसका मतलब क्या है अपने डेटा प्रकार हैं, अपने चर, प्रकार int * सितारा की है? यही कारण है कि एक पूर्णांक का पता है. इसलिए मुझे लगता है कि यह अभी तक है जहां कोई जानकारी नहीं है. यह सिर्फ ", अंततः, डाल का मतलब यहाँ एक पूर्णांक का पता. " इसमें जहाँ भी 0x50, 0x88, स्मृति, एक पते वहाँ जा रहा है. और कि वाई क्या है साथ ही साथ, होने जा रहा. मैं अब कहते हैं कि एक्स = malloc (sizeof (int)), इस कह का एक अच्छा तरीका है, अरे ऑपरेटिंग सिस्टम, malloc के माध्यम से, आकार के लिए मुझे पर्याप्त स्मृति दे जो शायद एक पूर्णांक के 32 बिट या चार बाइट्स होने जा रहा. तो malloc क्या वापस करता है? Malloc एक पता देता है. तो क्या एक्स में संग्रहित हो रहा है? का हिस्सा का पता स्मृति, चार बाइट्स, कि malloc अभी पूछकर मेरे लिए पाया ऑपरेटिंग सिस्टम. अब इस बीच, रेखा यहां चार, * एक्स = 42. बस, स्पष्ट होना वहाँ नीचे क्या हो रहा है? बाएं हाथ की तरफ, * एक्स. कि * 33 ऑक्सफोर्ड स्ट्रीट की तरह है. तो * एक्स क्या मतलब है? दर्शक: करने के लिए जाओ. डेविड जे Malan: उस पते पर जाएँ. जहाँ भी की है कि हिस्सा स्मृति इसे करने के लिए जाना जाता है. और जाहिर है, वहाँ क्या रखा है? दर्शक: 42. डेविड जे Malan: 42. सब ठीक है, * वाई, एक ही विचार है. वाई में पता करने के लिए जाओ. वहाँ 13 नंबर रखो, लेकिन पल में वाई क्या है? दर्शक: कोई स्मृति y के लिए नहीं है. डेविड जे Malan: वहाँ वाई के लिए कोई स्मृति है. तो क्या शायद वाई करता है हम कह दिया गया है, के रूप में होते हैं? दर्शक: कचरा. डेविड जे Malan: कुछ कचरा मूल्य. अब, कचरा मूल्य अभी भी एक संख्या है. यह अभी भी एक पते के लिए गलत हो सकता है. यह किसी रूप में यद्यपि है , नीचे कुछ लिखा और मैं अर्थ के रूप में यह गलत व्याख्या सड़क के नीचे कुछ निर्माण. और तुम बस में जाने की कोशिश तुम ही नहीं है कुछ के निर्माण, या स्मृति का कुछ हिस्सा आप नहीं है दिया गया, बुरी बातें हो सकता है. कंप्यूटर कुछ अन्य दुर्घटना, या हो सकता है अनिर्धारित व्यवहार हो सकता है. तो, फिर, Binky के लिए इस पहचान है. मैं अभी भी 20, याद कुछ अजीब साल बाद, मैं जब मैं अंत में किया गया था जहां संकेत समझा. आप हैं, जो कहते हैं तीन मिनट में यहाँ छोड़ और मैं नहीं लगता संकेत समझने, एहसास मैं 20 के लिए याद किया कुछ पागल कारण के लिए साल कब और क्यों यह अंत में डूब में, मेरे शिक्षण के साथ बैठे साथी, निशात मेहता में एलियट डाइनिंग हॉल के पीछे. अब, मैं याद किया इस यह था क्योंकि विषयों मैं, में से एक विशेष रूप से, के साथ संघर्ष किया. और फिर, यह अंत में क्लिक किया, जैसे मैं विषयों की एक बहुत कहने की हिम्मत अंत में होगा. और अब, कि सब महसूस कराने के लिए खुश और सभी को और अधिक कायल, में एक अंतिम नज़र रखना हमारे यहाँ Binky में पिछले तीन मिनट, हमारे दोस्त, निक से स्टैनफोर्ड से Parlante. [वीडियो प्लेबैक] हे, Binky. जागो! यह सूचक मनोरंजन के लिए समय है. कि क्या हो रहा है? संकेत के बारे में जानें? ओह, गुडी! -Well, आरंभ करने के लिए, मुझे लगता है हम कर रहे हैं लगता है एक जोड़े के संकेत की जरूरत जा. ठीक है. इस कोड, दो संकेत का आवंटन जो पूर्णांकों के लिए बात कर सकते हैं. ठीक है. खैर, मैं दो संकेत देखते हैं, लेकिन वे कुछ भी करने के लिए इशारा कर रहा हो ऐसा नहीं लगता है. -वह सही है. प्रारंभ में, संकेत कुछ भी करने के लिए बात नहीं है. वे कहते हैं को इंगित बातें pointees, और उन्हें स्थापित एक अलग कदम. ठीक है, ठीक है, ओह. मैं जानता था कि. pointees अलग हैं. एर, तो आप कैसे एक pointee आवंटित करते हैं? ठीक है. खैर, इस कोड का आवंटन एक नए पूर्णांक pointee, और इस हिस्से सेट एक्स यह करने के लिए बात करने के लिए. हे, कि बेहतर लग रहा है. तो यह कुछ कर रही है. ठीक है. मैं करने के लिए सूचक एक्स भिन्नता हूँ इसके pointee में 42 नंबर की दुकान. इस चाल के लिए, मैं की आवश्यकता होगी मेरी Dereferencing की जादू की छड़ी. Dereferencing की -आपका जादू की छड़ी? That-- कि बहुत अच्छी बात है. -यह कोड की तरह लग रहा है. मैं सिर्फ संख्या और [पीओपी] स्थापित करेंगे हे, देखो. वहाँ यह जाता है. एक्स इस प्रकार है पर एक भिन्नता कर -So तीर अपने pointee का उपयोग करने के लिए. इस मामले में, वहाँ में एक दुकान 42. अरे संख्या में स्टोर करने के लिए इसे उपयोग करने की कोशिश अन्य सूचक के माध्यम से 13, वाई. ठीक है. मैं सिर्फ वाई के लिए यहां पर जायेंगे, और 13 नंबर सेट अप मिलता है. और फिर, छड़ी ले Dereferencing और बस [BUZZ] ओह! अरे, ओह! यह काम नहीं किया. Binky, मैं dereferencing नहीं लगता, बोलो क्योंकि आप जानते हैं वाई,, एक अच्छा विचार है pointee की स्थापना एक अलग कदम है. और मुझे लगता है हमें कभी ऐसा किया नहीं लगता. अच्छा है बिंदु. हाँ. हम सूचक वाई आवंटित है, लेकिन हम कभी नहीं एक pointee को इंगित करने के लिए यह निर्धारित किया है. -बहुत चौकस. हे, तुम, वहाँ Binky अच्छी लग रही हो. तुम इतना है कि इसे ठीक कर सकते वाई अंक एक्स के रूप में एक ही pointee करने के लिए? -Sure. मैं अपनी जादू की छड़ी का उपयोग करेंगे सूचक असाइनमेंट की. होने जा रहा है कि -Is पहले की तरह एक समस्या है? नहीं. इस pointees स्पर्श नहीं करता. यह सिर्फ एक सूचक परिवर्तन एक अन्य रूप में एक ही बात को इंगित. ओह, मैं देख रहा हूँ. एक्स के रूप में एक ही जगह पर अब वाई अंक. तो इंतजार. अब, वाई तय हो गई है. यह एक pointee है. तो आप की छड़ी की कोशिश कर सकते हैं 13 से अधिक भेजने के लिए फिर से dereferencing. ठीक है, -Uh. यहाँ यह जाता है. [पीओपी] हे, कि देखो. अब वाई पर काम करता है dereferencing. और संकेत साझा कर रहे हैं क्योंकि एक pointee कि, वे दोनों 13 देखें. हाँ. शेयरिंग, जो भी हो. इसलिए हम अब स्थानों स्विच करने के लिए जा रहे हैं? ओह, देखो. हम समय से बाहर रहे हैं. -But-- तीन सूचक नियम याद, बस. नंबर एक, बुनियादी संरचना आप एक सूचक है कि है, और यह एक pointee के लिए अंक. लेकिन सूचक और pointee, अलग हैं और आम त्रुटि एक सूचक स्थापित करने के लिए है, लेकिन यह एक pointee देने की भूल करने के लिए. नंबर दो, सूचक dereferencing सूचक पर शुरू होता है और अधिक अपने तीर इस प्रकार है इसके pointee का उपयोग करने के लिए. हम सभी जानते हैं, इस अगर वहाँ केवल काम करता है एक pointee, जो एक तरह से नंबर एक नियम को वापस हो जाता है. तीन नंबर, सूचक असाइनमेंट एक सूचक लेता है और के लिए बात करने के लिए यह परिवर्तन एक और संकेत के रूप में एक ही pointee. काम के बाद तो, दो संकेत एक ही pointee के लिए बात करेंगे. कभी कभी, कि साझा कहा जाता है. और कहा कि वास्तव में, वहाँ यह सब है. अलविदा अब. [अंत वीडियो प्लेबैक] डेविड जे Malan: यह CS50 के लिए है. हम अगले सप्ताह आप देखेंगे.