[Powered by Google Translate] चलो arrays के बारे में बात करते हैं.
क्यों तो हम कभी arrays का उपयोग करना चाहते हैं?
अच्छा चलो कहते हैं कि आप एक कार्यक्रम की जरूरत है कि 5 छात्र आईडी की दुकान है.
यह उचित प्रतीत 5 अलग चर हो सकता है.
कारण हम एक बिट में देखेंगे, हम 0 से गिनती शुरू करेंगे.
चर हम होगा int id0, int id1, और इतने पर होगा.
हम एक छात्र आईडी पर प्रदर्शन करना चाहते हैं कोई तर्क में कॉपी और चिपकाया जा आवश्यकता होगी
इन छात्र आईडी में से प्रत्येक के लिए.
यदि हम जाँच के लिए है जो छात्रों CS50 में होना होता है चाहते हैं,
हम पहले की जाँच करने के अगर id0 पाठ्यक्रम में छात्र का प्रतिनिधित्व करता है की आवश्यकता होगी.
तो अगले छात्र के लिए एक ही है, हम कॉपी और id0 के लिए कोड पेस्ट करने की आवश्यकता होगी
और id1 साथ और इतने पर ID2, 3, और 4 के लिए id0 की सभी घटनाओं की जगह.
>> जैसे ही आप सुना है कि हम को कॉपी और पेस्ट करने की आवश्यकता है,
आप यह सोच रही है कि वहाँ एक बेहतर समाधान है शुरू कर देना चाहिए.
अब क्या हुआ अगर आपको पता है आप 5 छात्र आईडी की ज़रूरत नहीं है, लेकिन बल्कि 7?
आप अपने स्रोत कोड में वापस जाने के लिए और एक id5 में जोड़ने की जरूरत है, एक id6,
और कॉपी और पेस्ट की जाँच के लिए तर्क अगर आईडी इन 2 नए आईडी के लिए वर्ग के लिए हैं.
वहाँ इन सब आईडी को एक साथ जोड़ने के लिए कुछ भी नहीं है, और इसलिए वहाँ पूछने का कोई रास्ता नहीं है
कार्यक्रम के माध्यम से 6 आईडी 0 के लिए ऐसा करने के लिए.
खैर अब आप महसूस करते हैं आप 100 छात्र आईडी है.
यह आदर्श से कम करने के लिए अलग से इन आईडी के प्रत्येक घोषणा की जरूरत प्रतीत शुरू हो रहा है,
और कॉपी और पेस्ट उन नए आईडी के लिए किसी भी तर्क.
लेकिन शायद हम निर्धारित कर रहे हैं, और हम इसे सभी 100 छात्रों के लिए करते हैं.
लेकिन क्या अगर तुम नहीं जानते कि कितने छात्रों को वहाँ वास्तव में कर रहे हैं?
वहाँ सिर्फ कुछ n छात्रों और अपने कार्यक्रम के लिए उपयोगकर्ता की कि क्या n है पूछना है.
उह ओह. यह बहुत अच्छी तरह से काम करने के लिए नहीं जा रहा है.
आपका कार्यक्रम केवल छात्रों के कुछ निरंतर संख्या के लिए काम करता है.
>> इन सभी समस्याओं का हल arrays के सौंदर्य है.
तो एक सरणी क्या है?
कुछ प्रोग्रामिंग भाषाओं में एक सरणी प्रकार के लिए थोड़ा और अधिक करने में सक्षम हो सकता है,
लेकिन यहाँ हम बुनियादी सरणी डेटा संरचना पर ध्यान केंद्रित करने के लिए बस के रूप में आप यह सी में देखेंगे
एक सरणी सिर्फ स्मृति का एक बड़ा ब्लॉक है. बस.
जब हम कहते हैं कि हम 10 integers के एक सरणी है, कि बस मतलब हम कुछ ब्लॉक है
स्मृति की है कि काफी बड़े के लिए 10 अलग integers पकड़ है.
यह मानते हुए कि एक पूर्णांक 4 बाइट्स है, इसका मतलब है कि 10 integers के एक सरणी
स्मृति में 40 बाइट्स की एक सतत ब्लॉक है.
यहां तक ​​कि जब आप में बहुआयामी arrays, जो हम यहाँ में नहीं जाऊँगा का उपयोग,
यह अभी भी सिर्फ स्मृति का एक बड़ा ब्लॉक है.
बहुआयामी अंकन बस एक सुविधा है.
यदि आप 3 बहुआयामी सरणी पूर्णांकों की एक 3 है,
तो अपने कार्यक्रम वास्तव में सिर्फ 36 बाइट्स की एक बड़ी बाधा के रूप में इस का इलाज करेंगे.
पूर्णांकों की कुल संख्या 3 3 बार है, और प्रत्येक पूर्णांक 4 बाइट्स लेता है.
>> चलो एक बुनियादी उदाहरण पर एक नज़र रखना.
हम यहाँ की घोषणा arrays के 2 अलग अलग तरीकों से देख सकते हैं.
हम उनमें से एक कार्यक्रम संकलन करने के लिए बाहर टिप्पणी करना होगा
के बाद से हम x दो बार की घोषणा.
हम एक बिट में घोषणाओं के इन 2 प्रकार के बीच मतभेद के कुछ पर एक नज़र रखना होगा.
इन दोनों लाइनों के आकार एन के एक सरणी की घोषणा,
जहां हम # 10 के रूप में एन को परिभाषित करते हैं.
हम बस के रूप में आसानी से एक सकारात्मक पूर्णांक के लिए उपयोगकर्ता से पूछा हो
और हमारे सरणी में तत्वों की एक संख्या के रूप में है कि पूर्णांक प्रयोग किया जाता है.
हमारे छात्र आईडी उदाहरण पहले की तरह, 10 पूरी तरह से अलग घोषित करने की तरह तरह की है
काल्पनिक चर, x0, x1, x2, और इसलिए XN-1.
लाइनों की उपेक्षा कर जहाँ हम सरणी की घोषणा, वर्ग कोष्ठक बरकरार नोटिस
loops के लिए अंदर.
जब हम एक्स की तरह कुछ लिखने [3], मैं सिर्फ एक्स 3 ब्रैकेट के रूप में पढ़ा होगा,
आप यह सोच काल्पनिक x3 के लिए पूछ की तरह कर सकते हैं.
आकार N, इस का मतलब है कि कोष्ठक के अंदर नंबर, एक सरणी के साथ तुलना सूचना
जो हम सूचकांक फोन करता हूँ, 0 से N-1 के लिए कुछ भी किया जा सकता है,
जो एन सूचकांक के एक कुल है.
>> के बारे में सोचते हैं कि यह कैसे काम करता है वास्तव में
याद है कि सरणी में स्मृति का एक बड़ा ब्लॉक है.
यह मानते हुए कि एक पूर्णांक 4 बाइट्स है, पूरे सरणी x स्मृति का एक 40 बाइट ब्लॉक है.
तो बहुत पहले ब्लॉक के 4 बाइट्स x0 को संदर्भित करता है.
एक्स [1] अगले 4 बाइट्स और इतने पर करने के लिए संदर्भित करता है.
इसका मतलब यह है कि एक्स का शुरू सभी कार्यक्रम कभी का ट्रैक रखने की जरूरत है.
यदि आप एक्स [400] का उपयोग करना चाहते हैं, तो इस कार्यक्रम जानता है कि यह बराबर है
एक्स के शुरू होने के बाद 1,600 बाइट्स.
हम कहाँ से 1600 बाइट्स मिल? यह पूर्णांक प्रति बस 400 4 बार बाइट्स है.
>> पर जाने से पहले, यह बहुत महत्वपूर्ण है को एहसास है कि सी में
सूचकांक कि हम सरणी में उपयोग की कोई प्रवर्तन है.
हमारा बड़ा ब्लॉक 10 केवल पूर्णांकों लंबी है, लेकिन कुछ भी नहीं है हम पर चिल्लाना अगर हम एक्स [20] लिखना होगा
या यहाँ तक कि एक्स [-5].
सूचकांक भी एक संख्या होना जरूरी नहीं है.
यह किसी भी मनमाने ढंग से अभिव्यक्ति हो सकती है.
कार्यक्रम में हम से सरणी में सूचकांक पाश के लिए मैं चर का उपयोग करें.
यह एक बहुत ही आम पैटर्न है, i = 0 से सरणी की लंबाई पाशन
और फिर मैं सरणी के लिए सूचकांक के रूप में उपयोग कर रहे हैं.
इस पूरे सरणी को प्रभावी ढंग से खत्म पाश रास्ते में,
और आप या तो सरणी में हर जगह के लिए आवंटित कर सकते हैं या यह कुछ गणना के लिए उपयोग कर सकते हैं.
>> पाश के लिए 1 में, मैं 0 में शुरू होता है,
और तो यह सरणी में हाजिर 0, 2 0 बार मूल्य के लिए आवंटित करेगा.
तो मैं वेतन वृद्धि, और हम सरणी मूल्य 1 बार 2 में पहली जगह आवंटित.
तो ऊपर पर मैं फिर से और इतना वेतन वृद्धि जब तक हम सरणी में N-1 स्थिति असाइन करने के लिए
मूल्य एन 1 2 बार.
तो हम पहले 10 भी संख्या के साथ एक सरणी बनाया है.
शायद evens एक्स की तुलना में एक चर के लिए थोड़ा बेहतर नाम होता है,
लेकिन यह है कि चीजों को दूर दिया जाएगा.
पाश के लिए 2 तो सिर्फ प्रिंट मूल्यों है कि हम पहले से ही सरणी के अंदर संग्रहित है.
>> चलो सरणी घोषणाओं के दोनों प्रकार के साथ कार्यक्रम चलाने की कोशिश
और कार्यक्रम के उत्पादन में एक नज़र रखना.
जहाँ तक के रूप में हम देख सकते हैं, कार्यक्रम घोषणाओं के दोनों प्रकार के लिए उसी तरह व्यवहार करता है.
चलो यह भी क्या होता है पर एक नज़र रखना अगर हम 1 पाश बदल एन पर रोक नहीं
बल्कि 10,000 कहते हैं.
सरणी के अंत से परे एक रास्ता.
उफ़! शायद आप इस पहले देखा है.
सेगमेंटेशन फॉल्ट का मतलब है अपने कार्यक्रम दुर्घटनाग्रस्त हो गया है.
आप इन देख शुरू जब आप स्मृति के क्षेत्रों को छू नहीं होना चाहिए छू.
यहाँ हम एक्स के शुरू से परे 10,000 स्थानों को छू रहे हैं,
जो जाहिर स्मृति में एक जगह हम को छू नहीं होना चाहिए है.
हम में से ज्यादातर तो शायद गलती से 10,000 एन के बजाय नहीं रखा जाएगा,
लेकिन क्या होगा अगर हम कुछ अधिक की तरह सूक्ष्म लिखने से कम या बराबर एन का कहना है
पाश के लिए शर्त के रूप में करने का विरोध किया में एन के कम से कम
याद रखें कि एक सरणी केवल 0 से N-1 इंडेक्स है,
जिसका मतलब है कि सूचकांक एन सरणी के अंत से परे है.
कार्यक्रम के इस मामले में दुर्घटना नहीं है, लेकिन यह अभी भी एक त्रुटि है हो सकता है.
वास्तव में, इस त्रुटि इतना आम है कि यह है खुद के नाम है,
1 त्रुटि से बंद.
>> कि यह मूल के लिए है.
तो सरणी घोषणाओं के 2 प्रकार के बीच मुख्य अंतर क्या हैं?
एक फर्क है, जहां स्मृति की बड़ी ब्लॉक हो जाता है.
पहली घोषणा में, जो मैं ब्रैकेट सरणी प्रकार फोन करता हूँ,
हालांकि यह है कोई एक परंपरागत नाम का मतलब है,
यह ढेर पर जाना होगा.
जबकि 2, जो मैं सूचक सरणी प्रकार फोन करता हूँ, यह ढेर पर जाना होगा.
इसका मतलब यह है कि जब समारोह रिटर्न, ब्रैकेट सरणी स्वतः deallocated हो जाएगा,
के रूप में आप explicitily सूचक सरणी पर नि: शुल्क फोन करना चाहिए जबकि
या फिर आप एक स्मृति रिसाव है.
इसके अतिरिक्त, ब्रैकेट सरणी वास्तव में एक चर नहीं है.
यह महत्वपूर्ण है. यह सिर्फ एक प्रतीक है.
आप इसे एक निरंतर है कि संकलक आप के लिए चयन के रूप में सोच सकते हैं.
इसका मतलब यह है कि हम कुछ नहीं कर सकते x + + ब्रैकेट प्रकार के साथ की तरह,
हालांकि इस सूचक प्रकार के साथ पूरी तरह से वैध है.
>> सूचक प्रकार एक चर है.
सूचक प्रकार के लिए, हम स्मृति के 2 अलग - अलग ब्लॉक है.
चर ही x ढेर में संग्रहीत किया जाता है और सिर्फ एक ही सूचक है,
लेकिन स्मृति के बड़े ब्लॉक ढेर पर संग्रहीत किया जाता है.
ढेर पर चर x बस पता संग्रहीत करता
बड़ा ब्लॉक के ढेर पर स्मृति की.
इस का एक निहितार्थ ऑपरेटर के आकार के साथ है.
यदि आप ब्रैकेट सरणी के आकार के लिए पूछना है, यह आप स्मृति की बड़ी ब्लॉक के आकार दे देंगे,
40 बाइट की तरह कुछ,
लेकिन अगर आप सरणी के सूचक प्रकार के आकार के लिए पूछना,
यह तुम चर x ही है, जो उपकरण पर होने की संभावना सिर्फ 4 बाइट्स के आकार दे देंगे.
सूचक सरणी प्रकार का उपयोग करना, यह असंभव है सीधे के लिए पूछ
स्मृति के बड़े ब्लॉक के आकार.
यह आमतौर पर प्रतिबंध के बाद से हम बहुत मुश्किल से ही आकार नहीं करना चाहता है
की स्मृति का बड़ा ब्लॉक है, और हम आम तौर पर यह गणना अगर हम यह जरूरत हो सकता है.
>> अंत में, ब्रैकेट सरणी के लिए हमें एक सरणी आरंभ करने के लिए एक शॉर्टकट के साथ प्रदान करने के लिए होता है.
चलो देखते हैं कि कैसे हम पहले 10 भी शॉर्टकट initilization का उपयोग integers लिख सकता.
सूचक सरणी के साथ, वहाँ इस तरह एक शॉर्टकट के लिए एक रास्ता नहीं है.
यह सिर्फ क्या आप arrays के साथ कर सकते हैं के लिए एक परिचय है.
वे लगभग हर कार्यक्रम आप लिखने में दिखाते हैं.
उम्मीद है अब आप छात्र आईडी उदाहरण करने का एक बेहतर तरीका देख सकते हैं
वीडियो की शुरुआत से.
>> मेरा नाम रोब Bowden है, और इस CS50 है.