[संगीत बजाना] डौग लॉयड: सूचक है, यहाँ हम कर रहे हैं। यह शायद करने के लिए जा रहा है सबसे कठिन विषय हो हम CS50 में के बारे में बात करते हैं। और अगर आप पढ़ा है संकेत के बारे में कुछ भी आप एक छोटा सा हो सकता से पहले डरा देता है इस वीडियो में जा रहा है। यह संकेत सच है आप की क्षमता की अनुमति नहीं शायद पेंच बहुत बुरी तरह से आप कर रहे हैं जब चर, और डेटा के साथ काम कर रहा है, और अपने कार्यक्रम दुर्घटना के कारण। लेकिन वे वास्तव में बहुत उपयोगी हो और वे हमें एक बहुत बढ़िया तरीका अनुमति देते हैं वापस डेटा पारित करने के लिए और आगे कार्यों के बीच, कि हम अन्यथा नहीं कर पा रहे हैं। और तो क्या हम वास्तव में ट्रेन है यहाँ क्या करना चाहते हैं आप अच्छा सूचक अनुशासन है, इसलिए करने के लिए आप प्रभावी रूप से संकेत का उपयोग कर सकते हैं कि अपने कार्यक्रमों है कि ज्यादा बेहतर बनाने के लिए। जैसा कि मैंने कहा संकेत हमें एक अलग देना रास्ते कार्यों के बीच डेटा पारित करने के लिए। अब आप से याद करते हैं पहले के एक वीडियो है, जब हम के बारे में बात कर रहे थे चर गुंजाइश है, मैंने उल्लेख कि हम दोनों के बीच पारित कि सभी डेटा सी में कार्यों मूल्य द्वारा पारित कर दिया है। और मुझे लगता है कि प्रयोग नहीं किया है अवधि मैं वहाँ का मतलब है, क्या हम डेटा की प्रतियां गुजर रहे हैं कि था। हम एक समारोह के लिए एक चर के पास, हम वास्तव में चर गुजर नहीं कर रहे हैं समारोह के लिए, है ना? हम की एक प्रति गुजर रहे हैं समारोह के लिए कि डेटा। समारोह क्या यह होगा करता है और यह कुछ मूल्य की गणना करता है, और हो सकता है कि हम उस मूल्य का उपयोग यह इसे वापस देता है। एक अपवाद के लिए वहां गया था मूल्य के पास से गुजर का यह नियम, और हम यह है कि क्या करने के लिए वापस आ गया हूँ इस वीडियो में बाद में एक छोटी है। हम बजाय संकेत का उपयोग करते हैं चर का उपयोग कर के, या चर उपयोग करने के बजाय खुद को या चर की प्रतियां हम अब चारों ओर चर पारित कर सकते हैं एक अलग तरह के कार्यों के बीच। यह हम करते हैं तो इसका मतलब है कि एक समारोह में एक परिवर्तन, कि परिवर्तन वास्तव में ले जाएगा एक अलग समारोह में प्रभाव। फिर, यह कुछ ऐसा है कि हम पहले से नहीं कर सका और आप कभी स्वैप करने की कोशिश की है, तो एक समारोह में दो चर के मूल्य, यदि आप इस समस्या पर ध्यान दिया है जीव की तरह, है ना? हम एक्स और वाई, और हम स्वैप करने के लिए चाहते हैं स्वैप नामक एक समारोह के लिए उनके पास है, समारोह के अंदर स्वैप चर विनिमय मूल्यों करते हैं। एक से दो हो जाता है, दो हो जाता है एक है, लेकिन हम वास्तव में नहीं है मूल में कुछ भी बदल समारोह, कॉलर में। क्योंकि हम नहीं कर सकते, हम कर रहे हैं केवल उनमें से प्रतियों के साथ काम कर रहे हैं। हालांकि संकेत के साथ, हम कर सकते हैं वास्तव में एक समारोह के लिए एक्स और वाई गुजरती हैं। यही कारण है कि समारोह कर सकते हैं उनके साथ कुछ और। और उन चर मूल्यों वास्तव में बदल सकते हैं। तो यह है कि में काफी बदलाव है डेटा के साथ काम करने की हमारी क्षमता। हम में गोता लगाने से पहले संकेत, मैं इसके लायक है लगता है कुछ ही मिनटों के लिए ले जा यहाँ बुनियादी बातों को वापस जाओ। और कैसे पर एक नजर है कंप्यूटर स्मृति काम करता है इन दो विषयों जा रहे हैं क्योंकि वास्तव में बहुत परस्पर हो। शायद आप सभी को पता हो, अपने कंप्यूटर सिस्टम पर आप एक हार्ड ड्राइव है या शायद एक ठोस राज्य ड्राइव, फ़ाइल भंडारण स्थान को किसी प्रकार का। यह कहीं आमतौर पर है 250 गीगाबाइट की पड़ोस अब टेराबाइट्स की शायद एक जोड़े के लिए। और इस बात की है, जहां सब है आपके फाइलों अंततः रहते हैं, आपके कंप्यूटर बंद होने के बाद भी बंद, आप इसे वापस बारी कर सकते हैं और आप अपनी फाइल देखते हैं मिल जाएगा फिर आप अपने सिस्टम को रिबूट जब। लेकिन एक हार्ड डिस्क ड्राइव की तरह डिस्क ड्राइव, एक HDD, या एक ठोस राज्य ड्राइव, एक एसएसडी, सिर्फ भंडारण के लिए जगह है। हम वास्तव में कुछ नहीं कर सकते हार्ड डिस्क में है कि डेटा, या एक ठोस राज्य ड्राइव में। वास्तव में बदलने के क्रम में डेटा या इसे चारों ओर ले जाने, हम करने के लिए इसे ले जाने के लिए राम, रैंडम एक्सेस मेमोरी। अब राम, आप एक बहुत कुछ है आपके कंप्यूटर में से कम है। आप ने कहीं न कहीं हो सकता है 512 मेगाबाइट का पड़ोस यदि आप एक पुराने कंप्यूटर है, शायद करने के लिए दो, चार, आठ, 16, संभवतः भी एक छोटे से अधिक, राम के गीगाबाइट। तो यह है कि बहुत छोटी है, लेकिन है कि जहां अस्थिर डेटा के सभी मौजूद है। हम चीजों को बदल सकते हैं कि जहां। लेकिन हम अपने कंप्यूटर बंद करते हैं, रैम में डेटा के सभी नष्ट हो जाता है। हम हार्ड डिस्क की आवश्यकता है तो यही कारण है इसके बारे में और अधिक स्थायी स्थान के लिए, यह exists- इतना है कि यह होगा वास्तव में बुरा हो, तो हर बार हम हमारे कंप्यूटर बंद कर दिया हर हमारी प्रणाली में फ़ाइल obliterated किया गया था। इसलिए हम राम के अंदर काम करते हैं। और हर बार हम के बारे में बात कर रहे हैं स्मृति, बहुत सुंदर, CS50 में, हम राम, न हार्ड डिस्क के बारे में बात कर रहे हैं। इसलिए हम स्मृति में चीजों को ले जाते हैं, यह अंतरिक्ष की एक निश्चित राशि लेता है। डेटा प्रकार के सभी कि हम साथ काम कर रहा है ऊपर ले अलग रैम में अंतरिक्ष की मात्रा। तो हर बार जब आप एक पूर्णांक बनाने स्मृति के चर, चार बाइट्स यदि आप ऐसा रैम में अलग सेट कर रहे हैं कि पूर्णांक के साथ काम कर सकते हैं। आप पूर्णांक घोषणा कर सकते हैं, इसे बदलने के लिए, यह आवंटित incremented एक मूल्य 10 को एक, इतने पर और इतने पर से। में होने की जरूरत है कि सभी राम, और आप चार बाइट्स मिल हर एक के लिए साथ काम करने के लिए कि तुम बनाने के पूर्णांक। हर चरित्र आप बनाने के एक बाइट हो जाता है। यही कारण है कि अंतरिक्ष है अभी कितना है एक चरित्र को स्टोर करने की जरूरत है। हर नाव, एक असली नंबर, चार बाइट्स हो जाता है यह एक डबल जब तक परिशुद्धता चल बिन्दु करने के लिए आपको अनुमति देता है जो संख्या है, अधिक सटीक या अधिक अंक दशमलव बिंदु के बाद सटीक खोने के बिना, जो स्मृति के आठ बाइट्स हाथ में ले लिया। लंबे समय से चाहता है, वास्तव में बड़ी पूर्णांकों, यह भी स्मृति के आठ बाइट्स हाथ में ले लिया। कितने स्मृति के बाइट्स तार लेते हो? अच्छा चलो कि प्रश्न में एक पिन डाल दिया अब के लिए है, लेकिन हम इसे वापस करने के लिए आया हूँ। तो वापस स्मृति के इस विचार के रूप में करने के लिए बाइट आकार की कोशिकाओं का एक बड़ा सरणी। यही कारण है कि वास्तव में यह सब है, यह है कोशिकाओं की सिर्फ एक विशाल सरणी, बस किसी भी अन्य सरणी की तरह है कि आप से परिचित हैं और देखते हैं, हर तत्व को छोड़कर एक बाइट व्यापक है। और सिर्फ एक सरणी की तरह, हर तत्व एक पता है। एक सरणी के प्रत्येक तत्व एक सूचकांक है, और हम है तथाकथित ऐसा करने के लिए है कि सूचकांक का उपयोग कर सकते हैं सरणी पर रैंडम एक्सेस। हम पर शुरू करने के लिए नहीं है सरणी की शुरुआत हर माध्यम से पुनरावृति एकल तत्व क्या है, हम क्या देख रहे हो खोजने के लिए। हम सिर्फ मैं करने के लिए प्राप्त करना चाहते हैं, कह सकते हैं 15 वीं तत्व या 100 वां तत्व। और अगर आप सिर्फ इतना है कि संख्या में पारित कर सकते हैं और आप देख रहे हैं मूल्य मिलता है। इसी तरह हर स्थान स्मृति में एक पता होता है। तो अपनी स्मृति हो सकता है कुछ इस तरह दिखेगा। यहाँ का एक बहुत छोटा हिस्सा है स्मृति, इस स्मृति के 20 बाइट्स है। पहले 20 बाइट्स क्योंकि मेरी तल पर वहाँ के पते 3, 2, 1, 0 कर रहे हैं, और इसलिए 19 के लिए सभी रास्ते पर। और मैं चर घोषणा कब और मैं उनके साथ काम करने के लिए शुरू करते हैं, सिस्टम स्थापित करने के लिए जा रहा है मेरे लिए एक तरफ कुछ जगह इस स्मृति में काम करने के लिए मेरी चर के साथ। तो मैंने चार सी पूंजी के बराबर होती है, का कहना है कि हो सकता है एच और क्या होने जा रहा है? खैर व्यवस्था करने के लिए जा रहा है मुझे एक बाइट के लिए अलग निर्धारित करें। इस मामले में यह बाइट नंबर चुना चार, पता चार पर बाइट, और यह स्टोर करने के लिए जा रहा है मेरे लिए वहाँ में पत्र राजधानी एच। मैं तो पूर्णांक गति कहते हैं सीमा से यह बात है, 65 के बराबर होती है एक तरफ चार सेट करने के लिए जा रहा मेरे लिए स्मृति के बाइट्स। और यह उन लोगों के इलाज के लिए जा रहा है एक इकाई के रूप में चार बाइट्स हम काम कर रहे हैं, क्योंकि साथ यहाँ एक पूर्णांक है। और यह वहाँ में 65 स्टोर करने के लिए जा रहा है। अब पहले से ही मैं एक तरह से कर रहा हूँ आप एक झूठ का एक सा बता रही है, ठीक है, हम जानते हैं कि क्योंकि कंप्यूटर बाइनरी में काम करते हैं। वे समझ नहीं आता जरूरी नहीं कि एक राजधानी एच क्या है या एक 65 वे केवल, क्या है द्विआधारी, शून्य और लोगों को समझते हैं। और तो वास्तव में क्या हम वहाँ में भंडारण कर रहे हैं पत्र एच और नंबर 65, नहीं है बल्कि द्विआधारी अभ्यावेदन क्या है, जो देखो इस तरह छोटे से कुछ। और विशेष रूप में पूर्णांक चर के संदर्भ में, यह सिर्फ इसे में थूक नहीं जा रहा है यह एक चार के रूप में व्यवहार करने के लिए नहीं जा रहा है बाइट हिस्सा जरूरी यह वास्तव में हो रहा है चार एक बाइट हिस्सा के रूप में व्यवहार करने के लिए, जो कुछ इस तरह लग सकता है। और यहां तक ​​कि यह नहीं है पूरी तरह सच है, या तो कहा जाता है कुछ की वजह हम नहीं कर रहे हैं, जो एक endianness, , अब में शामिल होने के लिए जा रहा था लेकिन आप के बारे में उत्सुक हैं, आप थोड़ा पर पढ़ सकते हैं और बड़े endianness। लेकिन इस तर्क की खातिर, इस वीडियो की खातिर, बस उस में है, मान लेते हैं तथ्य यह है, कैसे संख्या 65 से होगा में प्रतिनिधित्व किया हर सिस्टम पर स्मृति, यह पूरी तरह सच नहीं है, हालांकि। लेकिन वास्तव में सिर्फ मिल जाने पूरी तरह से सभी बाइनरी से छुटकारा, और सिर्फ एच के रूप में के बारे में सोचते और 65 है, यह एक बहुत आसान है की तरह इसके बारे में सोचने के लिए एक इंसान के रूप में है। ठीक है, यह भी लगता है, तो शायद एक थोड़ा यादृच्छिक कि I've- मेरे प्रणाली बाइट्स 5, 6, 7 मुझे हार नहीं मानी, और 8 पूर्णांक स्टोर करने के लिए। उस के लिए एक कारण है, भी है जो हम अभी में मिलता है, लेकिन पर्याप्त नहीं होगा यह है कि क्या कहना है कंप्यूटर यहाँ क्या कर रहा है शायद अपने हिस्से पर एक अच्छा कदम है। मुझे है कि स्मृति देने के लिए नहीं जरूरी वापस करने के लिए वापस। अब यह क्या करने जा रहा है, हालांकि मैं एक और स्ट्रिंग प्राप्त करना चाहते हैं, उपनाम कहा जाता है, और मैं चाहता हूँ वहाँ में लॉयड रख दिया। मैं एक फिट की जरूरत के लिए जा रहा हूँ चरित्र, उस के प्रत्येक पत्र एक आवश्यकता होती जा रही चरित्र, स्मृति की एक बाइट। मैं अपने सरणी में लॉयड डाल सकता है तो अगर इस तरह मैं ठीक है, जाने के लिए बहुत अच्छा रहा हूँ? क्या कमी है? हर स्ट्रिंग हम काम करते हैं कि याद रखें सी बैकस्लैश शून्य के साथ समाप्त होता है के साथ, और हम यहाँ, या तो यह है कि न आना नहीं कर सकते। हम एक तरफ एक बाइट निर्धारित करने की आवश्यकता स्मृति की तो हम उस धारण करने के लिए हमारे स्ट्रिंग समाप्त हो गया जब पता है। तो फिर इस व्यवस्था जिस तरह से बातें की स्मृति पराक्रम में दिखाई देते हैं एक छोटी सी यादृच्छिक हो लेकिन यह वास्तव में कैसे सबसे प्रणालियों के डिजाइन किए हैं। गुणकों पर उन्हें लाइन चार में से, कारणों के लिए फिर से हम की जरूरत नहीं है कि अब सही में मिलता है। लेकिन यह इतना है कि कहने के लिए पर्याप्त कोड के इन तीन लाइनों के बाद, इस स्मृति की तरह लग सकता है। मैं स्मृति स्थानों की जरूरत है 4, 8, और 12, मेरे डेटा रखने के लिए यह मेरी स्मृति की तरह लग सकता है। और बस विशेष रूप से होना यहाँ, जब पंडिताऊ हम स्मृति के बारे में बात कर रहे हैं पते आमतौर पर हम इसलिए हेक्सादशमलव अंकन का उपयोग करना। तो क्यों न हम इन सभी को परिवर्तित नहीं करते हेक्साडेसिमल नोटेशन करने के लिए दशमलव से सिर्फ इतना है कि आम तौर पर है, क्योंकि हम कैसे स्मृति को देखें। तो बजाय के माध्यम से 0 होने का 19, क्या हमारे पास शून्य है शून्य X1 तीन के माध्यम से एक्स शून्य। उन स्मृति के 20 बाइट्स हैं कि हम या हम इस छवि में देख रहे हैं है यहीं। तो यह है कि कहा जा रहा है की सब, चलो एक पल के लिए स्मृति से दूर कदम और वापस संकेत करने के लिए। यहाँ सबसे महत्वपूर्ण है बात को याद हम संकेत के साथ काम करना शुरू कर के रूप में। एक सूचक कुछ भी नहीं है एक पते से अधिक है। मैं फिर से, क्योंकि यह कहूँगा यह महत्वपूर्ण है कि एक सूचक कुछ भी नहीं है एक पते से अधिक है। सूचक स्थानों के पते हैं स्मृति में चर कहाँ रहते हैं। यह उम्मीद है कि एक हो जाता है कि यह जानते हुए आसान थोड़ा सा उनके साथ काम करने के लिए। मुझे पसंद है एक और बात ऐसा करने के लिए तरह के लिए है के नेत्रहीन क्या प्रतिनिधित्व करने आरेख कोड के विभिन्न लाइनों के साथ हो रहा है। और हम इस एक जोड़ी करूँगा संकेत में कई बार, और हम गतिशील के बारे में बात करते हैं स्मृति आवंटन के रूप में अच्छी तरह से। मैं इन रेखाचित्रों कि क्योंकि उन्हें लगता है विशेष रूप से उपयोगी हो सकता है। मैं उदाहरण के लिए कहते तो अगर, पूर्णांक कश्मीर अपने कोड में, क्या हो रहा है? वैसे मूल रूप से क्या हो रहा है मैं, मेरे लिए अलग सेट स्मृति हो रही है लेकिन मैं यह भी पसंद नहीं है मुझे लगता है कि जैसे इसके बारे में सोचो एक बॉक्स की तरह इसके बारे में सोचना अच्छा लगता है। मैं एक बॉक्स है और यह बात है हरे रंग की वजह से मैं हरे बक्से में पूर्णांकों डाल सकते हैं। यह एक चरित्र मैं था, तो एक नीले बॉक्स हो सकता है। मैं निर्माण कर रहा हूँ लेकिन अगर मैं हमेशा से कहते हैं, पूर्णांकों पकड़ कर सकते हैं कि एक बॉक्स बॉक्स है कि हरे रंग का है। और मैं एक स्थायी मार्कर ले लो और मैं इसके पक्ष पर कश्मीर में लिखें। इसलिए मुझे लगता है, कश्मीर नामक एक बॉक्स है जिसमें मैं पूर्णांकों डाल सकते हैं। मैं पूर्णांक कश्मीर का कहना है कि जब इसलिए, कि क्या मेरे सिर में होता है। मैं कश्मीर पाँच के बराबर होती है कहते हैं, मैं क्या कर रहा हूँ? खैर, मैं पाँच डाल रहा हूँ बॉक्स में, सही है। यह तो, बहुत सीधा है मैं पूर्णांक कश्मीर, कश्मीर नामक एक बॉक्स बनाने का कहना है। अगर मैं, कश्मीर 5 के बराबर होती है कहना बॉक्स में पाँच डाल दिया। उम्मीद है कि एक छलांग के बहुत ज्यादा नहीं है। चीजें एक जाना जहां यहाँ है हालांकि दिलचस्प थोड़ा। मैं int * पी कहते हैं, मैं अच्छी तरह से नहीं है, भले यह जरूरी नहीं कि इसका मतलब क्या है, यह स्पष्ट रूप से कुछ मिल गया है एक पूर्णांक के साथ क्या करना है। इसलिए मैं रंग करने के लिए जा रहा हूँ हरे-ish इस बॉक्स, मैं इसे कुछ मिल गया है पता एक पूर्णांक के साथ क्या करना, लेकिन यह एक पूर्णांक में ही नहीं है, यह एक int सितारा है क्योंकि। कुछ थोड़ा नहीं है इसके बारे में अलग है। तो एक पूर्णांक के शामिल है, लेकिन अन्यथा यह है से बहुत अलग नहीं क्या हम के बारे में बात कर रहे थे। यह एक बॉक्स है, इसकी एक लेबल मिला यह एक लेबल पी पहने हुए है, और यह धारण करने में सक्षम है उन लोगों के हैं जो कुछ पूर्णांक सितारों। वे क्या कुछ हो पूर्णांकों के साथ स्पष्ट रूप से। यहाँ अंतिम पंक्ति यद्यपि। मैं कहना है कि अगर पी = एवं कश्मीर, वाह, क्या सिर्फ सही, क्या हुआ? इसलिए इस यादृच्छिक संख्या, मालूम होता है यादृच्छिक नंबर, वहाँ बॉक्स में फेंक दिया जाता है। है कि सभी, पी है कश्मीर का पता हो जाता है। कश्मीर स्मृति में रहती है जहां इसलिए मैं चिपका रहा हूँ, इसका पता, इसकी बाइट्स का पता। मैं क्या कर रहा हूँ सभी मैं कह रहा हूँ है कि मूल्य मैं जा रहा हूँ क्या है मेरे बॉक्स कहा जाता पी के अंदर डाल दिया। और ये बातें कर रहे हैं, क्योंकि संकेत, और लग रही है क्योंकि शून्य एक्स की तरह एक स्ट्रिंग पर आठ शून्य सी सात चार से आठ दो शून्य शायद है बहुत सार्थक नहीं। हम आम तौर पर संकेत जब कल्पना, हम वास्तव में संकेत के रूप में ऐसा करते हैं। पी हमें जानकारी देता है हम स्मृति में कश्मीर खोजने की जरूरत है। तो बुनियादी तौर पर पी उस में एक तीर है। और हम लंबाई चलना उस तीर का, कल्पना यह आप पर चल सकता है कुछ है, अगर हम तीर की लंबाई के साथ चलना है, उस तीर का बहुत नोक पर, हम स्मृति में स्थान मिलेगा जहां कश्मीर रहती है। और कहा कि वास्तव में महत्वपूर्ण है कश्मीर रहती है जहां हम जानते हैं क्योंकि एक बार, हम डेटा के साथ काम करने के लिए शुरू कर सकते हैं कि स्मृति स्थान के अंदर। हम एक नन्हा हो रही है हालांकि अब के लिए खुद से आगे काटा। तो एक सूचक क्या है? एक सूचक जिसका एक डेटा आइटम है मूल्य एक स्मृति पता है। यह थी कि शून्य एक्स आठ शून्य सामान कि पर जा रहा है, कि एक स्मृति पता था। यही कारण है कि स्मृति में एक स्थान था। और एक सूचक के प्रकार तरह का वर्णन डेटा का आप पर मिल जाएगा कि स्मृति पता। तो पूर्णांक स्टार भाग अभी भी वहीं है। मुझे लगता है कि तीर का पालन करते हैं, तो यह है एक स्थान के लिए मुझे नेतृत्व करने के लिए जा रहा है। और उस स्थान, क्या मैं मेरे उदाहरण में वहाँ मिल जाएगा, एक हरे रंग का डिब्बा है। ऐसा लगता है कि क्या हो रहा है, एक पूर्णांक है मैं मुझे लगता है कि पता करने के लिए जाना है, तो मिल जाएगा। एक के डेटा प्रकार सूचक का वर्णन क्या आपको लगता है कि स्मृति पते पर मिलेगा। तो यहाँ हालांकि वास्तव में अच्छी बात है। सूचक हमें पारित करने की अनुमति कार्यों के बीच चर। और वास्तव में चर पारित और उन की प्रतियां पारित नहीं। हम जानते हैं क्योंकि अगर वास्तव में, जहां स्मृति में एक चर खोजने के लिए, हम की एक प्रतिलिपि बनाने की जरूरत नहीं है यह है, हम सिर्फ उस स्थान पर जा सकते हैं और कहा कि चर के साथ काम करते हैं। सार संकेत में तो प्रकार का एक कंप्यूटर वातावरण बनाने एक बहुत अधिक वास्तविक दुनिया की तरह, सही है। तो यहाँ एक सादृश्य है। मैं एक नोटबुक है कि हम कहते हैं, सही है, और यह नोटों से भरा है। और मैं आप इसे अद्यतन करना चाहते हैं। आप एक समारोह कर रहे हैं कि अपडेट नोटों, सही है। रास्ते में हम किया गया है अब तक काम कर रहा है, क्या आप अपनी नोटबुक ले जाएगा जो होता है, आप कॉपी की दुकान में जाना होगा आप में से एक जेरोक्स कॉपी कर दूँगा नोटबुक के हर पेज। आप वापस अपनी नोटबुक छोड़ देंगे मेरी मेज पर जब आप कर रहे, तुम जाओ और में चीजों को बाहर पार करेंगे मेरी तारीख या गलत से बाहर हैं कि नोटबुक, और फिर तुम वापस करने के लिए पारित करेंगे मुझे जेरोक्स पृष्ठों के ढेर कि अपनी नोटबुक की एक प्रतिकृति के साथ है आप इसे करने के लिए बनाया गया है कि परिवर्तन। और उस बिंदु पर, के रूप में यह मेरे लिए है बुला समारोह, फोन करने वाले के रूप में, अपने नोट्स लेने के लिए तय करने के लिए और अपनी नोटबुक में उन्हें वापस एकीकृत। तो कदम की एक बहुत कुछ है यहाँ शामिल, सही है। जैसे कि यह बेहतर नहीं होगा मैं सिर्फ इतना कहना है, अगर अरे, आप कर सकते हैं के लिए अपनी नोटबुक अद्यतन मुझे, अगर आप अपनी नोटबुक हाथ और आप चीजों को लेने के लिए और सचमुच उन्हें बाहर पार और अपनी नोटबुक में अपने नोट्स का अद्यतन करें। और फिर मुझे अपनी नोटबुक वापस दे। यही कारण है कि की तरह है क्या संकेत, हमें ऐसा करने की अनुमति वे इस माहौल में एक बहुत बनाने हम वास्तविकता में कैसे काम अधिक की तरह। कि इतना सब क्या सही है एक सूचक, चलो बात है संकेत सी में काम करते हैं, और कैसे के बारे में कैसे हम उन लोगों के साथ काम करने के लिए शुरू कर सकते हैं। इसलिए एक बहुत ही सरल सूचक नहीं है, सी में शून्य सूचक कहा जाता है। कुछ भी नहीं करने के लिए शून्य सूचक अंक। यह है जैसे कि यह शायद लगता है वास्तव में नहीं है और एक बहुत ही उपयोगी चीज, लेकिन हम एक देखेंगे के रूप में पर बाद में थोड़ा, तथ्य इस शून्य सूचक है कि मौजूद है वास्तव में सच में काम में आ सकता है। और अगर आप एक सूचक बनाने के लिए जब भी, और आप अपने मूल्य immediately- सेट नहीं है स्थापित करने का एक उदाहरण अपने मूल्य तुरंत वापस एक जोड़े स्लाइड होगी मैं पी-कश्मीर के बराबर होती है जहां उन्होंने कहा कि पीके के रूप में, कश्मीर का पता हो जाता है हम, कि क्या मतलब देखेंगे हम उस कोड को कैसे देखेंगे shortly- हम कुछ करने के लिए अपने मूल्य निर्धारित नहीं करते हैं तुरंत सार्थक, आपको हमेशा करना चाहिए अशक्त करने के लिए बात करने के लिए अपने सूचक निर्धारित किया है। आप इसे कुछ भी करने के लिए बात करने के लिए स्थापित करना चाहिए। यही कारण है कि तुलना में बहुत अलग है यह है के रूप में सिर्फ मूल्य छोड़ने और फिर एक की घोषणा सूचक है और सिर्फ यह सोचते कि शायद ही कभी सच है क्योंकि यह शून्य है। तो तुम हमेशा की स्थापना करनी चाहिए एक सूचक का मूल्य आप अपने मूल्य निर्धारित नहीं करते हैं अशक्त करने के लिए तुरंत कुछ सार्थक करने के लिए। आप देख सकते हैं एक सूचक का मूल्य है कि क्या समानता ऑपरेटर का उपयोग रिक्त है (==), बस आप किसी भी पूर्णांक तुलना पसंद मूल्यों या चरित्र मूल्यों का उपयोग (==) भी। यह लगातार की एक विशेष प्रकार का है आप परीक्षण करने के लिए उपयोग कर सकते हैं कि मूल्य। तो यह है कि एक बहुत ही सरल था सूचक, शून्य सूचक। एक और रास्ता बनाने के लिए एक सूचक निकालने के लिए है एक चर का पता आप पहले से ही बनाया है, और आप इस का उपयोग करते हैं ऑपरेटर का पता निष्कर्षण। जो कि हम पहले से ही पहले देखा है पहले चित्र उदाहरण में मुझे पता चला है। एक्स हम है कि एक चर रहा है तो अगर पहले से ही प्रकार पूर्णांक का बनाया है, तब और एक्स एक पूर्णांक के लिए एक संकेत है। और एक्स है-, और निकालने के लिए जा रहा है याद सही पर बात की पता। और एक सूचक बस एक पता है के बाद से, की तुलना में और एक्स एक पूर्णांक के लिए एक संकेत है जिसका मूल्य जहां स्मृति एक्स जीवन में है। यह एक्स की पता है। तो और एक्स एक्स का पता है। चलो इस एक कदम आगे ले चलो आगे और कुछ करने के लिए कनेक्ट मैं एक पूर्व वीडियो में alluded। आगमन युगल की एक सरणी है, तो है और आगमन वर्ग कोष्ठक मैं एक सूचक है एक डबल करने के लिए। ठीक। मैं, यदि वर्ग कोष्ठक आगमन आगमन, युगल की एक सरणी है फिर मैं वर्ग ब्रैकेट आगमन उस सरणी की मैं वें तत्व, और & वर्ग कोष्ठक आगमन मैं जहां में है स्मृति आगमन की मैं वें तत्व मौजूद है। इसलिए निहितार्थ यहां क्या हो रहा है? एक सरणियों नाम, निहितार्थ इस पूरी बात की, एक सरणी का नाम है वास्तव में अपने आप में एक सूचक। आप काम कर रहा है सभी के साथ संकेत के साथ आप एक सरणी का उपयोग किया है कि हर बार। उदाहरण से याद रखें चर गुंजाइश पर, मैं वर्तमान वीडियो के अंत के पास हम एक समारोह के लिए है, जहां एक उदाहरण कहा जाता सेट पूर्णांक और एक समारोह सेट सरणी बुलाया। और अपनी चुनौती निर्धारित करने के लिए चाहे या नहीं, या क्या हम बाहर मुद्रित कि मानों समारोह के अंत में, मुख्य कार्यक्रम के अंत में। आपको लगता है कि उदाहरण से याद करते हैं या आप वीडियो देखा है, आप के लिए कॉल तुम्हें-जब पता है कि सेट पूर्णांक प्रभावी रूप से कुछ भी नहीं है। लेकिन कॉल सरणी करता है स्थापित करने के लिए। और मैं की तरह क्यों भुला उस समय मामला था। मैं सिर्फ यह अच्छी तरह से, यह एक सरणी है, ने कहा कि खास है, आप जानते हैं, एक कारण नहीं है। कारण यह है कि एक सरणी की है नाम, वास्तव में सिर्फ एक सूचक है और इस विशेष वहाँ वर्ग कोष्ठक वाक्य रचना कि साथ काम करने के लिए चीजें बहुत अच्छे हैं। और वे एक का विचार करना एक बहुत कम डराना सूचक, वे तरह कर रहे हैं और यही वजह है कि उस तरीके से प्रस्तुत किया। लेकिन वास्तव में सरणियों सिर्फ संकेत दिए गए हैं। और यही कारण है कि जब हम , सरणी के लिए एक परिवर्तन किया हम एक पैरामीटर के रूप में एक सरणी से पारित कर दिया जब एक समारोह के लिए या एक तर्क के रूप में सरणी के एक समारोह के लिए, सामग्री वास्तव में दोनों कॉल प्राप्त करने वाला में बदल और कॉलर में। के हर दूसरे प्रकार के लिए कौन सा हमने देखा चर मामला नहीं था। तो यह है कि में रखने के लिए बस कुछ है आप संकेत के साथ काम कर रहे हैं जब मन, है कि एक का नाम सरणी वास्तव में एक सूचक उस सरणी के पहले तत्व के। ठीक है तो अब हम इन सब है तथ्यों, चलो ठीक है, जा रहा रखने दें। क्यों हम के बारे में परवाह करते हैं जहां कुछ रहता है। मैंने कहा ठीक है की तरह, यह सुंदर है कुछ रहता है, जहां पता करने के लिए उपयोगी तो तुम वहाँ जाना है और इसे बदल सकते हैं। इसके साथ काम करते हैं और वास्तव में बात यह है कि आप कि चर ले प्रभाव के लिए करना चाहते हैं, और इसके बारे में कुछ नकल पर प्रभावी नहीं। इस अपसंदर्भन कहा जाता है। हम संदर्भ में जाना और हम वहाँ मूल्य बदल जाते हैं। हम एक सूचक है और यदि हां यह कहा जाता है पीसी, और यह एक चरित्र के लिए अंक, फिर हम * पीसी और * पीसी है कह सकते हैं हम चलते हैं तो हम क्या मिलेगा के नाम पता पीसी के लिए। क्या हम वहाँ मिल जाएगा एक चरित्र है और * पीसी हम उस पर आंकड़ों को देखें कैसे स्थान। तो हम जैसे कुछ कह सकते हैं * पीसी = डी या ऐसा कुछ, और कहा कि इसका मतलब है कि जो कुछ भी , स्मृति पता पीसी पर था जो कुछ भी चरित्र पहले से था हम पीसी = डी * कहना है कि अगर वहाँ है, अब डी है। यहाँ तो हम साथ फिर से जाना कुछ अजीब सी चीज नहीं है, सही है। इसलिए हम होने के रूप में पहले से * देखा है किसी भी तरह के डेटा प्रकार का हिस्सा है, और अब यह प्रयोग किया जा रहा है एक अलग संदर्भ एक स्थान पर डेटा का उपयोग करने के लिए। मैं इसे एक छोटे से भ्रामक है पता है और कि वास्तव में यह पूरा का हिस्सा है जैसे, क्यों संकेत इस पौराणिक कथाओं है उन्हें चारों ओर इतनी जटिल होने के रूप में, ईमानदारी से, एक वाक्य रचना समस्या की तरह है। लेकिन * दोनों ही संदर्भों में इस्तेमाल किया जाता है, दोनों प्रकार के नाम के हिस्से के रूप में, और हम एक छोटे से देखेंगे भी बाकी बाद में कुछ। और अभी है भिन्नता ऑपरेटर। तो यह संदर्भ के लिए चला जाता है, यह डेटा तक पहुँचता सूचक के स्थान पर और आप अपनी मर्जी से यह हेरफेर करने के लिए अनुमति देता है। अब इस के समान है अपने पड़ोसी का दौरा, सही है। यदि आप जानते हैं कि क्या आपके पड़ोसी आप कर रहे हैं, रहता है अपने पड़ोसी के साथ बाहर फांसी नहीं। आप को कुछ नहीं जानते जहां वे रहते हैं पता है, लेकिन उस से मतलब नहीं है कि कि ज्ञान होने के पुण्य आप उन लोगों के साथ बातचीत कर रहे हैं। आप उन लोगों के साथ बातचीत करने के लिए चाहते हैं, आप अपने घर के पास जाना है आप जहां वे रहते हैं के लिए जाना है। और तुम हो कि एक बार, तो आप बातचीत कर सकते हैं उनके साथ केवल आपके लिए चाहता हूँ की तरह। और इसी प्रकार चर के साथ, आप उनका पता करने के लिए जाने की जरूरत है आप उन्हें बातचीत करना चाहते हैं, अगर आप अभी पता नहीं कर सकते हैं। और अगर आप पता करने के लिए जाने का रास्ता है *, भिन्नता ऑपरेटर का उपयोग करने के लिए। आप क्या होता है क्या लगता है हम कोशिश करते हैं और भिन्नता है, तो जिसका मूल्य एक सूचक रिक्त है? अशक्त याद है कि सूचक कुछ भी करने के लिए अंक। आप कोशिश करते हैं और भिन्नता तो अगर कुछ भी नहीं एक पता कुछ भी नहीं करने के लिए जाने के लिए या, आप क्या होता है लगता है? वैसे आप अनुमान लगाया है, तो विभाजन गलती, तुम सही होगा। आप कोशिश करते हैं और भिन्नता तो एक शून्य सूचक, आप एक विभाजन पीड़ित गलती। पर रुको, मुझे लगता है कि, आप नहीं बताया आप नहीं जा रहे हैं के अपने मूल्य निर्धारित करने के लिए अपने कुछ सार्थक करने के लिए सूचक, तुम अशक्त करने के लिए सेट करना चाहिए? मैंने किया था और वास्तव में विभाजन गलती एक अच्छे व्यवहार की तरह है। क्या तुमने कभी एक चर घोषित किया है और तुरंत अपने मूल्य नहीं सौंपा? तो तुम सिर्फ int x कहना; तुम नहीं करते वास्तव में कुछ भी करने के लिए आवंटित और फिर बाद में अपने कोड में, आप एक्स के मूल्य प्रिंट आउट अभी भी नहीं हो रही है कुछ भी करने के लिए इसे सौंपा। बार-बार आपको मिलेगा शून्य है, लेकिन कभी कभी आप कुछ यादृच्छिक संख्या में मिलता है, और हो सकता है आप यह कहाँ से आया पता नहीं है। इसी तरह बातें कर सकते हैं संकेत के साथ होता है। आप एक सूचक घोषित पूर्णांक * उदाहरण के लिए पी, और तुम, एक मूल्य को आवंटित नहीं है आप स्मृति के लिए चार बाइट्स मिलता है। के जो भी चार बाइट्स सिस्टम स्मृति कर सकते हैं कुछ सार्थक मूल्य है कि लगता है। और वहाँ गया हो सकता है वहां पहले से ही है कि कुछ किसी अन्य के द्वारा की जरूरत नहीं रह जाती है समारोह, तुम बस है तो जो कुछ भी डेटा नहीं था। क्या आप भिन्नता करने की कोशिश करता है, तो तुम वहाँ थे नहीं- कि कुछ पता पहले से ही बाइट्स और जानकारी में वहाँ, कि अपने सूचक में अब है। , आप कोशिश करते हैं और कि सूचक भिन्नता आप कुछ स्मृति के साथ खिलवाड़ किया जा सकता है आप का इरादा नहीं था कि यह सभी के साथ गड़बड़ करने के लिए। और वास्तव में आप कर सकते हैं वास्तव में विनाशकारी कुछ, की तरह एक और कार्यक्रम को तोड़ने, या, एक अन्य समारोह को तोड़ने या कि दुर्भावनापूर्ण कुछ करना तुम सब पर क्या करने का इरादा नहीं था। यह क्यों है और इसलिए है कि वास्तव में एक अच्छा विचार आप यदि अशक्त करने के लिए अपने संकेत स्थापित करने के लिए कुछ सार्थक करने के लिए उन्हें निर्धारित नहीं है। यह शायद बेहतर है अपने कार्यक्रम के लिए दिन के अंत यह करने के लिए तो दुर्घटना के लिए कुछ है कि शिकंजा एक अन्य कार्यक्रम के लिए या किसी अन्य समारोह। यही कारण है कि व्यवहार भी शायद है बस के दुर्घटनाग्रस्त होने से कम आदर्श। यह क्यों है और इसलिए है कि वास्तव में एक अच्छी आदत अपने संकेत सेट करने में लाने के लिए आप उन्हें सेट नहीं करते हैं तो अशक्त करने के लिए एक सार्थक मूल्य के लिए क्या आप जानते हैं कि तुरंत, एक मूल्य और कहा कि तुम भिन्नता सुरक्षित रूप से कर सकते हैं। तो चलो अब वापस आते हैं और एक नज़र रखना स्थिति के समग्र वाक्य रचना में। मैं int * पी कहते हैं ;, मैं सिर्फ क्या किया है? मैंने क्या किया है यह है। मैं पी का मूल्य एक पता है सभी संकेत कर रहे हैं बस क्योंकि पतों। मैं कर सकता हूँ भिन्नता पी * ऑपरेटर का उपयोग। बहुत से यहां इस संदर्भ में, शीर्ष * प्रकार का हिस्सा है याद करते हैं। इंट * डेटा प्रकार है। लेकिन मैं भिन्नता कर सकते हैं * ऑपरेटर का उपयोग कर पी, और मैं ऐसा करते हैं, मुझे लगता है कि पता करने के लिए जाना है, मैं उस पते पर क्या मिलेगा? मैं एक पूर्णांक मिलेगा। तो पूर्णांक * पी मूल रूप से है कह रही है, पी एक पता है। मैं पी सकते हैं भिन्नता और यदि मुझे क्या करना है, मैं एक पूर्णांक मिलेगा कि स्मृति स्थान पर। ठीक है तो मैं एक और ने कहा कि सितारों के साथ कष्टप्रद बात और यहाँ है कि जहां सितारों के साथ कष्टप्रद बात है। यदि आप कभी भी घोषित करने की कोशिश की है एक ही प्रकार के एकाधिक चर कोड की एक ही लाइन पर? तो एक पल के लिए, कि लाइन का नाटक मैं वास्तव में हरे रंग में वहाँ है कोड वहाँ नहीं है और यह सिर्फ पूर्णांक एक्स, वाई, जेड कहते हैं ;. क्या ऐसा होगा वास्तव में बनाने के लिए है आप के लिए तीन पूर्णांक चर, एक बुलाया एक्स, एक बुलाया वाई, और एक Z बुलाया। इसके बिना यह करने के लिए एक रास्ता है तीन लाइनों पर विभाजित करने के लिए कर रही है। सितारों प्राप्त जहां यहाँ है हालांकि फिर से परेशान है, * वास्तव में हिस्सा है क्योंकि दोनों प्रकार का नाम और भाग की चर नाम की। और इसलिए मैं कहना है कि अगर पूर्णांक * पिक्सल, PY, PZ, क्या मैं वास्तव में मिलता है एक पूर्णांक के लिए एक संकेत है पिक्सल और दो पूर्णांकों, PY और PZ बुलाया। और कहा कि शायद नहीं क्या हो रहा है हम यह अच्छा नहीं है, चाहते हैं। मैं कई संकेत बनाने के लिए चाहते हैं तो एक ही लाइन पर, एक ही प्रकार की, मैं वास्तव में क्या जरूरत है और तारे, ऐसा करने के लिए * पंजाब, * पीसी, पूर्णांक * देहात का कहना है। अब बस वाले ने कहा कि और अब, आप यह कह आप शायद ऐसा कभी नहीं होगा। और यह ईमानदारी से शायद एक अच्छी बात है आप अनजाने में हो सकता है क्योंकि एक स्टार है, ऐसा कुछ न आना। यह शायद घोषित करने के लिए शायद सबसे अच्छा है अलग-अलग लाइनों पर संकेत, लेकिन यह सिर्फ एक और एक है उन कष्टप्रद वाक्य रचना की करना है कि सितारों के साथ बातें साथ काम करने के लिए इतना मुश्किल संकेत दिए। यह सिर्फ इस वाक्यात्मक क्योंकि है गंदगी आप के माध्यम से काम करना है। अभ्यास के साथ करता है वास्तव में दूसरी प्रकृति हो। मैं अभी भी अभी भी उसके साथ गलतियाँ करते हैं 10 साल के लिए प्रोग्रामिंग के बाद, अगर कुछ होता है, इसलिए परेशान मत हो आप के लिए, यह ईमानदारी से बहुत आम है। यह एक तरह से सच है वाक्य रचना का एक दोष। ठीक है तो मैं एक तरह से वादा किया हम फिर से आना होता है कि कैसे बड़े की अवधारणा को एक स्ट्रिंग है। वैसे मैं एक है कि अगर मैंने तुमसे कहा स्ट्रिंग, हम किस तरह का सच है आप के लिए पूरे समय झूठ बोल रहा। कहा जाता कोई डेटा प्रकार है स्ट्रिंग, और वास्तव में मैं में से एक में यह उल्लेख किया है हमारी डेटा प्रकार पर जल्द से जल्द वीडियो, कि स्ट्रिंग एक डेटा प्रकार था कि CS50.h. में आप के लिए बनाया गया था आप # शामिल करने की जरूरत इसका इस्तेमाल करने के क्रम में CS50.h। खैर स्ट्रिंग सिर्फ सच है कुछ के लिए एक उर्फ , चार * कहा जाता है एक एक चरित्र के लिए सूचक। खैर संकेत, याद है, सिर्फ पते हैं। तो आकार क्या है एक स्ट्रिंग के बाइट्स में? वैसे यह चार या आठ है। और कारण है कि मैं कहना है कि चार या आठ इसकी वजह यह वास्तव में है आप उपयोग कर रहे हैं, तो सिस्टम पर निर्भर करता है CS50 आईडीई, चार * एक चार का आकार है * यह एक 64-बिट सिस्टम है, आठ है। स्मृति में हर पता 64 बिट्स लंबा है। आप CS50 उपकरण का उपयोग कर रहे हैं या किसी भी 32-बिट मशीन का उपयोग कर, और आप उस अवधि 32-बिट सुना है मशीन, एक 32-बिट मशीन क्या है? वैसे यह बस हर मतलब है कि स्मृति में पता 32 बिट लंबा है। और तो 32 बिट चार बाइट्स है। तो एक चार * चार या आठ है अपने सिस्टम के आधार पर बाइट्स। और वास्तव में किसी भी प्रकार के डेटा, और किसी भी डेटा के लिए एक सूचक सभी संकेत अभी नहीं हैं, टाइप पते, चार या आठ बाइट्स हैं। तो चलो इस पर फिर से आना चलो चित्र और के निष्कर्ष निकाल दें यहां एक छोटे से व्यायाम के साथ इस वीडियो। यहाँ तो हम से दूर छोड़ दिया आरेख है वीडियो के बहुत शुरुआत में। मैं * पी = 35 का कहना है कि यदि ऐसा है तो अब क्या होता है? तो यह * पी = 35, जब मैं कहता हूँ क्या मतलब है? एक दूसरा ले लो। * पी। यहां संदर्भ में, * है भिन्नता ऑपरेटर। तो जब भिन्नता ऑपरेटर, प्रयोग किया जाता है पता की ओर इशारा करने के लिए हमें जाना पी द्वारा, और हम हम क्या मिल बदल जाते हैं। तो * पी = 35 प्रभावी ढंग से तस्वीर के लिए इस करता है। तो यह वाक्य रचना मूल रूप से है के लिए समान कश्मीर = 35 के बाद कहा। एक और। मैं पूर्णांक मीटर कहते हैं, मैं बना एम नामक एक नया चर। एक नया बॉक्स, यह एक हरे बॉक्स क्योंकि है यह एक पूर्णांक आयोजित करने जा रहा है, और यह मीटर लेबल है। मैं मीटर = 4 कहते हैं, मैं एक डाल लगता है कि बॉक्स में पूर्णांक। कहते पी = एंड एम, कैसे करता है इस चित्र परिवर्तन? पी = एंड एम, आप क्या याद करना और ऑपरेटर करता है या कहा जाता है? कि और कुछ चर नाम याद रखें एक चर नाम का पता है। तो क्या हम कह रहे है पी एम का पता हो जाता है। और इसलिए प्रभावी रूप से क्या होता है आरेख कि अब कोई अंक पी है मीटर करने के लिए है, लेकिन अंक कश्मीर के लिए। फिर संकेत बहुत हैं साथ काम करने के लिए मुश्किल और वे का एक बहुत ले अभ्यास है, लेकिन क्योंकि आप अनुमति देने के लिए अपनी क्षमता का कार्यों के बीच डेटा पारित करने के लिए और वास्तव में उन लोगों के लिए है परिवर्तनों को प्रभावी, चारों ओर अपने सिर हो रही है वास्तव में महत्वपूर्ण है। यह शायद सबसे जटिल है हम CS50 में चर्चा विषय, लेकिन मूल्य कि आप संकेत का उपयोग करने से मिलता है अब तक जटिलताओं outweighs कि उन्हें सीखने से आते हैं। इसलिए मैं आप की शुभकामनाएं भाग्य संकेत के बारे में सीखने। मैं डौग लॉयड हूँ, इस CS50 है।