>> [संगीत बजाना]
>> डौग लॉयड: ठीक है।
हम पूर्णांकों के साथ काम किया है, हम पात्रों के साथ काम किया है,
हम मंगाई काम किया है, युगल, तार, और bools।
हम सभी बहुत सुंदर समाप्त किया [अश्राव्य] प्रकार की है कि
साथ में हम सभी के लिए उपलब्ध किया गया है।
लेकिन अब हम अधिक कुछ करना चाहते हैं।
हम इसे कैसे करते हैं?
कैसे हम विभिन्न प्रकार के डेटा बना सकता हूँ?
हम संरचनाओं का उपयोग करके ऐसा कर सकते हैं।
तो संरचनाओं हमें एकजुट करने की अनुमति विभिन्न प्रकार के चर
एक एकल, नया चर प्रकार में, जो हम अपने स्वयं के प्रकार का नाम निर्दिष्ट कर सकते हैं।
यह एक बहुत मजबूत है बात यह है कि ऐसा करने में सक्षम होने के लिए
हम समूह अब कर सकते हैं क्योंकि विभिन्न प्रकार के डेटा के तत्वों
एक साथ एक तार्किक संबंध है।
हम ऐसा करने में सक्षम किया गया है एक तरह से सरणियों के साथ, है ना?
हम कर सकते हैं समूह चर एक ही डेटा प्रकार की
एक साथ एक बड़ी इकाई में स्मृति, एक सरणी की।
>> लेकिन हम मिश्रण करने में सक्षम नहीं किया गया है एक साथ विभिन्न प्रकार के डेटा।
हम, एक पूर्णांक जोड़ी, नहीं कह सकता और एक चरित्र, और एक डबल सभी
एक ही बात में और एक इकाई है कि कहते हैं।
लेकिन साथ संरचनाओं, या अक्सर, structs के रूप में भेजा
हम वास्तव में कर सकते हैं।
तो एक संरचना प्रकार है के एक सुपर चर की तरह।
यह होता है कि एक चर है इसके अंदर अन्य चर।
तो यहाँ का एक उदाहरण है एक बहुत ही सरल संरचना।
इस वाक्य रचना लग रही होगी क्या है एक कार के लिए एक ढांचा बनाने के लिए पसंद करते हैं।
अब, चलो यहाँ वाक्य रचना के माध्यम से चलते हैं।
संरचना, कि इंगित करता है कि कीवर्ड
मैं यहाँ एक नया डेटा प्रकार पैदा कर रहा हूँ कि।
विशेष रूप से, डेटा प्रकार का नाम है जैसा कि हम देखेंगे, संरचना कार होने जा रहा।
लेकिन इस टिप की तरह है संकलक के लिए रवाना हो कि इस
चर का एक समूह के रूप में है कि जा रहा है एक ही प्रकार का हिस्सा माना जा करने के लिए
एक मिनट में।
>> कारें, संरचना का सिर्फ नाम।
फिर, यहाँ डेटा प्रकार जा रहा है संरचना कार में ही नहीं, कार हो।
लेकिन अगर आप different-- है तो यदि आप एकाधिक structs बनाते हैं तो
एक ही कार्यक्रम में, आप की जरूरत है संरचना और संरचना के बीच भेद।
इसलिए संरचना कार, मैं भी हो सकता है संरचना छात्र, उदाहरण के लिए,
एक ही कार्यक्रम में।
घुंघराले ब्रेसिज़ के अंदर हैं तथाकथित क्षेत्र के सभी,
या संरचना के सदस्य हैं।
इसलिए चीजों में से कुछ क्या कर रहे हैं एक कार में निहित हैं कि?
खैर, यह आमतौर पर एक साल हो गया है है एक मॉडल का नाम है, और एक लाइसेंस प्लेट,
आमतौर पर है कि एक ओडोमीटर उस पर मील के कुछ नंबर,
और शायद एक इंजन आकार।
जैसा कि आप देख सकते हैं, मैं ऊपर मिश्रण कर रहा हूँ पूर्णांकों और वर्ण और युगल।
वे सब होने के लिए जा रहे हैं इस नए डेटा प्रकार का हिस्सा है।
>> अंत में, अंतिम बात यह है कि मैं क्या करने की जरूरत है, इस छोटी सी अर्धविराम मत भूलना
अंत में।
हम संरचना को परिभाषित समाप्त करने के बाद, हम अंत में एक अर्धविराम डाल दिया है।
यह एक बहुत ही आम वाक्य है गलती की है, एक समारोह के साथ है, क्योंकि
उदाहरण के लिए, तुम सिर्फ होता है खुले घुंघराले गले लगा, करीब घुंघराले ब्रेस।
तुम पर एक अर्धविराम मत डालो एक समारोह परिभाषा के अंत।
यह एक समारोह की तरह लग रहा है परिभाषा, लेकिन यह नहीं है,
और इतने अर्धविराम वहाँ बस एक चेतावनी है कि आप
क्योंकि, वहाँ डाल की जरूरत है संकलक अन्यथा नहीं होगा
इसके साथ क्या करना है पता।
यह एक बहुत ही आम त्रुटि है गलती से बनाने के लिए
जब आप पहली बार संरचनाओं को परिभाषित कर रहे हैं।
>> ठीक।
तो हम आम तौर पर हमारे संरचनाओं को परिभाषित हमारे कार्यक्रमों के ऊपर से ही
वे शायद जा रहे हैं क्योंकि कई कार्यों के द्वारा इस्तेमाल किया जाएगा।
हम एक परिभाषित करने के लिए नहीं करना चाहते हैं एक समारोह के अंदर struct,
फिर हम only-- सकता है क्योंकि संरचना के दायरे सच
केवल कि समारोह के अंदर मौजूद है।
हम शायद एक संरचना को परिभाषित करने के लिए चाहता हूँ इसलिए हम कई कार्यों में इसका इस्तेमाल कर सकते हैं,
या शायद कई में एक साथ बंधे हैं जो फ़ाइलों
हमारे एक कार्यक्रम बनाने के लिए।
कभी-कभी यह भी बजाय संरचना को परिभाषित करने की
आप कहाँ रखा ऊपर से ही अपने , पौंड भी शामिल है और अपने पाउंड को परिभाषित करता है
उदाहरण के लिए, आप उन्हें में डाल सकता है अलग डॉट ज फ़ाइलें, तो जो आप
आधा किलो खुद के शामिल हैं।
>> इसलिए हम संरचना है, लेकिन अब हम उनमें से अंदर प्राप्त करने की जरूरत है।
हम कैसे के अंदर मिलता है उपयोग करने के लिए एक संरचना
उन उप चर, उन चर कि संरचना के अंदर मौजूद हैं?
खैर, हम कुछ कहा जाता है हमें की अनुमति देता है, जो डॉट ऑपरेटर,
संरचना के क्षेत्र तक पहुँचने के लिए।
उदाहरण के लिए तो, चलो मैं घोषित है कहते हैं मेरी संरचना डेटा कहीं टाइप
अपने कार्यक्रम के शीर्ष पर, या शायद में मैं पाउंड है कि एक डॉट ज फ़ाइल शामिल थे।
मैं तो एक नया बनाने के लिए चाहते हैं कि डेटा प्रकार के चर, मैं कह सकता हूँ
संरचना कार, मेरी कार, अर्धविराम।
मैं पूर्णांक कह सकते हैं, उसी तरह एक्स, या स्ट्रिंग नाम अर्धविराम।
>> यहां डेटा प्रकार, संरचना कार है चर का नाम, मेरी कार है
और फिर मैं करने के लिए डॉट ऑपरेटर का उपयोग कर सकते हैं मेरी कार के विभिन्न क्षेत्रों का उपयोग।
तो मैं अपनी कार में कह सकते हैं डॉट वर्ष 2011 के बराबर होती है।
यही कारण है कि पूरी तरह से ठीक है।
यदि आपको याद है वर्ष, एक के रूप में परिभाषित किया गया था इस संरचना कार के अंदर पूर्णांक क्षेत्र
डेटा प्रकार।
संरचना कार डेटा की तो किसी भी चर प्रकार, ऐसी मेरी कार के रूप में, मैं अपनी कार में कह सकते हैं
डॉट साल के बराबर होती है और उसके बाद आवंटित यह कुछ पूर्णांक मान, 2011।
मेरी कार डॉट प्लेट CS50 के बराबर होती है।
मेरा कार्ड डॉट ओडोमीटर 50,505 अर्धविराम के बराबर होती है।
उन सब के सब कर रहे हैं पूरी तरह से ठीक है और वह है
हम का उपयोग कैसे संरचना के क्षेत्र।
संरचनाएं, हालांकि, की जरूरत नहीं ढेर पर बनाया जाना है।
बस हम किसी भी अन्य चर की तरह गतिशील उन्हें आवंटित कर सकते हैं।
हम एक प्रोग्राम है कि हो सकता है कई इमारतों पैदा हो,
हम कितने पता नहीं है हम जरूरत के लिए जा रहे हैं
तो हम गतिशील करने की जरूरत है उन संरचनाओं का आवंटन
हमारे कार्यक्रम के रूप में चल रहा है।
और हम का उपयोग करने के लिए जा रहे हैं, इसलिए यदि इस संदर्भ में एक संरचना के क्षेत्र,
हम पहली भिन्नता की जरूरत है कि याद करते हैं संरचना के लिए सूचक,
और फिर हम एक बार भिन्नता सूचक है, तो हम क्षेत्रों का उपयोग कर सकते हैं।
हम केवल एक है, तो संरचना के लिए सूचक,
हम सिर्फ सूचक डॉट क्षेत्र नहीं कह सकता नाम है और हम क्या देख रहे हैं मिलता है।
अपसंदर्भन के अतिरिक्त कदम नहीं है।
तो चलो हम कहते हैं कि बजाय previous-- की
सिर्फ पिछले उदाहरण की तरह, इसके बजाय यह घोषणा की
ढेर पर, संरचना कार, मेरी कार, ​​अर्धविराम, मैं संरचना कार का कहना है
स्टार, एक के लिए एक सूचक संरचना कार, मेरी कार बुलाया
संरचना कार की malloc आकार के बराबर होती है।
कितने हम का आकार पता लगा लेंगे अपने नए डेटा प्रकार ऊपर लेता बाइट्स।
तुम जरूरी ही उपयोग करने की आवश्यकता नहीं है चौड़ाई, पूर्णांक, या चार, या किसी के आकार
निर्मित में डेटा प्रकार के।
संकलक काफी चालाक है कितने बाइट्स बाहर निकालने के लिए
अपनी नई संरचना के लिए आवश्यक हैं।
इसलिए मैं अपने आप को स्मृति की एक इकाई malloc एक संरचना कार रखने के लिए बड़ा,
और मैं वापस एक सूचक मिलता है स्मृति की है कि ब्लॉक करने के लिए,
और कि सूचक मेरी कार को सौंपा है।
>> अब, मैं उपयोग करना चाहते हैं मेरी कार के क्षेत्रों,
मैं पहली बार अपने कार भिन्नता का उपयोग कर भिन्नता ऑपरेटर, स्टार
हम संकेत से देखा है कि वीडियो, और फिर मैं भिन्नता के बाद,
फिर मैं करने के लिए डॉट ऑपरेटर का उपयोग कर सकते हैं मेरी कार के विभिन्न क्षेत्रों का उपयोग।
वर्ष 2011 के बराबर होती डॉट मेरी कार स्टार।
यही प्रभाव होता है हम इस मामले में चाहते हैं,
हम गतिशील है क्योंकि मेरी कार आवंटित।
>> यह सही है, हालांकि, एक तरह से परेशान है?
अब एक दो कदम प्रक्रिया है।
अब हम dereference-- करना है हम एक स्टार ऑपरेटर है,
और हम एक डॉट ऑपरेटर है।
और आप उम्मीद कर सकते हैं, क्योंकि सी प्रोग्रामर कम तरीके से प्यार
बातें करने के लिए, वहाँ एक है छोटा रास्ता यह करने के लिए।
तीर नामक एक और ऑपरेटर है, जो इस प्रक्रिया को बहुत आसान बना देता है।
तीर जिस तरह काम करता है यह पहली बार dereferences
बाईं तरफ के सूचक ऑपरेटर की ओर,
और फिर, के बाद dereferenced होने बाईं तरफ के सूचक,
यह ठीक है पर क्षेत्र तक पहुँचता है।
और तो पहले हम इस प्रकार था की मेरी कार, यह सब सामान डॉट स्टार
जैसे वहाँ पर जा रहा एक बहुत कुछ था।
लेकिन क्या हम बजाय क्या कर सकते है- है मेरी कार तीर वर्ष 2011 के बराबर होती है।
>> फिर, यहाँ क्या हो रहा है?
सबसे पहले, मैं अपनी कार अपसंदर्भन रहा हूँ।
जो फिर से, यहाँ एक सूचक है।
फिर, होने के बाद मैं, मेरी कार dereferenced
तो खेतों तक पहुँच सकते हैं साल, थाली, और ओडोमीटर
सिर्फ मैं कर सकता के रूप में पहली होने से पहले मेरी कार भिन्नता के लिए इस्तेमाल किया सितारा,
और क्षेत्र का उपयोग करने के लिए डॉट।
तो अगर आप, संरचनाओं हो सकता है संरचनाओं के लिए संकेत हो सकता है,
और आप का उपयोग करने के तरीके हैं उन संरचनाओं के क्षेत्र,
आप संकेत करने के लिए है कि क्या उन्हें या चर खुद को।
डॉट या तीर, पर निर्भर करता है चर कैसे घोषित किया गया था।
मैं डौग लॉयड हूँ, इस CS50 है।