>> डेविड मालन: सब ठीक है, वापस स्वागत है.
इस CS50 है.
इस सप्ताह सात की शुरुआत है.
तो यह एक समय हो गया है, इसलिए मुझे लगता है हमें लगा है जहां हम का एक बवंडर दौरे ले
दूर छोड़ दिया है और अब हम कहाँ जा रहे हैं.
>> तो यहाँ इस बात के लिए हो सकता पहली बार में कुछ गुस्से का कारण बना.
लेकिन उम्मीद है, आप शुरुआत कर रहे हैं यहाँ यह अर्थ क्या करने के लिए acclimate -
है जो एक सूचक का प्रतिनिधित्व सितारा अधिक आम आदमी की दृष्टि में, बस क्या?
तो यह एक पता है.
>> इसलिए इसके बारे में पता है स्मृति में कुछ.
और हम परतों वापस छील करने के लिए शुरू कर दिया कुछ हफ़्ते पहले, की तरह बातें
GetString और अन्य तरह के कार्यों यह सब समय लौट कर दिया गया है
जैसे स्मृति में चीजों के पते, में प्रथम चरित्र का पता
कुछ अनुक्रम.
>> इसलिए हम भी, वेलग्रिंड शुरू की जो आप इस समस्या के लिए उपयोग करने के लिए शुरू करेंगे
विशेष रूप से अगले के लिए, सेट समस्या के रूप में अच्छी तरह से सेट.
और वेलग्रिंड हमारे लिए क्या करता है?
यह स्मृति लीक के लिए जाँच करता है, और यह यह भी स्मृति के दुरुपयोग की जांच करता है.
>> यह कुछ संभावना के साथ, पता लगा सकता है अगर अपने कोड स्मृति को छूने जा रहा है
यह बस नहीं होना चाहिए.
इसलिए जरूरी नहीं कि एक दरार है, लेकिन आप अगर कुछ की सीमाओं से परे जाना
सरणी, और आप वास्तव में वेलग्रिंड चलाने और उस व्यवहार के लिए प्रेरित करते हुए
Valgrind है अपने प्रोग्राम में चल रहा है इसके अंदर चल रहा है, आप मिल जाएगा
इस तरह के संदेश - "अवैध लिखने की आकार 4, "जो, एक जोड़ी की याद
हफ्ते पहले मैं गलती से मतलब था कि जैसे एक int पर बहुत दूर
एक सरणी की सीमाओं से परे.
और इसलिए आकार 4 यहाँ आकार का मतलब उस विशेष int की.
>> तो वास्तव में आश्वासन ले कि Valgrind के उत्पादन, यह का प्रारूप,
बस नृशंस है.
यह गंदगी के माध्यम से देखने के लिए वास्तव में मुश्किल है रोचक जानकारी के लिए.
तो क्या हम यहाँ किया है सिर्फ अंश है अधिक की जोड़ी के कुछ
दिलचस्प लाइनों.
लेकिन एहसास है कि Valgrind के 80% उत्पादन एक का एक सा होने जा रहा है
व्याकुलता.
>> सिर्फ इस तरह के पैटर्न के लिए देखो - अवैध सही, अवैध पढ़ें, 40 बाइट्स
और ब्लॉकों में से कुछ संख्या निश्चित रूप से कर रहे हैं उस तरह खो दिया है, कीवर्ड्स.
और क्या आप उम्मीद देखेंगे कुछ है समारोह का पता लगाने की तरह
गलती अंदर वास्तव में है
यहां इस मामले में, किस लाइन में मेरे कोड जाहिरा तौर पर त्रुटि थी?
>> था जो memory.c नामक एक फाइल में 26 हम साथ खेल रहे थे उदाहरण
समय पर.
तो यह malloc में शायद नहीं है.
यह बजाय अपने कोड में शायद था.
तो हम फिर से इस देखेंगे और फिर लंबे समय से पहले.
>> तो scanf, यह एक में आया रूपों की जोड़ी इस प्रकार अब तक.
हम sscanf संक्षेप में देखा था.
यह की एक संख्या में कुछ था आप में में डुबकी लगाई अपनी
प्रश्नोत्तरी के लिए तैयारी.
और scanf वास्तव में क्या CS50 है पुस्तकालय के नीचे का उपयोग किया गया है
आदेश में कुछ समय के लिए हुड उपयोगकर्ता से इनपुट मिल.
>> उदाहरण के लिए, मैं CS50 खत्म करने के लिए कदम अगर यहां के उपकरण, मुझे खोल देना एक
उदाहरण आज scanf-0.c कहा जाता है कि और यह सुपर आसान है.
यह कोड की कुछ लाइनें है.
लेकिन यह कैसे getInt वास्तव दर्शाता इस समय के सभी काम कर रहा है.
>> यहां इस कार्यक्रम में रेखा 16 में , मैं एक पूर्णांक घोषित नोटिस.
तो कोई संकेत, कुछ भी नहीं जादुई वहाँ, बस एक पूर्णांक.
फिर 17 लाइन में, मैं का संकेत एक नंबर के लिए उपयोगकर्ता, कृपया.
तो फिर देर से 18 में, मैं यहाँ scanf का उपयोग करें.
और मुझे लगता है, की तरह printf की तरह, निर्दिष्ट मैं बोली की उम्मीद कर रहा हूँ कि
गंदें शब्द बोलना प्रतिशत मैं.
>> तो जाहिर प्रतिशत मैं,, एक पूर्णांक अर्थ.
लेकिन क्या दूसरा नोटिस scanf के लिए तर्क है.
कैसे आप दूसरे का वर्णन होगा अल्पविराम के बाद तर्क?
वह क्या है?
>> यह एक्स का पता है.
तो इस वजह से प्रदान करके उपयोगी है क्या करता है, एक्स के पते के साथ scanf
ऐसा करने के लिए समारोह में कहा कि है कि सशक्त?
बस वहाँ जाना है, लेकिन यह भी क्या नहीं?
>> यह करने के लिए एक बदलाव करें.
आप वहां जा सकते हैं, क्योंकि यह की तरह है स्मृति में एक स्थान के लिए एक मानचित्र की तरह.
और इतने लंबे समय आपको उपलब्ध कराने के रूप में scanf, या इस तरह के एक नक्शे, उस के साथ किसी भी समारोह
समारोह न केवल वहाँ जाना है, और कर सकते हैं मूल्य पर देखने के लिए, लेकिन यह भी कर सकते हैं
अगर उपयोगी है जो कि मूल्य, बदल scanf के जीवन में उद्देश्य के लिए है
विशेष रूप से, उपयोगकर्ता से इनपुट स्कैन कीबोर्ड से.
और एफ, जैसे स्वरूपित अर्थ printf, च एक स्वरूपित अर्थ
आप मुद्रित करना चाहते हैं कि स्ट्रिंग.
>> तो संक्षेप में, इस लाइन में 18 बस, कहते हैं उपयोगकर्ता से एक पूर्णांक को पढ़ने की कोशिश
कीबोर्ड और पर, एक्स के अंदर यह स्टोर जो कुछ भी पता एक्स में रहने के लिए होता है.
और फिर अंत में, 19 लाइन बस का कहना है, इस मामले में int के लिए धन्यवाद,.
>> तो मुझे आगे जाना है और इस बनाते हैं.
तो scanf 0 बनाते हैं.
मुझे आगे जाना है और जूम इन करते हैं
मैं जाने के लिए और के साथ इस भाग लेंगे डॉट्स scanf 0 स्लेश.
संख्या, कृपया?
50.
50 के लिए धन्यवाद.
तो यह काफी आसान है.
>> अब यह क्या कर रहा है?
यह एक पूरी गुच्छा नहीं कर रही है त्रुटि की जाँच.
उदाहरण के लिए, मैं सहयोग नहीं करते हैं, और मैं एक संख्या में टाइप करें, लेकिन नहीं है
बजाय मैं "हैलो" की तरह कुछ लिखने कि सिर्फ अजीब तरह का है.
चीजों की है और एक बहुत CS50 पुस्तकालय कुछ के लिए हमारे लिए कर दिया गया है
समय है कि reprompting है और reprompting.
>> फिर से प्रयास करें मुहावरा याद, cs50.c में था और उस में getInt कि कारण है
CS50 पुस्तकालय वास्तव में एक पूरी है लंबी लाइनों का गुच्छा, हम कर रहे हैं, क्योंकि
इस तरह बेवकूफ सामान के लिए जाँच.
उपयोगकर्ता नहीं दिया वास्तव में हमें, एक int?
वह या वह हमें कुछ दे दिया एक वर्णमाला पत्र की तरह?
यदि हां, हम पता लगाने के लिए चाहते हैं कि और उन पर चिल्लाना.
>> लेकिन चीजों को और अधिक दिलचस्प हो यह अगले उदाहरण में.
मैं scanf-1.c के लिए जाना है, एक क्या है मूलरूप में बदल गया है कि बात
यह अगले उदाहरण?
मैं, ज़ाहिर है, चार * उपयोग कर रहा हूँ बजाय int की.
>> तो यह दिलचस्प है, क्योंकि चार *, याद है, वास्तव में सिर्फ है
स्ट्रिंग के रूप में एक ही बात.
शायद यह एक सुपर है तो ऐसा लगता है GetString की सरल कार्यान्वयन.
लेकिन मैं परत वापस खुली दिया है CS50 पुस्तकालय की, तो मैं कर रहा हूँ
अब यह चार * बुला.
तो चलो जहां, अगर कहीं भी देखते हैं, हम गलत जाना.
>> 17 लाइन -
मैं फिर कहता हूँ, मुझे कुछ दे, इस मामले में, एक स्ट्रिंग.
और फिर अगली पंक्ति में, मैं scanf कॉल, फिर, यह एक स्वरूप कोड दे रही है,
लेकिन इस बार प्रतिशत है.
और फिर इस बार, मैं हूँ यह बफर दे रही है.
>> अब मैं का उपयोग नहीं कर रहा हूँ, नोटिस एम्परसेंड.
लेकिन यही कारण है कि यहां शायद ठीक है?
बफर पहले से ही क्या है वजह?
यह पहले से ही एक सूचक है.
यह पहले से ही एक पता है.
>> और चलो इस शब्द चलो मुझे "भ्रमित" चलो अभी के लिए, उदाहरण के लिए, यह कॉल
सादगी.
लेकिन मैं क्योंकि में यह बफर बुलाया है सामान्य, प्रोग्रामिंग में, यदि आपके पास एक
स्मृति, जो एक स्ट्रिंग सच का हिस्सा बस है, आप एक बफर यह फोन हो सकता है.
यह जानकारी स्टोर करने के लिए एक जगह है.
>> यूट्यूब की तरह बातें करने के लिए इसी तरह के जब वे, इतनी बात करने के बफरिंग रहे हैं कि
बस इसे से बिट्स डाउनलोड करने का मतलब इंटरनेट और एक में उन्हें भंडारण
स्थानीय सरणी, स्मृति की एक स्थानीय हिस्सा तो आप बिना बाद में यह देख सकते हैं कि
यह लंघन या फांसी पर आप वापस खेलते समय.
>> तो एक समस्या है, हालांकि यहाँ है मैं scanf बता रहा हूँ क्योंकि, उम्मीद है एक
उपयोगकर्ता से स्ट्रिंग.
यहां के पते है स्मृति का एक हिस्सा.
वहाँ कि स्ट्रिंग रखो.
क्यों है कि बाध्य दे हमें परेशानी है, हालांकि?
>> वह क्या है?
मैं का उपयोग करने की अनुमति दी हूँ स्मृति का वह हिस्सा?
तुम्हें पता है, मैं नहीं जानता.
बफर initialized किया गया है क्योंकि कुछ भी करने के लिए?
ऐसा नहीं है.
और इसलिए यह हम बुला रहा हूँ क्या है एक कचरा मूल्य, जो
एक औपचारिक शब्द नहीं है.
यह सिर्फ हमें पता नहीं है इसका मतलब क्या बिट्स कि चार बाइट्स के अंदर कर रहे हैं
मैं बफर के रूप में आवंटित किया है.
>> मैं malloc नहीं बुलाया है.
मैं निश्चित रूप से GetString नहीं बुलाया गया है.
तो जो वास्तव में है क्या जानता है बफर के अंदर?
और फिर भी scanf कह रही आँख बंद करके, वहाँ जाना और उपयोगकर्ता टाइप किया जो कुछ भी डाल दिया.
>> तो क्या कारण होने की संभावना है हमारे कोड में अगर हम इसे चलाने के?
शायद एक segfault.
शायद नहीं, लेकिन शायद एक segfault.
और मैं कहना शायद नहीं, क्योंकि कभी कभी आप कभी कभी, करते हैं
आप एक segfault नहीं मिलता.
कभी कभी तुम सिर्फ भाग्यशाली हो, लेकिन यह फिर भी होने जा रहा है
हमारे कार्यक्रम में एक बग.
>> तो मुझे आगे जाना है और इस संकलन करते हैं.
मैं इसे पुराने तरीके से करने के लिए जा रहा हूँ.
तो बजना पानी का छींटा 0, scanf -1, scanf-1.c, लिखें.
ओह, बहुत पुराना स्कूल.
चलो देखते हैं.
मैं कहाँ गए थे?
ओह, चार * बफर.
ओह, शुक्रिया -
ठीक है, बचाओ -
बहुत पुराने स्कूल.
ठीक है, यह एक समय हो गया है.
>> तो मैं बस फ़ाइल के बाद बचा लिया कि अस्थायी बना
एक पल पहले बदल जाते हैं.
और अब मैं इसे संकलित किया है मैन्युअल रूप बजना के साथ.
और अब मैं आगे जाने के लिए जा रहा हूँ और लिखें, scanf -1 चलाते हैं.
स्ट्रिंग कृपया.
मैं "नमस्ते." टाइप करेंगे
>> और अब, यहाँ कहाँ, सच में, printf है कर सकते हैं एक छोटे से परेशान है.
यह वास्तव में नहीं जा रहा है इस मामले में segfault.
Printf क्योंकि एक छोटी सी खास है यह इतना सुपर आमतौर पर इस्तेमाल किया है कि
अनिवार्य रूप से printf कर रही है हमें एक एहसान और साकार,
यह एक मान्य सूचक नहीं है.
मुझे सिर्फ प्रिंट करने के लिए खुद पर लेते हैं कोष्ठक में बाहर अशक्त, यहां तक ​​कि
यह जरूरी है क्या नहीं है, हालांकि हम खुद को उम्मीद थी.
>> इसलिए हम वास्तव में आसानी से एक को प्रेरित नहीं कर सकता इस के साथ segfault, लेकिन स्पष्ट रूप से इस
मैं चाहता था व्यवहार नहीं है.
तो सरल समाधान क्या है?
खैर, scanf-2 में, मुझे का प्रस्ताव करते हैं कि बजाय वास्तव में सिर्फ एक आवंटन की
चार *, मेरे बारे में एक छोटे से होशियार रहने दो यह है, और मुझे बफर आवंटित करते हैं
16 अक्षरों का एक दृश्य के रूप में.
>> तो मैं तरीके के एक जोड़े में ऐसा कर सकते हैं.
मैं पूरी तरह से malloc इस्तेमाल कर सकते हैं.
लेकिन मैं सप्ताह में दो को वापस जा सकते हैं जब मैं सिर्फ एक पूरी गुच्छा की जरूरत
अक्षर.
वह सिर्फ एक सरणी है.
तो मुझे बजाय बफर को फिर से परिभाषित करते हैं 16 अक्षरों का एक सरणी.
>> और अब, मैं में बफर पारित जब -
और यह हम नहीं था कुछ है सप्ताह में दो के बारे में बात करते हैं -
लेकिन आप एक सरणी के रूप में इलाज कर सकते हैं यह एक पता है, हालांकि.
तकनीकी तौर पर, हमने देखा है, वे कर रहे हैं अलग एक छोटा सा.
आप इसे पारित लेकिन अगर scanf बुरा नहीं लगेगा किसी सरणी का नाम, क्योंकि क्या
हमें अनिवार्य रूप से है के लिए बजना क्या करेंगे जैसा कि सरणी के नाम का इलाज
16 बाइट्स का हिस्सा का पता.
>> तो यह बेहतर है.
यह अब है कि मुझे उम्मीद है कि सकता है इसका मतलब निम्नलिखित है.
मुझे एक पल के लिए बाहर ज़ूम करते हैं और scanf -2, ठीक संकलित कर सकता हूँ.
अब मुझे स्लैश scanf -2 मिला करते हैं.
स्ट्रिंग कृपया. "नमस्ते." और यह इस समय काम करने के लिए लग रहा था.
>> लेकिन किसी एक परिदृश्य प्रस्ताव कर सकते हैं यह अभी भी काम नहीं कर सकता जो में?
हाँ?
16 वर्णों से अधिक कुछ है.
और वास्तव में, हम हो सकता है एक छोटे से अधिक सटीक.
अब तो 15 अक्षर कुछ, वास्तव में हम ध्यान में रखने की जरूरत है क्योंकि
हम चाहते हैं कि बैकस्लैश शून्य की जरूरत है कि उलझाव स्ट्रिंग के अंत में,
एक तरफ scanf आम तौर पर जो होगा हमारे लिए ध्यान रखना.
>> तो मेरे जैसे कुछ करते हैं -
कभी कभी हम कर सकते हैं बस यह उस तरह छोड़ दें.
ठीक है, तो हम अब प्रेरित किया है हमारे विखंडन दोष.
क्यों?
मैं 15 से अधिक करने के लिए टाइप की वजह वर्ण, और इसलिए हम है वास्तव में
छुआ स्मृति कि मैं वास्तव में नहीं होना चाहिए.
>> तो क्या सच में यहाँ समाधान है?
ठीक है, हम एक लंबी स्ट्रिंग क्या जरूरत है?
ठीक है, हम शायद यह 32 बाइट्स बनाते हैं.
खैर, क्या है कि लंबे समय पर्याप्त नहीं है तो क्या होगा?
कैसे 64 बाइट्स के बारे में?
क्या है कि लंबे समय पर्याप्त नहीं है तो क्या होगा?
कैसे 128 या 200 बाइट्स के बारे में?
वास्तव में यहाँ समाधान क्या है सामान्य मामले, हम में पता नहीं है अगर
उपयोगकर्ता टाइप करने के लिए क्या हो रहा है अग्रिम?
>> यह गधा में बस की तरह एक बड़ा दर्द है, ईमानदार होना करने के लिए, जो है क्यों
CS50 पुस्तकालय कुछ दर्जन लाइनों की है सामूहिक रूप से लागू है कि कोड
हम नहीं करते कि एक तरह से स्ट्रिंग GetString अग्रिम में पता है क्या
उपयोगकर्ता टाइप करने के लिए जा रहा है.
विशेष रूप से, आप में वापस देखो दो सप्ताह पहले से cs50.c, आप देखेंगे
कि GetString वास्तव में करता है इस तरह से scanf का उपयोग नहीं.
दरअसल, यह एक चरित्र पढ़ता एक समय में.
>> क्योंकि एक के बारे में अच्छी बात यह है एक चरित्र पढ़ने में हम कर सकते है
हमेशा के लिए खुद की गारंटी कम से कम एक चार है.
मैं सिर्फ एक चार की घोषणा, और तब ले जा सकते हैं अभी तक ये वास्तव में बच्चे के कदम
एक में में एक चरित्र को पढ़ने कीबोर्ड से समय.
और फिर, क्या आप GetString देखेंगे है, यह से बाहर चलाता है हर समय है
कहते हैं, स्मृति के 16 बाइट्स, यह उपयोग करता है malloc, या एक चचेरा भाई उसके लिए
पुराने नकल, और अधिक स्मृति आवंटित रेंगने तो नई है, और में स्मृति
साथ एक समय में एक चरित्र हो रही है, और यह है कि से बाहर चलाता है
स्मृति का हिस्सा, पकड़ लेता है, इसे दूर फेंकता स्मृति का एक बड़ा हिस्सा, प्रतियां पुराने
नई, और दोहराता में.
और यह वास्तव में वास्तव में एक दर्द है के रूप में सरल कुछ को लागू
एक उपयोगकर्ता से इनपुट हो रही है.
>> तो आप scanf का उपयोग कर सकते हैं.
आप अन्य इसी तरह के कार्यों का उपयोग कर सकते हैं.
और ऑनलाइन पाठ्य पुस्तकों का एक बहुत उदाहरण करते हैं, लेकिन वे सभी कर रहे हैं
इस तरह की समस्याओं की चपेट में.
और अंत में, एक segfault हो रही एक तरह से परेशान है.
यह उपयोगकर्ता के लिए अच्छा नहीं है.
>> लेकिन सबसे खराब स्थिति में, क्या करता है यह मौलिक डाल अपने
के जोखिम में कोड?
संभावित हमले के कुछ प्रकार,.
हम के बारे में ऐसे ही एक हमले में बात की - ढेर बह निकला.
लेकिन सामान्य तौर पर, आप की अनुमति दी हो अगर हम किया था, एक बफर अतिप्रवाह एक
सिर्फ लिखने के साथ सप्ताह पहले की जोड़ी, जितना अधिक आप ढेर पर "नमस्ते" से
वास्तव में, संभावित, पर ले जा सकते हैं कंप्यूटर, या कम से कम डेटा पर मिलता है
आप का नहीं है.
>> हमारे पास तो यही कारण है संक्षेप में, यह है उन प्रशिक्षण पहियों.
लेकिन अब, हम उन्हें दूर ले शुरू हमारे कार्यक्रमों अब कोई ज़रूरत नहीं के रूप में,
जरूरी उपयोगकर्ता से इनपुट.
लेकिन समस्या के मामले में छह सेट, अपने इनपुट एक विशाल से आ जाएगा
150 से कुछ के साथ शब्दकोश फ़ाइल हजार अजीब शब्द.
>> तो आप के बारे में चिंता करने की ज़रूरत नहीं होगी उपयोगकर्ता का मनमाना इनपुट.
हम आपको कुछ मान्यताओं दे देंगे उस फ़ाइल के बारे में.
संकेत या scanf पर किसी भी सवाल या सामान्य में उपयोगकर्ता इनपुट?
>> ठीक है, तो एक पर तो एक त्वरित देखो दो सप्ताह पहले से विषय अनुगामी.
और कहा कि एक संरचना की इस धारणा थी.
ऐसा नहीं है कि - एक की इस धारणा संरचना, क्या जो था?
संरचना हमारे लिए क्या किया?
>> परिभाषित करें -
क्षमा करें?
एक चर प्रकार परिभाषित करें.
तो ऐसा.
हम वास्तव में दो विषयों के संयोजन कर रहे हैं.
तो typedef के साथ, याद हम कर सकते हैं कि एक तरह हमारी खुद की एक प्रकार है, की घोषणा
चार के लिए स्ट्रिंग * जैसे पर्याय,.
लेकिन typedef और संरचना का उपयोग कर, हम कर सकते हैं सही मायने में हमारे अपने डेटा संरचना बनाने.
>> उदाहरण के लिए, मैं जीएडिट में वापस जाना है यहां सिर्फ एक पल के लिए, और मुझे आगे जाना है
और कुछ करना पसंद है, मुझे बचाने के लिए इस रूप में, हम कहते हैं, structs.c
अस्थायी रूप से, मैं अभी जा रहा हूँ आगे बढ़ो और शामिल करने के लिए
standardio.h, int मुख्य शून्य.
और फिर यहाँ में, मैं चाहता हूँ कि लगता है एक प्रोग्राम लिखने के लिए भंडार है कि
कई से कई छात्रों घरों, उदाहरण के लिए.
तो यह एक registrarial की तरह है किसी प्रकार के डेटाबेस.
>> मैं नाम से एक छात्र की जरूरत है ताकि अगर, मैं चार * नाम की तरह कुछ कर सकता है,
और मैं ऐसा कुछ करता हूँ -
वास्तव में, के CS50 पुस्तकालय का उपयोग करते हैं इस एक बनाने के लिए बस एक पल के लिए
थोड़ा आसान है, तो हम उधार ले सकते हैं कोड की लाइनों की उन दर्जनों.
और चलो बस इसे सरल रखने के लिए.
हम स्ट्रिंग रखना होगा, और अब GetString.
>> इसलिए मुझे लगता है कि मैं नाम संग्रहीत किया है कि अब दावा कुछ छात्र, और के घर की
कुछ छात्र, बस चर का उपयोग जैसे हमने किया और एक सप्ताह में.
लेकिन मैं अब का समर्थन करना चाहते हैं कई छात्रों को.
ठीक है, तो अपनी प्रवृत्ति ऐसा करने के लिए कर रहे हैं स्ट्रिंग NAME2, GetString, स्ट्रिंग हो जाता है
house2 GetString हो जाता है.
और फिर हमारे तीसरे छात्र, के name3 GetString करते हैं.
>> ठीक है, तो यह उम्मीद है कि हड़ताली है आप के रूप में बेवकूफ की तरह,
इस प्रक्रिया को वास्तव में कभी नहीं है क्योंकि अंत करने के लिए जा रहा है, और यह सिर्फ जा रहा है
मेरे कोड देख भी बदतर बना और बदतर और बदतर.
लेकिन हम दो सप्ताह में भी इस का हल.
हमारे अपेक्षाकृत स्वच्छ समाधान क्या था हम में से कई चर था जब
सभी संबंधित हैं, लेकिन कर रहे हैं कि एक ही डेटा प्रकार हम इस नृशंस गड़बड़ नहीं करना चाहता था
की इसी चर नाम दिया?
हम बजाय क्या किया?
>> इसलिए मुझे लगता है मैं कुछ स्थानों के बारे में सुना लगता है.
हम एक सरणी था.
आप के कई उदाहरण चाहते हैं कुछ, क्यों हम यह सब साफ नहीं है
ऊपर और बस का कहना है, मुझे दे सरणी के नाम कहा जाता है?
>> और अब के लिए, की हार्ड कोड 3 चलो.
और फिर मुझे एक और सरणी दे घरों कहा जाता है, और के लिए मुझे दो
अब मुश्किल कोड 3.
और मैं उसे बड़े पैमाने पर साफ कर दिया है मैं अभी बनाया है कि गंदगी.
अब, मैं अभी भी कड़ी मेहनत 3 कोडित है, लेकिन और भी 3 गतिशील रूप से आ सकता है
उपयोगकर्ता, या argv, या पसंद है.
तो यह पहले से ही क्लीनर है.
>> लेकिन क्या इस बारे में परेशान है है कि अब, एक नाम किसी न किसी तरह है, भले ही
मूलरूप से जुड़ा हुआ एक छात्र के घर -
यह है कि मैं वास्तव में एक छात्र है का प्रतिनिधित्व करना चाहते हैं -
मैं अब समानांतर हैं कि दो सरणियों है वे कर रहे हैं कि समझ में
एक ही आकार, और नाम ब्रैकेट 0 शायद, घरों ब्रैकेट 0 नक्शे
और नाम 1 नक्शे कोष्ठक घरों के लिए 1 ब्रैकेट.
दूसरे शब्दों में, कि छात्र में रहती है उस घर, और कहा कि अन्य छात्र
कि दूसरे घर में रहती है.
लेकिन निश्चित रूप से यह हो सकता है और भी अधिक सफाई से किया.
>> खैर, यह वास्तव में, यह कर सकते हैं.
और मुझे आगे जाना है और खुला structs.h ऊपर, और तुम हूँ
यहाँ इस विचार को देखें.
मैं आप के रूप में, typedef का उपयोग किया है कि नोटिस घोषणा करने के लिए एक पल पहले तक alluded हमारे
खुद के डेटा प्रकार.
लेकिन मैं भी इस दूसरे कीवर्ड का उपयोग कर रहा हूँ मुझे एक नया देता है जो बुलाया संरचना
डेटा संरचना.
>> और मैं दावा यह आंकड़ा संरचना जा रहा है के अंदर दो बातों के लिए
यह - नाम नामक एक स्ट्रिंग, और एक स्ट्रिंग घर बुलाया.
और नाम मैं करने के लिए देने के लिए जा रहा हूँ इस डेटा संरचना जा रहा है
छात्र बुलाया जाए.
मैं मैं चाहता हूँ कुछ भी कह सकते हैं, लेकिन इस शब्दार्थ बनाने
मेरे मन में मेरे लिए कोई मतलब.
>> तो अब, मैं एक बेहतर संस्करण को खोलने अगर कार्यक्रम की मैं लिखना शुरू कर दिया
वहाँ, मुझे शीर्ष पर स्क्रॉल करते हैं.
और कोड के कुछ और लाइनें है यहाँ, लेकिन मेरे लिए ध्यान केंद्रित
एक पर पल.
मैं छात्रों को बुलाया एक निरंतर घोषित कर दिया है और कठिन अब के लिए 3 कोडित.
लेकिन अब, नोटिस कैसे साफ मेरे कोड प्राप्त करने के लिए शुरू होता है.
>> लाइन 22 में, मैं घोषणा छात्रों की सरणी.
और कहा कि छात्र जाहिरा तौर पर है नोटिस अब एक डेटा प्रकार.
इस वजह से फाइल, नोटिस के शीर्ष पर मुझे लगता है कि हैडर फ़ाइल शामिल किया है
मैं बस एक पल पहले तक खींच लिया है.
और कहा कि शीर्ष फाइल काफी बस था एक छात्र की इस परिभाषा.
>> तो अब, मैं अपने स्वयं के कस्टम डेटा बनाया है टाइप सी कि साल के लेखकों
पहले अग्रिम में नहीं सोचा.
लेकिन कोई बात नहीं.
मैं इसे अपने आप कर सकते हैं.
तो यह छात्रों को बुलाया एक सरणी है जिसका सदस्यों में से प्रत्येक
एक छात्र संरचना है.
और मैं चाहता हूँ कि उन में से तीन सरणी में.
>> और अब, क्या बाकी है इस कार्यक्रम की क्या ज़रूरत है?
मैं एक छोटे से मनमाने ढंग से कुछ की जरूरत है.
तो, आगे 24 ऑनलाइन से मैं 0-3 पुनरावृति.
मैं तो के लिए उपयोगकर्ता पूछना छात्र का नाम.
और फिर मैं पहले की तरह GetString का उपयोग करें.
तब मैं छात्र के घर के लिए पूछना, और मैं पहले की तरह GetString का उपयोग करें.
>> लेकिन सूचना - थोड़ा नया वाक्यविन्यास का टुकड़ा -
मैं, मैं वें छात्र को अभी भी सूचकांक कर सकते हैं लेकिन कैसे मैं विशिष्ट डेटा पर मिलता है
संरचना के अंदर क्षेत्र?
खैर, जाहिरा तौर पर क्या है वाक्यविन्यास का नया टुकड़ा?
यह सिर्फ डॉट ऑपरेटर है.
>> हम वास्तव में इस से पहले नहीं देखा है.
आप आपने अगर pset पांच में यह देखा है बिटमैप फ़ाइलों के साथ पहले से ही में डुबकी लगाई.
लेकिन डॉट सिर्फ इस के अंदर का मतलब संरचना या कई क्षेत्रों, डॉट दे
नाम, या मुझे डॉट घर दे.
उस संरचना के अंदर जाने का मतलब और विशेष रूप से उन क्षेत्रों को मिलता है.
>> इस कार्यक्रम के बाकी क्या करता है?
यह सब है कि सेक्सी नहीं है.
मैं फिर से 0-3 पुनरावृति सूचना है कि, और मैं बस एक अंग्रेजी बना
इतना और इतनी तरह मुहावरा ऐसे और में है ऐसे घर से डॉट नाम में गुजर
i-वीं के छात्र और उनके घर के रूप में अच्छी तरह से.
>> और फिर अंत में, अब हम पाने के लिए शुरू करेंगे इस बारे में गुदा, अब हम कर रहे हैं कि
क्या malloc से परिचित और अन्य कार्यों के लिए किया गया है
यह सब समय कर रहे हैं.
क्यों मैं नाम दोनों को मुक्त करने की क्या ज़रूरत है और घर, भले ही मैं
malloc फोन नहीं किया?
>> GetString किया.
और उसके लिए गंदे छोटे से रहस्य था कई हफ्तों, लेकिन GetString है
सब से अधिक स्मृति लीक किया गया इस प्रकार अब तक सभी सेमेस्टर जगह है.
और valgrand अंत में होगा हमारे लिए यह प्रकट करते हैं.
>> क्योंकि मुझे पता है लेकिन यह एक बड़ा सौदा नहीं है मैं बस नाम मुक्त कर सकते हैं
और घर, तकनीकी, हालांकि सुपर, सुपर सुरक्षित, मैं होना चाहिए
यहाँ की जाँच के कुछ त्रुटि रही.
आप कह रही है अपने सहज ज्ञान क्या हैं?
मैं के लिए क्या जाँच की जानी चाहिए मैं एक है क्या मुक्त करने से पहले
स्ट्रिंग, उर्फ ​​जो एक चार *?
>> छात्रों अगर मैं वास्तव में जाँच की जानी चाहिए ब्रैकेट मैं नाम नहीं करता है डॉट
बराबर अशक्त.
तो यह आगे जाने के लिए ठीक है और मुक्त हो जाएगा कि सूचक, और उसी या अन्य
एक के रूप में अच्छी तरह से.
छात्रों मैं डॉट कोष्ठक तो घर नहीं है अशक्त करने के लिए बराबर है, यह अब रक्षा करेगा
कोने मामले के खिलाफ जो में GetString बातिल की तरह कुछ देता है.
और हम एक क्षण पहले, printf इच्छा देखा बस कह कर हमें यहाँ ऊपर की रक्षा
अशक्त, अजीब लग रहा है, जो.
लेकिन कम से कम यह segfault नहीं होगा, हमने देखा है.
>> खैर, मुझे यहां एक और बात करते हैं. structs -0 एक बेवकूफ कार्यक्रम की तरह है
मैं तो यह सभी डेटा दर्ज करें, और क्योंकि कार्यक्रम समाप्त होता है एक बार वह खो दिया है.
लेकिन मुझे आगे जाना है और यह करते हैं.
मुझे टर्मिनल बनाने दो. एक बड़ा सा खिड़की.
मुझे बनाते हैं structs -1, जो इस का एक नया संस्करण है.
>> मैं एक छोटा सा में ज़ूम करेंगे.
और अब मुझे डॉट चलाते हैं स्लैश structs-1.
छात्र का नाम -
डेविड माथर, रोब किर्कलैंड करते हैं के लॉरेन Leverett करते हैं.
क्या अब दिलचस्प की सूचना है -
और मैं केवल इस वजह से जानते हैं मैं प्रोग्राम लिखा -
एक फाइल मेरे वर्तमान पर अब वहाँ निर्देशिका students.csv कहा जाता है.
आप में से कुछ देखा हो सकता है इन वास्तविक दुनिया में.
>> एक सीएसवी फ़ाइल क्या है?
अल्पविराम से अलग किए गए मान.
यह तरह की तरह है एक गरीब आदमी का एक एक्सेल फ़ाइल का संस्करण.
यह पंक्तियों और स्तंभों की एक मेज है कि आप, एक्सेल की तरह एक कार्यक्रम में खोल सकते हैं
या एक मैक पर संख्या.
>> और मैं जीएडिट पर यहाँ इस फाइल को खोलते हैं, सूचना - और संख्या वहाँ नहीं कर रहे हैं.
वह सिर्फ जीएडिट कह रही है मुझे नंबर लाइन.
इस की पहली पंक्ति पर नोटिस फ़ाइल दाऊद और माथर है.
अगली पंक्ति रोब अल्पविराम किर्कलैंड है.
और तीसरी पंक्ति लॉरेन है अल्पविराम Leverett.
>> तो मैं क्या बनाया है?
मैं अब एक सी प्रोग्राम लिखा है कि प्रभावी ढंग से स्प्रेडशीट उत्पन्न कर सकते हैं
कि एक में खोला जा सकता है एक्सेल जैसे कार्यक्रम.
बिल्कुल नहीं है कि सम्मोहक एक डेटा सेट, लेकिन आप में से बहुत बड़ा हिस्सा है अगर
आप वास्तव में चाहते हैं कि डेटा हेरफेर और का ग्राफ बनाने और
जैसे, यह शायद एक है उस डेटा को बनाने के लिए जिस तरह से.
इसके अलावा, CSVs वास्तव में सुपर आम हैं सिर्फ साधारण डेटा संग्रहीत करने के लिए -
याहू वित्त, उदाहरण के लिए, यदि आप प्राप्त उनके तथाकथित के माध्यम से शेयरों के भाव
एपीआई, आप की सुविधा देता है कि नि: शुल्क सेवा वर्तमान अप करने की तारीख शेयर मिल
वे, कंपनियों के लिए उद्धरण में डेटा वापस दे
सुपर सरल सीएसवी प्रारूप.
>> तो हम ऐसा कैसे कर दिया?
खैर, इस कार्यक्रम के सबसे नोटिस लगभग एक ही.
बल्कि प्रिंट से, यहां नीचे नोटिस बाहर, लाइन 35 पर छात्र
आगे, मैं मैं बचत कर रहा हूँ कि दावा डिस्क के लिए छात्रों को, तो एक फ़ाइल बचत.
>> इसलिए मैं * एक फाइल घोषणा कर रहा हूँ नोटिस -
अब, यह सी में एक विसंगति की तरह है जो भी कारण के लिए, फ़ाइल सभी टोपी है,
सबसे अन्य डेटा प्रकार की तरह नहीं है जो सी. में लेकिन यह एक निर्मित है
डेटा प्रकार, फ़ाइल *.
और मैं एक फ़ाइल के लिए एक संकेत घोषणा कर रहा हूँ, तुम उस के बारे में सोच सकते हैं.
>> fopen फ़ाइल खोलने का मतलब है.
आप को खोलने के लिए क्या फ़ाइल चाहते हो?
मैं मैं है कि एक फ़ाइल को खोलने के लिए चाहते हैं मनमाने ढंग से students.csv कहते हैं.
मैं चाहता हूँ कि कुछ भी कह सकते हैं.
>> और फिर एक अनुमान ले.
दूसरा तर्क क्या करता है शायद fopen के लिए क्या मतलब है?
ठीक है, डब्ल्यू लिखने के लिए, कर सकता है पढ़ने के लिए हो आर.
आप अगर एक संलग्न के लिए नहीं है पंक्तियों और नहीं जोड़ना चाहते हैं
पूरी बात को अधिलेखित.
>> लेकिन मैं सिर्फ यह फाइल नहीं बनाना चाहता एक बार, तो मैं बोली डब्ल्यू गंदें शब्द बोलना इस्तेमाल करेंगे.
और मुझे पता है कि केवल पढने से प्रलेखन, या आदमी पेज.
फ़ाइल रिक्त नहीं है - दूसरे शब्दों में, वहाँ कुछ भी नहीं गलत हो गया है -
मुझे अधिक पुनरावृति करते हैं 0-3 छात्रों को.
>> और अब वहाँ कुछ नोटिस कभी तो थोड़ा अलग
यहाँ लाइन 41 के बारे में.
यह printf नहीं है.
यह फाइल printf के लिए fprintf है.
तो यह फ़ाइल में लिखने के लिए जा रहा है.
कौन सा फाइल?
जिसका सूचक आपके द्वारा निर्दिष्ट एक पहले तर्क के रूप में.
>> तो फिर हम एक प्रारूप स्ट्रिंग निर्दिष्ट करें.
तब हम हम क्या चाहते हैं स्ट्रिंग निर्दिष्ट पहला प्रतिशत के लिए में प्लग, और
फिर एक और चर या दूसरी प्रतिशत है.
तो फिर हम fclose साथ फ़ाइल बंद करें.
मैं हालांकि, पहले के रूप में स्मृति से मुक्त मैं में वापस जाने के लिए और जोड़ने चाहिए
अशक्त के लिए कुछ चेक.
>> और यह बात है.
fopen, fprintf, fclose मुझे देता है पाठ फ़ाइलें बनाने की क्षमता.
अब, आप समस्या से पांच सेट में देखेंगे छवियों शामिल है, जो आप का उपयोग होगा
बाइनरी फ़ाइलों के बजाय.
लेकिन मूलरूप में, विचार, एक ही है भले ही आप हूँ कार्यों
देखना थोड़ा अलग हैं.
>> तो बवंडर दौरे, लेकिन आप मिल जाएगा सब भी फाइल के साथ परिचित I/O--
इनपुट और आउटपुट - pset पाँच के साथ.
और के बारे में किसी भी सवाल यहां प्रारंभिक मूल बातें?
हाँ?
>> क्या आप एक नल मान को मुक्त करने की कोशिश की तो?
मुक्त हो गया है जब तक कि मेरा मानना ​​है कि एक उपयोगकर्ता के अनुकूल है, आप कर सकते हैं थोड़ा अधिक
संभावित segfault.
मैं नहीं है क्योंकि यह शून्य पासिंग बुरा है आप के लिए जाँच करने के लिए स्वतंत्र परेशान मानना ​​है,
यह संभवतः एक बेकार हो जाएगा क्योंकि इसके लिए ही करने के लिए समय की
दुनिया में हर कोई.
अच्छा सवाल है, यद्यपि.
>> ठीक है, तो इस तरह का हो जाता है एक दिलचस्प विषय के लिए हमें.
समस्या के विषय सेट पांच फोरेंसिक है.
कम से कम उस एक भाग है समस्या का सेट.
फोरेंसिक आम तौर पर करने के लिए संदर्भित करता है कि हो सकता है या जानकारी की वसूली
हटा दिया गया है नहीं हो सकता जानबूझ.
और इसलिए मुझे लगता है मैं तुम्हें एक त्वरित देने लगा वास्तव में सब क्या हो रहा है का स्वाद
नीचे इस समय आपके कंप्यूटर के हुड.
>> उदाहरण के लिए, आप के अंदर है तो अपने लैपटॉप या अपने डेस्कटॉप कंप्यूटर एक
हार्ड ड्राइव, यह या तो एक यांत्रिक है वास्तव में spins कि डिवाइस -
थाली बुलाया परिपत्र चीज़ें हैं कि काफी क्या मैं की तरह दिखते
अभी हालांकि, यहां स्क्रीन पर पड़ा इस तेजी से पुराने स्कूल है.
यह एक तीन और एक से डेढ़ इंच है हार्ड ड्राइव.
और साढ़े तीन इंच के लिए संदर्भित करता है बात के साथ आप इसे स्थापित जब
एक कंप्यूटर में.
>> अब आपके लैपटॉप में आप लोगों में से कई सॉलिड स्टेट ड्राइव, या SSDs है,
नहीं चलती भागों है.
वे और अधिक रैम की तरह और कम पसंद कर रहे हैं इन यांत्रिक उपकरणों.
लेकिन विचारों में अभी भी वही कर रहे हैं, निश्चित रूप से वे संबंधित हैं
समस्या को पांच सेट.
>> और तुम अब एक हार्ड ड्राइव के बारे में अगर आपको लगता है एक चक्र, किया जा रहा है जो प्रतिनिधित्व करता है
मैं यहाँ इस तरह आकर्षित करेंगे.
आप अपने कंप्यूटर पर एक फ़ाइल बनाते हैं, यह एक SSD है, या में चाहे
इस मामले में, एक पुराने स्कूल हार्ड ड्राइव, उस फाइल कई बिट्स शामिल हैं.
चलो यह इस 0 और 1 है कि हम कहते हैं, 0 और 1 की एक पूरी गुच्छा.
तो यह अपने पूरे हार्ड ड्राइव है.
यह जाहिरा तौर पर एक बहुत बड़ा फ़ाइल है.
और यह उस पर 0 और 1 का उपयोग कर रहा है शारीरिक थाली का भाग.
>> खैर, कि शारीरिक भाग क्या है?
खैर, यह पता चला है कि एक हार्ड ड्राइव पर, इस प्रकार के कम से कम, वहाँ है
इन छोटे छोटे चुंबकीय कणों.
और वे अनिवार्य रूप से उत्तर दिया है और उन्हें दक्षिण डंडे, इतना है कि आप अगर
उन चुंबकीय कणों में से एक बारी इस तरह, आप यह कह सकते हैं कि
एक 1 का प्रतिनिधित्व.
और यह करने के लिए दक्षिण उल्टा है अगर उत्तरी, आप यह कह सकते हैं कि
एक 0 का प्रतिनिधित्व.
>> तो वास्तविक भौतिक दुनिया में, कि आप में कुछ का प्रतिनिधित्व कर सकता कैसे
बाइनरी 0 से राज्य और एक 1.
ताकि सभी एक फाइल है.
चुंबकीय की एक पूरी गुच्छा है उनके इस तरह से कर रहे हैं या कि कणों
इस तरह, बनाने पैटर्न 0 और 1 की.
>> आप एक फ़ाइल को बचाने लेकिन जब यह पता चला है, कुछ जानकारी अलग से बचाया है.
तो यह एक छोटी मेज है, इतनी बात करने के लिए एक निर्देशिका,.
और मैं इस स्तंभ नाम फोन, और हूँ मैं इस कॉलम स्थान बुलाता हूँ.
>> और मुझे लगता है, कहने जा रहा हूँ यह मेरा फिर से शुरू है.
मेरा resume.doc में संग्रहीत किया जाता है स्थान, 123 कहते हैं.
मैं हमेशा उस संख्या के लिए जाना.
लेकिन जैसे कि कहने के लिए पर्याप्त राम में, आप एक हार्ड ड्राइव ले जा सकते हैं
कि एक गीगाबाइट या 200 गीगाबाइट है या एक टेराबाइट, और आप कर सकते हैं
बाइट्स के सभी संख्या.
आप 8 बिट के सभी हिस्सा नंबर कर सकते हैं.
>> तो हम कह देंगे कि इस स्थान 123 है.
मेरे परिचालन के अंदर तो इस निर्देशिका प्रणाली याद है मेरी
फिर से शुरू स्थान 123 पर है.
लेकिन यह दिलचस्प हो जाता है जब आप एक फ़ाइल को नष्ट.
>> उदाहरण के लिए तो -
और शुक्र है, दुनिया की सबसे अधिक है इस पर पकड़ा - क्या होता है जब
आप अपने मैक ओएस कचरा पेटी में एक फ़ाइल खींचें या अपने Windows रीसायकल बिन?
कि ऐसा करने का उद्देश्य क्या है?
यह फाइल से छुटकारा पाने के लिए स्पष्ट रूप से है, लेकिन क्या खींचकर का कार्य करता है और
अपने ट्रैश या में छोड़ने अपने रीसायकल बिन एक कंप्यूटर पर करते हैं?
>> बिल्कुल कुछ भी नहीं, वास्तव में.
यह सिर्फ एक फ़ोल्डर की तरह है.
यह सुनिश्चित किया जाना, एक विशेष फ़ोल्डर है.
लेकिन यह वास्तव में फ़ाइल को नष्ट करता है?
>> ठीक है, नहीं, क्योंकि आप में से कुछ शायद लानत ओह, तुम नहीं किया, की तरह किया गया है
ऐसा करने के लिए मतलब है.
तो अगर आप डबल क्लिक करें कचरा पेटी या रीसायकल बिन.
आप आसपास poked है और तुम बरामद किया बस इसे खींचकर फ़ाइल
वहाँ से बाहर.
तो जाहिर है, यह जरूरी नहीं है इसे हटाने.
>> ठीक है, तुम कि अधिक चालाक हो.
तुम्हें पता है कि बस में खींच कचरा या रीसायकल बिन मतलब यह नहीं है
आप कचरा खाली कर रहे हैं.
तो आप मेनू के लिए ऊपर जाना है, और तुम कहते हो रद्दी खाली या खाली रीसायकल बिन.
फिर क्या होता है?
>> हाँ, तो यह और अधिक इसलिए हटा दिया गया है.
लेकिन ऐसा होता है कि यह सब है.
कंप्यूटर जहाँ भूल जाता है resume.doc था.
>> लेकिन क्या जाहिरा तौर पर नहीं बदला है तस्वीर में?
बिट्स, मैं दावा है कि 0 और 1 हैं कुछ शारीरिक पहलू से की साइट पर
हार्डवेयर.
वे वहाँ अभी भी कर रहे हैं.
यह सिर्फ कंप्यूटर की गई है वे क्या कर रहे हैं भूल.
>> इसलिए यह अनिवार्य रूप से मुक्त कर दिया है फ़ाइल की बिट्स वे पुन: उपयोग किया जा सकता है.
लेकिन यदि आप अधिक फाइलें नहीं बना जब तक और अधिक फाइलें, और अधिक फाइलें होगा
संभवतया, उन 0 और 1, उन चुंबकीय कणों, पुन: उपयोग किया हो,
के लिए ऊपर या दाएं ऊपर अन्य फाइलें, 0 और 1.
>> तो तुम समय की इस खिड़की है.
और यह उम्मीद के मुताबिक की नहीं है लंबाई, वास्तव में.
यह आपके हार्ड के आकार पर निर्भर करता है ड्राइव और कितने फ़ाइलें आप की है और
कितनी जल्दी आप नए बनाते हैं.
लेकिन समय की इस विंडो के दौरान वहाँ उस फ़ाइल को पूरी तरह से अभी भी है जो
वसूली.
>> तो तुम कभी McAfee जैसे कार्यक्रमों का उपयोग करते हैं या Norton ठीक करने के लिए प्रयास करने के लिए
डेटा, वे सब कर रहे हैं करने के लिए कोशिश कर रहा है करने के लिए इस तथाकथित निर्देशिका की वसूली
आपकी फ़ाइल था जहां यह पता लगाने.
और कभी कभी Norton और कहेंगे, फाइल 93% वसूली योग्य है.
खैर, इसका क्या मतलब है?
वह सिर्फ मतलब है कि कुछ अन्य फ़ाइल संयोग से, कहते हैं, का उपयोग कर समाप्त
अपने मूल फाइल से बाहर उन बिट्स.
>> तो शामिल वास्तव में क्या है डाटा की वसूली में?
खैर, आप की तरह कुछ भी नहीं है अगर नॉर्टन आपके कंप्यूटर पर पहले से स्थापित,
आप कभी कभी ऐसा कर सकते हैं सर्वोत्तम है की तलाश में पूरे हार्ड ड्राइव पर
बिट्स के पैटर्न.
और समस्या के विषयों में से एक सेट पाँच आप खोज करेंगे कि है
एक हार्ड ड्राइव के बराबर, एक फोरेंसिक एक से एक कॉम्पैक्ट फ़्लैश कार्ड की छवि
डिजिटल कैमरा, 0s के लिए खोज और कहा कि आम तौर पर, साथ 1s उच्च
संभावना का प्रतिनिधित्व एक JPEG छवि के लगते हैं.
>> और तुम लोगों ने उन छवियों को ठीक कर सकते हैं मैं इस पैटर्न के देखते हैं, यह सोचते हैं
साथ फोरेंसिक छवि, पर बिट्स प्रबल संभावना है कि, निशान
एक JPEG के शुरू.
और मैं फिर से एक ही पैटर्न देखते हैं, कि शायद की शुरुआत के निशान
एक और जेपीईजी, और अन्य जेपीईजी, और एक और जेपीईजी.
और यह आमतौर पर है कि कैसे डेटा वसूली काम करेंगे.
क्या JPEGs के बारे में अच्छी बात है, भले ही है फ़ाइल स्वरूप ही कुछ हद तक है
जटिल, हर तरह के की शुरुआत फ़ाइल वास्तव में काफी पहचान योग्य है
और जैसा कि आप देखेंगे, सरल, यदि आपने ऐसा नहीं किया है.
>> तो चलो एक करीब देखो नीचे ले जाने हो गया है कि क्या वास्तव में के रूप में डाकू
चल रहा है, और क्या इन 0 और 1 आप एक के लिए थोड़ा और अधिक देने के लिए कर रहे हैं,
इस विशेष चुनौती के लिए संदर्भ.
>> [वीडियो प्लेबैक]
>> कहाँ अपने पीसी भंडार सबसे इसके स्थायी डेटा की.
ऐसा करने के लिए, डेटा रैम से यात्रा बता कि सॉफ्टवेयर संकेतों के साथ
मुश्किल यह है कि डेटा स्टोर करने के लिए कैसे ड्राइव.
हार्ड ड्राइव सर्किट अनुवाद वोल्टेज में उन संकेतों
उतार चढ़ाव.
इन, बारी में, हार्ड ड्राइव के नियंत्रण चलती भागों, कुछ का कुछ
में छोड़ा चलती भागों आधुनिक कंप्यूटर.
>> संकेतों में से कुछ एक मोटर नियंत्रण जो धातु में लिपटे थाली घूमती है.
आपका डेटा वास्तव में संग्रहीत किया जाता है इन थाली पर.
अन्य संकेतों को पढ़ने / लिखने के लिए कदम पढ़ने के लिए सिर या
थाली पर डेटा लिखें.
इतनी सटीक यह मशीनरी कि एक मानव बाल भी बीच पारित नहीं कर सकता
सिर और कताई थाली.
फिर भी, यह सब भयानक गति से काम करता है.
>> [अंत वीडियो प्लेबैक]
>> डेविड मालन: एक छोटी सी में ज़ूम अब क्या है पर गहरा
वास्तव में उन थाली पर.
>> [वीडियो प्लेबैक]
>> चलो क्या हम बस पर देखने दो. धीमी गति में देखा था.
बिजली का एक संक्षिप्त नाड़ी है जब flips, तो पढ़ने / लिखने के सिर को भेजा
के लिए एक छोटे से विद्युत पर एक दूसरे के एक अंश.
चुंबक, एक क्षेत्र है जो बनाता है एक छोटे, छोटे के polarity परिवर्तन
धातु के कणों का भाग है जो कोट प्रत्येक थाली सतह.
>> इन छोटे का एक पैटर्न श्रृंखला, डिस्क पर आरोप लगाया अप क्षेत्रों
की एक एकल बिट का प्रतिनिधित्व करता है बाइनरी संख्या में डेटा
कंप्यूटर द्वारा उपयोग किया प्रणाली.
अब, वर्तमान एक तरह से भेजा जाता है तो पढ़ने / लिखने के सिर के माध्यम से, क्षेत्र
एक दिशा में polarized है.
वर्तमान में भेजा जाता है तो विपरीत दिशा,
ध्रुवीकरण उलट है.
>> आप हार्ड डिस्क से डाटा प्राप्त करें कैसे?
बस प्रक्रिया को उल्टा.
तो यह डिस्क पर कणों है उस में चालू हो
/ लिखने के सिर घूम पढ़ा.
इनमें से लाखों लोगों को एक साथ रखा चुम्बकीय क्षेत्रों, और
आप एक फाइल मिल गया है.
>> अब, एक एकल फाइल के टुकड़े हो सकता है सभी एक ड्राइव के पर बिखरे हुए किया
तरह की गड़बड़ की तरह थाली, अपनी मेज पर पत्रों का.
तो एक विशेष अतिरिक्त फ़ाइल ट्रैक रखता है सब कुछ है, जहां की.
आप आप था इच्छा मत करो ऐसा कुछ?
>> [अंत वीडियो प्लेबैक]
>> डेविड मालन: ठीक है, शायद नहीं.
आप लोगों का तो कितने इन के साथ बड़ा हुआ?
ठीक है, तो यह कम और कम है हाथों हर वर्ष.
लेकिन मैं आपको कम से कम परिचित हैं खुश हूँ उनके साथ, क्योंकि यह और हमारे अपने
पुस्तक डेमो, अफसोस की बात है, एक बहुत ही मर रहे हैं यहां अपनेपन की मौत धीमी गति से.
>> लेकिन यह क्या मैं, कम से कम, पीठ में है उच्च विद्यालय, बैकअप के लिए इस्तेमाल का उपयोग करें.
और यह अद्भुत था क्योंकि आप 1.4 मेगाबाइट पर दुकान सकता है
इस विशेष डिस्क.
और इस उच्च घनत्व संस्करण था, जो है HD, ने संकेत दिया
आज की एचडी वीडियो से पहले अर्थ.
>> स्टैंडर्ड घनत्व 800 किलोबाइट था.
और उससे पहले, वहाँ थे 400 किलोबाइट डिस्क.
और उससे पहले, 5 और 1/4 वहाँ थे सही मायने में फ्लॉपी थे जो इंच डिस्क,,
और एक छोटे से व्यापक और लम्बे यहाँ इन बातों से.
लेकिन आप वास्तव में तथाकथित देख सकते हैं इन डिस्क के फ्लॉपी पहलू.
>> और कार्यात्मक, वे वास्तव में कर रहे हैं पर की हार्ड ड्राइव करने के लिए बहुत समान
कम से कम इस प्रकार के.
फिर, नए कंप्यूटर में SSDs एक छोटे से अलग काम करते हैं.
लेकिन आप उस छोटे से धातु टैब ले जाते हैं, आप वास्तव में एक छोटे कुकी देख सकते हैं,
या थाली.
>> यह यह एक तरह धातु नहीं है.
यह एक वास्तव में कुछ सस्ता है प्लास्टिक सामग्री.
और आप की तरह यह wiggle कर सकते हैं.
और तुम trully बस कुछ दूर मिटा दिया है बिट्स या चुंबकीय कणों की संख्या
इस डिस्क से.
>> तो शुक्र है, इस पर कुछ भी नहीं है.
और कवर - बात यह है कि रास्ते में है तो अपनी आँखें और अपने पड़ोसी के उन -
आप बस की तरह खींच कर सकते हैं पूरी तरह है कि बंद म्यान.
लेकिन एक छोटे से वसंत है, इसलिए हो सकता है अपनी आँखों से इस बात का पता.
तो अब आप सही मायने में एक फ्लॉपी डिस्क है.
>> और क्या इस बारे में उल्लेखनीय है है कि यह है जितना में एक
एक बड़े से छोटे पैमाने पर प्रतिनिधित्व हार्ड ड्राइव, इन बातों को, सुपर रहे हैं
सुपर सरल.
आपको लगता है कि अब यह के नीचे, चुटकी, तो धातु है कि बात के लिए रवाना, और छील
उन्हें खोलने, सब वहाँ के दो टुकड़े है महसूस किया और तथाकथित फ्लॉपी डिस्क
अंदर पर धातु का एक टुकड़ा के साथ.
>> और के आधे वहां से चला जाता है मेरी डिस्क की सामग्री.
उनमें से एक और आधा हो जाता है.
लेकिन वह अंदर कताई था वह सब है पहल साल में अपने कंप्यूटर की.
>> और फिर, परिप्रेक्ष्य में यह डाल, अपने से ज्यादातर कितना बड़ा है
कठिन इन दिनों ड्राइव?
500 गीगाबाइट, एक टेराबाइट, शायद में एक डेस्कटॉप कंप्यूटर, 2 टेराबाइट्स, 3
टेराबाइट्स, 4 टेराबाइट्स, सही?
यह एक मेगाबाइट, दे या ले है यहां तक ​​कि एक ठेठ एमपी 3 फिट नहीं कर सकते जो
अब और इन दिनों, या कुछ इसी तरह संगीत फ़ाइल.
>> तो आप के लिए एक छोटी सी स्मारिका आज, और यह भी क्या contextualize मदद करने के लिए
हम के लिए दी ले जा सकता हूँ अब समस्या में पांच सेट.
तो उन तुम्हारा रखने के लिए कर रहे हैं.
तो मुझे कहाँ होगी करने के लिए संक्रमण करते हैं साथ ही अगले pset खर्च.
तो हम अब के लिए इस पेज को निर्धारित किया है - ओह, घोषणाओं के एक जोड़े को जल्दी से.
>> इस शुक्रवार, अगर आप चाहेंगे CS50 जुड़ने दोपहर के भोजन के लिए, सामान्य जगह पर जाना
cs50.net/rsvp.
और अंतिम परियोजना -
इसलिए सिलेबस के अनुसार, हम पोस्ट किया है पहले से ही अंतिम परियोजना विनिर्देश.
इसका मतलब यह नहीं है कि एहसास यह विशेष रूप से जल्द ही कारण है.
यह सिर्फ पाने के लिए, वास्तव में, तैनात है आप इसके बारे में सोच लड़के.
और वास्तव में, एक सुपर महत्वपूर्ण आप का प्रतिशत से निपटने की जाएगी
सामग्री पर अंतिम परियोजनाओं है कि हम यहां तक ​​कि क्लास में करने के लिए नहीं मिल गया है,
लेकिन के रूप में अगले हफ्ते की शुरुआत के रूप में होगा.
>> सूचना, हालांकि, कल्पना के लिए कहता है की कुछ अलग घटकों
अंतिम परियोजना.
सबसे पहले, एक कुछ हफ्तों में, एक है पूर्व प्रस्ताव, एक सुंदर आकस्मिक ईमेल करने के लिए
अपने TF आप क्या कर रहे हैं उसे बता सकते हैं या करने के लिए साथ, अपनी परियोजना के बारे में सोच
कोई प्रतिबद्धता.
प्रस्ताव अपने विशेष होगा प्रतिबद्धता, कह रही है, यहाँ, यह क्या है
मैं अपनी परियोजना के लिए करना चाहते हैं.
आप क्या सोचते हैं?
बहुत बड़ा है?
बहुत छोटा?
यह प्रबंधनीय है?
और अगर आप अधिक जानकारी के लिए कल्पना देखते हैं.
>> उसके बाद सप्ताह की जोड़ी स्थिति है एक इसी तरह की है, जो रिपोर्ट
कहने के लिए अपने TF करने के लिए आकस्मिक ईमेल बस कैसे आप अपने अंतिम में हैं बहुत पीछे
द्वारा पीछा परियोजना के कार्यान्वयन, CS50 Hackathon जहाँ हर कोई
आमंत्रित किया है, से एक घटना होगी जो 7:00 तक एक शाम को 8:00
अगली सुबह हूँ.
मैं सप्ताह में उल्लेख किया है मई के रूप में पिज्जा, शून्य, 9:00 पर कार्य किया जा wil,
1:00 पर चीनी खाना.
और तुम अब भी 5:00 पर जाग रहे हैं, हम नाश्ते के लिए IHOP के लिए ले जाऊँगा.
>> तो Hackathon अधिक में से एक है वर्ग में यादगार अनुभव.
तब कार्यान्वयन की वजह से है, और तब चरम CS50 मेला.
इन सब के बारे में अधिक जानकारी आने वाले सप्ताहों में.
>> लेकिन कुछ करने के लिए वापस जाओ पुराने स्कूल -
फिर, एक सरणी.
इसे हल इसलिए क्योंकि एक सरणी, अच्छा था हम जैसी समस्याओं को देखा सिर्फ एक
छात्र संरचनाओं के साथ पहले पल एक छोटे से नियंत्रण से बाहर हो रही है अगर हम
छात्र एक, छात्र दो है चाहता हूँ, छात्र तीन, छात्र डॉट डॉट डॉट,
छात्रों में से कुछ मनमाना संख्या.
>> तो सरणियों, कुछ हफ्ते पहले, में swooped और नहीं के बारे में हमारी सभी समस्याओं का हल
अग्रिम में जानने कितनी बातें कुछ प्रकार के हम चाहते हो सकता है.
और हम structs हमारी मदद कर सकते हैं कि देखा है आगे हमारे कोड को संगठित करने और रखने के
एक तरह धारणात्मक समान चर, नाम और एक घर, एक साथ, ताकि हम
अंदर, एक इकाई के रूप में उन्हें इलाज कर सकते हैं छोटे टुकड़े कर रहे हैं जो की.
>> लेकिन सरणियों कुछ नुकसान है.
नुकसान की कुछ क्या हैं हम सामना करना पड़ा है
सरणियों के साथ इस प्रकार अब तक?
वह क्या है?
निश्चित आकार - तो भी आप कर सकते हैं, हालांकि एक के लिए स्मृति आवंटित करने में सक्षम हो
सरणी, आप कितने छात्रों को पता एक बार आपको लगता है कि कितने अक्षर है,
उपयोगकर्ता से, एक बार आप आवंटित किया है सरणी, आप की तरह चित्रित किया
एक कोने में अपने आप को.
>> आप नए तत्वों को सम्मिलित नहीं कर सकता, क्योंकि एक सरणी के बीच में.
आप अधिक तत्व सम्मिलित नहीं कर सकता एक सरणी के अंत में.
वास्तव में, यदि आप एक बनाने का सहारा हम चर्चा की है के रूप में पूरी नई सरणी,,
नई में पुराने नकल.
और फिर, कि सिर दर्द है कि आप के लिए के साथ सौदों GetString.
>> लेकिन फिर, आप भी सम्मिलित नहीं कर सकता सरणी के बीच में कुछ
दर पूरी तरह भरा नहीं है.
उदाहरण के लिए, अगर आकार के यहां इस सरणी छह ही, इसमें पांच बातें
ठीक है, तुम सिर्फ हमले कर सकता है अंत पर कुछ.
लेकिन अगर आप कुछ सम्मिलित करने के लिए क्या चाहते हैं के बीच में
यह हो सकता है, भले ही सरणी, पांच इसमें छह चीजों से बाहर?
>> हम सभी था जब खैर, हम क्या किया हमारे मानव स्वयंसेवकों मंच में की
सप्ताह पिछले?
हम या तो किसी को यहाँ डाल करना चाहते थे इस स्थानांतरित करने के लिए कैसे इन लोगों को
इस स्थानांतरित करने के लिए कैसे रास्ता, या इन लोगों जिस तरह से, और उस महंगा हो गया.
एक के अंदर लोगों का स्थानांतरण सरणी जोड़ने और लागत को समाप्त हो गया
हमें समय, हमारे n इसलिए बहुत चुकता के लिए, सम्मिलन सॉर्ट ऐसे समय चल रहा है
उदाहरण के लिए, सबसे खराब स्थिति में.
तो सरणियों महान हैं, लेकिन आप के लिए है आप चाहते हैं उन्हें कितना बड़ा पहले से पता है.
>> तो ठीक है, यहाँ एक समाधान है.
कितने मैं पहले से नहीं जानते हैं छात्रों मैं हो सकता है, और मैं एक बार पता
मैं हालांकि, मैं उस के साथ फँस गया हूँ, तय कई छात्रों, क्यों नहीं मैं तो बस हमेशा
दो बार के रूप में ज्यादा जगह आवंटित मैं मैं की जरूरत है लगता है कि शायद?
नहीं एक उचित समाधान है?
>> वास्तविक, मुझे लगता है हम कर रहे हैं कि नहीं लगता 50 से अधिक स्लॉट की जरूरत के लिए जा रहा
एक मध्यम आकार के वर्ग के लिए एक सरणी में, तो चलो बस को गोल करते हैं.
मैं सिर्फ अपने सरणी में 100 स्लॉटों कर दूँगा हम निश्चित रूप से प्राप्त कर सकते हैं
मुझे उम्मीद है छात्रों की संख्या के लिए कुछ मध्यम आकार के वर्ग में हो.
तो क्यों अभी तक दौर और आवंटित नहीं अधिक स्मृति, आम तौर पर, एक सरणी के लिए
आपको लगता है कि आप भी जरूरत हो सकती है?
इस सरल pushback क्या है यह विचार है कि करने के लिए?
>> तुम सिर्फ स्मृति बर्बाद कर रहे हैं.
आप तो लिखने सचमुच हर कार्यक्रम शायद दो बार के रूप में ज्यादा स्मृति के रूप में उपयोग कर रहा है
आप वास्तव में जरूरत है.
और वह सिर्फ एक तरह महसूस नहीं करता विशेष रूप से सुरुचिपूर्ण समाधान.
इसके अलावा, यह सिर्फ कम हो जाती है एक समस्या की संभावना.
आप एक लोकप्रिय कोर्स के लिए होता है एक सेमेस्टर और आप 101 है
छात्रों, अपने कार्यक्रम अभी भी है मूलरूप में एक ही मुद्दे का सामना करना पड़.
>> तो शुक्र है, वहाँ एक समाधान है फॉर्म में इस विज्ञापन हमारी सभी समस्याओं
हैं कि डेटा संरचनाओं की लोगों की तुलना में अधिक जटिल
हम इस प्रकार अब तक देखा है.
यह, मैं दावा, एक लिंक सूची है.
इस नंबर की एक सूची है -
9, 17, 22, 26, और 34 -
वैसे एक साथ जोड़ दिया गया है कि मैं तीर के रूप में तैयार किया है क्या की.
>> दूसरे शब्दों में, मैं प्रतिनिधित्व करना चाहता था एक सरणी, मैं क्या कर सकता
कुछ इस तरह.
और मैं भूमि के ऊपर पर डाल देता हूँ बस एक पल में.
मैं कर सकता है -
नमस्कार, सब ठीक है.
द्वारा खड़े हो जाओ.
यहां नई कंप्यूटर, साफ -
ठीक है.
>> तो मैं सरणी में इन नंबर हैं -
9, 17, 22, 26, 24 -
जरूरी नहीं पैमाने पर करने की.
ठीक है, तो यहाँ मेरे सरणी है -
हे भगवान.
ठीक है, तो यहाँ मेरे सरणी है.
हे भगवान.
>> [हंसी]
>> डेविड मालन: नाटक.
यह वापस जाने के लिए बहुत अधिक प्रयास है और इसलिए वहाँ, तय है कि -
26.
इसलिए हम इस सरणी है 9, 17, 22, 26, और 34.
आप में से उन देख सकते हैं शर्मनाक गलती मैं सिर्फ बनाया,
वहाँ यह है.
>> इसलिए मैं इस का दावा है कि एक बहुत ही कुशल समाधान.
मैं के रूप में कई ints आवंटित किया है मैं की जरूरत है - एक, दो, तीन,
चार, पांच या छह -
और मैं तो संख्या संग्रहीत किया है इस सरणी के अंदर.
लेकिन लगता है, तो, मैं सम्मिलित करना चाहते हैं 8 नंबर की तरह एक मूल्य है?
खैर, जहां यह जाना है?
मैं सम्मिलित करने के लिए चाहता हूँ 20 की तरह एक नंबर.
खैर, जहां यह जाना है?
कहीं बीच में, या संख्या 35 से जाना है
अंत में कहीं.
लेकिन मैं अंतरिक्ष के बाहर सब कर रहा हूँ.
>> और इसलिए यह एक मौलिक चुनौती है सरणियों का समाधान कर रहे हैं कि है.
मैं GetString, एक पल पहले दावा किया इस समस्या को हल करती है.
आप एक छठे नंबर डालने के लिए चाहते हैं इस सरणी में, कम से कम एक क्या है
आप सुनिश्चित करने के लिए पीठ पर गिर सकता है समाधान, हम GetString साथ बस पसंद नहीं है?
वह क्या है?
>> खैर, यह बड़ा है कर आसान काम से कहा.
हम जरूरी सरणी नहीं कर सकता बड़ा, लेकिन हम क्या कर सकते हैं?
आकार का बड़ा है कि एक नई सरणी, बनाओ 6, या शायद 10 आकार, अगर हम चाहते हैं
चीज़ों के आगे मिलता है, और फिर कॉपी करने के लिए तो नया है, और में पुराने सरणी
पुराने सरणी मुक्त.
>> लेकिन समय चल रहा है क्या है अब उस प्रक्रिया की?
यह, एन के बिग हे क्योंकि नकल आप में से कुछ इकाइयों खर्च हो रहा है
समय, तो हम ऐसा करने के लिए आदर्श है, अगर नहीं जा रहा है जो एक नई सरणी, आवंटित
दो बार के रूप में ज्यादा उपभोग करने के लिए स्मृति को अस्थायी रूप से.
नई में पुरानी कॉपी -
मेरा मतलब है, यह सिर्फ एक सिरदर्द है, जो , फिर से, हम क्यों लिखा है
आप के लिए GetString.
>> तो हम बजाय क्या कर सकता है?
खैर, क्या हुआ अगर हमारे डेटा संरचना वास्तव में यह अंतराल है?
मैं होने के अपने लक्ष्य को आराम कि मान लीजिए स्मृति के सन्निहित हिस्सा, जहां 9
ठीक बगल में 17 को, जो है 22 के बगल में, और इतने पर.
>> और 9 में यहाँ पर हो सकता है कि लगता है रैम, और 17, रैम में यहाँ पर हो सकता है
और 22 यहाँ रैम में खत्म हो सकता है.
दूसरे शब्दों में, मैं उन्हें जरूरत नहीं है यहां तक ​​कि अब और वापस वापस.
मैं तो बस किसी तरह एक सुई धागा करने के लिए है इन नंबरों में से प्रत्येक, या प्रत्येक के माध्यम से
हम फोन करता हूँ इन नोड्स के, के रूप में मैं करने के लिए, उन्हें तैयार किया है के रूप में आयतों
पिछले करने के लिए प्राप्त करने के लिए कैसे याद पहले से ऐसी नोड.
>> तो प्रोग्रामिंग का निर्माण क्या है हम काफी हाल ही में देखा है, जिसके साथ मैं
उस धागे को लागू करने, या कर सकते हैं जिसके साथ मैं कर सकता हूँ, यहाँ तैयार
उन तीरों को लागू?
तो संकेत, सही?
मैं न सिर्फ एक आवंटित हैं INT, लेकिन एक नोड - और से
नोड, मैं सिर्फ कंटेनर मतलब.
और नेत्रहीन, मैं एक आयत का मतलब.
तो एक नोड जाहिरा तौर पर की जरूरत है दो मूल्यों को नियंत्रित करने के लिए -
के रूप में निहित, तो खुद INT, और आयत के नीचे आधा,
एक पूर्णांक के लिए पर्याप्त जगह.
>> तो बस, यहाँ आगे की सोच इस नोड यह कितना बड़ा है
प्रश्न में कंटेनर?
कितने बाइट्स int के लिए?
मुमकिन 4, अगर यह हमेशा की तरह ही है.
और फिर कितने बाइट्स सूचक के लिए?
4.
तो इस कंटेनर, या इस नोड है एक 8 बाइट संरचना होने जा रहा.
ओह, और कहा कि यह सुखद संयोग है कि हम सिर्फ इस धारणा की शुरुआत की
एक संरचना, या एक सी संरचना.
>> इसलिए मुझे लगता है मैं एक कदम उठाना चाहते हैं कि दावा यह और अधिक परिष्कृत की ओर
नंबरों की सूची के कार्यान्वयन, एक नंबरों की सूची जुड़ा है, मैं क्या करने की जरूरत है एक
थोड़ा अधिक सामने सोच और न सिर्फ एक पूर्णांक, लेकिन एक struct घोषित
मैं पारंपरिक, फोन करता हूँ कि यहाँ, नोड.
हम चाहते हैं कि कुछ भी कहते हैं, लेकिन हो सकता है नोड एक बहुत में विषयगत होने जा रहा है
चीजों की अब हम पर तलाश शुरू.
>> कि नोड के अंदर एक पूर्णांक n है.
और फिर इस वाक्य रचना, एक छोटे से पहली नज़र में अजीब -
संरचना नोड * अगले.
खैर सचित्र रूप से, कि क्या है?
उस के नीचे आधा है हमने देखा है कि आयत
बस एक पल पहले.
>> लेकिन क्यों मैं * संरचना नोड कह रहा हूँ * बस नोड के लिए विरोध के रूप में?
कि सूचक इशारा कर रहा है क्योंकि अगर अन्य नोड में, यह सिर्फ
एक नोड के पते.
यही कारण है कि हम क्या है के साथ संगत है इस प्रकार अब तक संकेत के बारे में चर्चा की.
मैं दावा करते हैं लेकिन क्यों, इस संरचना है नोड कहा जाता है, मैं संरचना कहना है
नोड यहाँ अंदर?
>> बिल्कुल सही.
यह सी. के प्रकार की एक बेवकूफ वास्तविकता है typedef, तो बात है, नहीं है
अभी तक हुआ.
सी सुपर शाब्दिक है.
यह करने के लिए अपने कोड शीर्ष पढ़ता सही करने के लिए छोड़ दिया तल,.
और उस पर कि अर्धविराम हिट जब तक लब्बोलुआब यह नहीं करता है लगता है क्या
एक डेटा प्रकार के रूप में मौजूद है?
नोड, बोली गंदें शब्द बोलना नोड.
>> लेकिन क्योंकि अधिक वाचाल की घोषणा मैं पहली पंक्ति पर किया था -
typedef struct नोड -
उससे पहले, पहली बार आया था, क्योंकि घुंघराले ब्रेसिज़, उस तरह की तरह है
बजना पूर्व शिक्षित कि, आप , मुझे एक संरचना दे पता है क्या
संरचना नोड कहा जाता है.
सच कहूँ तो, मैं चीजों को बुला पसंद नहीं है संरचना नोड, संरचना नोड सभी
मेरे कोड भर में.
लेकिन मैं केवल बस के अंदर, एक बार इसे इस्तेमाल करेंगे मैं इतना है कि प्रभावी ढंग से कर सकते हैं
, परिपत्र संदर्भ का एक तरह से नहीं बना दर असल अपने आप को, लेकिन एक के लिए एक सूचक
की एक और करने के लिए सूचक एक समान प्रकार.
>> तो यह पता चला है कि एक आंकड़ा संरचना पर इस तरह, कुछ नहीं है
हो सकता है कि आपरेशन हमारे लिए ब्याज की.
हम सम्मिलित करने के लिए चाहते हो सकता है इस प्रकार की सूची में.
हम हटाने के लिए चाहते हो सकता है इस तरह से एक सूची से.
हम एक के लिए सूची खोज करने के लिए चाहते हो सकता है मूल्य, या अधिक आम तौर पार.
और पार सिर्फ एक अच्छा तरीका की है बाएँ पर शुरू कह रही है और सभी कदम
सही तरीके से करने.
>> और यहां तक ​​कि यह थोड़ा अधिक के साथ, नोटिस परिष्कृत डेटा संरचना, चलो
मुझे हम में से कुछ उधार ले सकते हैं कि प्रस्ताव पिछले दो हफ्तों के विचारों और
कहा जाता है एक समारोह को लागू इस तरह से खोज.
यह सच लौटने के लिए जा रहा है या कर रहा है झूठा, यह दर्शाता है, हाँ या
नहीं, पता सूची में है.
इसका दूसरा तर्क एक सूचक है सूची पर ही है, एक तो
एक नोड के लिए सूचक.
>> मैं फिर क्या करने जा रहा हूँ घोषित है एक अस्थायी चर.
हम कन्वेंशन द्वारा पीटीआर यह फोन करता हूँ सूचक के लिए.
और मैं यह करने के लिए बराबर आवंटित सूची की शुरुआत.
>> और अब जबकि पाश नोटिस.
इतने लंबे समय के सूचक बराबर नहीं है के रूप में अशक्त करने के लिए, मैं जाँच करने के लिए जा रहा हूँ.
सूचक तीर n के बराबर है में पारित किया गया था कि पता?
और एक मिनट रुको - नई वाक्यविन्यास का टुकड़ा.
तीर अचानक क्या है?
हाँ?
>> बिल्कुल सही.
तो, जबकि कुछ मिनट पहले, हम इस्तेमाल कुछ का उपयोग करने के लिए डॉट संकेतन
एक संरचना के अंदर, अगर चर आप संरचना नहीं है है
ही है, लेकिन एक संरचना पर कोई सूचक, शुक्र है, वाक्य रचना का एक टुकड़ा है कि
अंत में सहज ज्ञान युक्त समझ में आता है.
तीर सूचक का पालन करने का मतलब है, हमारे तीर आम तौर पर मतलब है की तरह
सचित्र रूप से, और पर जाना डेटा क्षेत्र के अंदर.
तो तीर डॉट के रूप में एक ही बात है, लेकिन आप एक सूचक है जब आप इसे उपयोग.
>> तो बस, तो संक्षिप्त करने के लिए करते हैं तो क्षेत्र संरचना के अंदर सूचक कहा जाता है
बराबर होती n के बराबर होती है, सच वापसी.
अन्यथा, यहाँ इस लाइन - सूचक अगले सूचक के बराबर होती है.
तो यह क्या कर रहा है, नोटिस, अगर मैं वर्तमान संरचना पर इशारा कर रहा हूँ
9, और 9 युक्त संख्या नहीं है मैं देख रहा हूँ लगता है - मैं देख रहा हूँ
N के लिए 50 के बराबर होती है -
मैं अपने अस्थायी सूचक अद्यतन करने के लिए जा रहा हूँ इस नोड पर बात नहीं करने के लिए
अब और नहीं, लेकिन सूचक तीर अगला, जो मुझे यहाँ रखा जा रहा है.
>> अब, मुझे एहसास हुआ कि एक बवंडर है परिचय.
बुधवार को, हम वास्तव में इस करूँगा कुछ मनुष्यों के साथ और कुछ और के साथ
एक धीमी गति से कोड.
लेकिन, पता ही अब हम अपने डेटा कर रहे हैं संरचनाओं और अधिक जटिल है, ताकि हमारे
एल्गोरिदम, अधिक कुशल प्राप्त कर सकते हैं जो के लिए अपेक्षित होने जा रहा है
pset छह, हम, फिर से, उन में लोड करते हैं 150,000 शब्द हैं, लेकिन ऐसा करने की जरूरत
कुशलतापूर्वक, और आदर्श रूप में, एक बना हमारे उपयोगकर्ताओं को नहीं में लिए चलता है कि कार्यक्रम
रेखीय, एन में चुकता, लेकिन में नहीं आदर्श में लगातार समय,.
>> हम बुधवार को देखेंगे.
>> अध्यक्ष: अगले CS50, डेविड में उसके आधार मामले को भूल जाता है.
>> डेविड मालन: और है कि आप भेजने कैसे है सी. क्या साथ पाठ संदेश -
>> [विभिन्न पाठ संदेश अधिसूचना ध्वनियों]