>> डेविड मालन: हैलो, और CS50 के लिए वापस स्वागत करते हैं.
तो इस सप्ताह चार का अंत है.
बस एक घोषणा पहले.
तो तथाकथित पांचवें सोमवार है इस आने वाले सोमवार को आ रहा है.
इस से बदलने का मौका है शनि / UNSAT एक पत्र ग्रेड के लिए, या से
पत्र ग्रेड शनि / UNSAT.
Annoyingly, कि प्रक्रिया एक आवश्यकता है आपको भरना होगा हस्ताक्षर, क्योंकि
उन गुलाबी जोड़ें / ड्रॉप रूपों में से एक बाहर.
>> क्योंकि तकनीकी तौर पर, शनि / UNSAT संस्करण और पत्र ग्रेड संस्करण
विशिष्ट सूची संख्या है.
लेकिन कोई बड़ी बात नहीं.
बस मेरे लिए या लूटने के लिए आ या किसी भी बिंदु पर लॉरेन के लिए.
आप की तरह नहीं है, तो या हमें ईमेल कागजी कार्रवाई के आप आज की जरूरत है, और हम
आप ले मदद करने के लिए सुनिश्चित हो जाएगा सोमवार से पहले इस बात का ध्यान.
>> ठीक है, तो आज -
वास्तव में, एक गूंज के एक सा है.
हम थोड़ा मुझे नीचे टोन कर सकते हैं?
ठीक है.
तो आज, हम एक विषय का परिचय संकेत के रूप में जाना जाता है.
और मैं इस में से एक है कि मानता हूँ हम करते हैं कि अधिक जटिल विषयों
इस वर्ग में कवर, या वास्तव में किसी भी सी. का उपयोग करता है कि प्रारंभिक पाठ्यक्रम
>> लेकिन विशेष रूप से, इसके लिए मेरे शब्द लेना अपने मन थोड़ा और अधिक तुला लगता है
आज और आने वाले हफ्तों में.
यह तुम हो रही के प्रतिनिधि नहीं है किसी भी बदतर इस पर यह सिर्फ मतलब है कि
यह एक विशेष रूप से परिष्कृत विषय है मैं वादा करता हूँ कि, कुछ ही हफ्तों
इसलिए, बहुत ऊँची सभी लगेगा बीती बातों की जांच में सरल.
>> मैं अभी भी इस दिन को याद है.
मैं इलियट डाइनिंग हॉल में बैठा हुआ था, अगले मेरे TF निशात मेहता को बैठे
इलियट हाउस के एक निवासी जो था.
और किसी कारण के लिए, इस विषय बस क्लिक करता है.
मैं बहुत संघर्ष किया है कि जो कहना है समय के कुछ राशि के लिए यह, लेकिन मैं साथ
ऐसे किसी भी बचने में मदद करने के लिए अपनी पूरी कोशिश करूँगी एक विषय के साथ संघर्ष है कि अंततः
काफी शक्तिशाली है.
>> वास्तव में, विषयों में से एक है कि हम चर्चा करेंगे आने वाले सप्ताहों में है कि
सुरक्षा के लिए, और वास्तव में आप कैसे कर सकते हैं मायनों में मशीनों का दोहन
कि इरादा नहीं थे.
और उन शोषण आम तौर पर कर रहे हैं कीड़े, गलतियों कि का परिणाम हम
लोग कुछ समझ नहीं द्वारा बना अंतर्निहित कार्यान्वयन की
कार्यक्रमों बना रहे हैं, जिसका विवरण के माध्यम से.
>> अब यह सब अधिक उपयोगकर्ता लगती हैं अनुकूल, मुझे लगता है मैं एक 10 खेलने लगा
एक छोटी सी claymation की दूसरी पूर्वावलोकन करने के लिए लाया गया था, जो Binky नामित आंकड़ा
स्टैनफोर्ड में हमारा एक दोस्त द्वारा जीवन, प्रोफेसर निक Parlante.
तो मुझे तुम्हें यह देने के लिए अनुमति यहाँ Binky के चिढ़ाने.
>> [वीडियो प्लेबैक]
>> हे, Binky.
जागो.
यह सूचक मस्ती के लिए समय है.
>> क्या है?
संकेत के बारे में जानें?
ओह, भले.
>> [अंत वीडियो प्लेबैक]
>> डेविड मालन: कि स्टैनफोर्ड है कंप्यूटर विज्ञान.
तो उस पर और अधिक आने के लिए.
>> [वाहवाही]
>> डेविड मालन: माफ करना, निक.
>> इसलिए हम पर समाप्त हो गया है कि पिछली बार याद यह वास्तव में रोमांचक cliffhanger
जिससे इस समारोह बस काम नहीं किया.
कम से कम intuitively, यह महसूस किया जैसे यह काम करना चाहिए.
बस मानों गमागमन दो पूर्णांकों की.
लेकिन याद है कि हम बाहर मुद्रित जब मुख्य, एक और में मूल मान
, वे दो अभी भी एक थे और दो और नहीं दो और एक.
>> तो मुझे वास्तव में स्विच करें उपकरण के लिए खत्म हो.
और मैं में कंकाल कोड का एक सा ऊपर लिखा मुझे लगता है कि एक्स दावा जहाँ, यहाँ अग्रिम
1 हो जाएगा, वाई 2 होगा.
मैं तो दोनों को बाहर प्रिंट उनके छापा च के साथ मान.
>> मैं तो यहाँ नीचे का दावा है कि हम उन्हें स्वैप करने के लिए जा रहे हैं.
मैं करने के लिए यहाँ हमारे लिए एक खाली स्थान छोड़ दिया बस एक पल में आज भरिये.
फिर, मैं दावा करने के लिए जा रहा हूँ कि दो चर बदली की गई है.
फिर मैंने प्रिंट के लिए जा रहा हूँ उन्हें फिर से बाहर.
और तो उम्मीद है, मैं 1, 2 देखना चाहिए.
2, 1.
यही कारण है कि सुपर आसान है अब सही लक्ष्य.
>> तो कैसे हम गमागमन जाने के बारे में दो चर?
वैसे मैं यहाँ का प्रस्ताव है कि अगर इन कप एक कंप्यूटर में स्मृति का प्रतिनिधित्व हो सकता.
यह कुछ काटने, यह है एक और कुछ काटने है.
हम एक स्वयंसेवक ऊपर और पर आ सकता है परिचित हैं, तो हमें कुछ पेय मिश्रण?
ऊपर आओ.
तुम्हारा नाम क्या है?
>> जेस: जेस.
>> डेविड मालन: जेस?
ऊपर जेस चलो.
आप मन नहीं है, तो हम डाल दिया है गूगल ग्लास तुम तो हम कर सकते हैं पर
इस अमर.
ठीक है, गिलास.
एक वीडियो रिकॉर्ड.
और ठीक है, हम करने के लिए अच्छा कर रहे हैं यहाँ जेस के साथ चलते हैं.
ठीक है.
आपसे मिलकर अच्छा लगा.
>> तो क्या मैं तुम यहाँ क्या चाहते हैं - बहुत जल्दी, अगर तुम सकता है -
बस हमें नारंगी का आधा एक गिलास pours रस और दूध के आधा गिलास,
प्रभावी ढंग से संख्या का प्रतिनिधित्व 1 एक कप और अन्य कप में 2 में.
>> यह अच्छा फुटेज होने जा रहा है.
>> जेस: क्षमा करें.
>> डेविड मालन: नहीं, नहीं.
यह ठीक है.
नाइस.
ठीक है, तो हम चार बाइट्स है संतरे का रस के लायक.
हम मूल्य 1 यह कहा जाता हूँ.
दूध की अब एक और चार बाइट्स के लायक.
मूल्य 2 यह भेंट करेंगे.
तो क्रमशः एक्स और वाई.
>> ठीक है, तो अब अगर हाथ में काम - आप के लिए, जेस, सभी के सामने
अपने सहपाठियों की -
एक्स और वाई ऐसे के मूल्यों को स्वैप करने के लिए है हम में संतरे का रस चाहते हैं कि
अन्य कप और इस कप में दूध, कैसे आप हो सकता है - आप वास्तव में कर से पहले
यह - यह कर के बारे में जाने?
>> ठीक है, बुद्धिमान निर्णय.
तो आप थोड़ा और अधिक स्मृति की आवश्यकता है.
तो चलो एक अस्थायी आवंटित करते हैं कप, अगर तुम जाएगा.
और अब एक्स और वाई स्वैप करने के लिए आगे बढ़ें.
>> बहुत बढ़िया.
तो बहुत अच्छी तरह से किया.
इतना, जेस धन्यवाद.
यह लीजिए.
एक छोटी सी स्मारिका.
>> ठीक है, तो जाहिर है, सुपर आसान विचार है.
हम एक बिट की जरूरत है कि पूरी तरह से सहज ज्ञान युक्त भंडारण अंतरिक्ष अधिक - इस रूप में,
एक कप - हम वास्तव में करना चाहते हैं इन दो चर स्वैप.
तो चलो वास्तव में करते हैं.
यहाँ मैं मैं हूँ दावा जहां बीच में कुछ गमागमन कर रही हो जा, मैं हूँ
आगे बढ़ो और अस्थायी घोषणा.
और मैं एक्स, कहते हैं, के बराबर यह निर्धारित करेंगे.
>> तब मैं का मान बदलने के लिए जा रहा हूँ एक्स सिर्फ जेस के साथ यहां की तरह किया
दूध और संतरे का रस Y के बराबर हो.
और मैं बराबर होने Y बदलने के लिए जा रहा हूँ नहीं एक्स, अब हम होगा क्योंकि
एक चक्र में फंस गया, बल्कि अस्थायी.
मैं कहां से अस्थायी तौर पर - या जहां जेस अस्थायी रूप से संतरे का रस डाल
कि clobbering से पहले दूध के साथ कप.
>> इसलिए मुझे अब आगे बढ़ो और इस बनाते हैं.
यह noswap.c कहा जाता है.
और अब मुझे कोई स्वैप चलाते हैं.
मैं विस्तार और अगर वास्तव में मैं देख रहा हूँ खिड़की एक छोटा सा है, कि
एक्स 1 है, वाई 2 है.
और फिर एक्स वाई 1 है 2 है.
>> लेकिन सोमवार को याद है कि हम बातें किया एक छोटे से अलग जिससे मैं
बजाय एक सहायक समारोह, कार्यान्वित अगर तुम जाएगा, कि वास्तव में शून्य था.
मैं स्वैप यह कहा जाता है.
मैं यह दो मापदंडों दिया, और मैंने फोन उन्हें एक और मैं बी उन्हें बुलाया.
>> सच कहूँ तो, मुझे लगता है कि एक्स और वाई उन्हें कह सकते हैं.
रोक नहीं है ऐसा करने से मुझे.
लेकिन मैं यह तो है बहस होगी एक छोटे से अस्पष्ट.
क्योंकि सोमवार के लिए याद करते हैं कि हम इन मापदंडों दावा किया था कि
अंदर पारित कर दिया मूल्यों की प्रतियां
तो यह बस के साथ खराब करता है आपके अगर आप मन, मुझे लगता है,
वास्तव में एक ही चर.
>> इसलिए मैं बजाय एक उन्हें फोन करता हूँ और बी, बस स्पष्टता के लिए.
लेकिन हम उन्हें सबसे ज्यादा कह सकते हैं हम चाहते हैं कुछ भी.
और मैं कॉपी और पेस्ट करने के लिए जा रहा हूँ वहाँ से प्रभावी ढंग से इस कोड
यहाँ नीचे में.
मैं सिर्फ यह है कि निर्माण कार्य को देखा है.
इसलिए कि बहुत अच्छी हालत में है.
और मैं एक के लिए मेरे एक्स मेरे एक्स बदल देंगे एक के लिए, मेरे Y बी और मेरे Y ख के लिए.
>> तो दूसरे शब्दों में, ठीक उसी तर्क.
जेस किया था कि सटीक एक ही बात.
और मैं क्या करना है तो एक बात यहाँ, बेशक, इस आह्वान अब है
फ़ंक्शन, या इस समारोह को बुलाओ.
इसलिए मैं दोनों के साथ इस समारोह में भेंट करेंगे आदानों, एक्स और वाई, और बचाने के लिए मारा.
>> ठीक है, तो मौलिक एक ही बात.
वास्तव में, मैं शायद कार्यक्रम बनाया है द्वारा अनावश्यक रूप से जटिल
बस लेकर जा रहा है कि एक समारोह लिखने कोड के कुछ छह लाइनों जबकि मैं
पहले से लागू किया था सिर्फ तीन में इस.
>> इसलिए मुझे अब और रीमेक आगे चलते हैं यह कोई स्वैप करना.
ठीक है, मैं यहाँ खराब कर दिया है.
यह तुम हो सकता है कि कोई त्रुटि होना चाहिए के रूप में तेजी से आमतौर पर देखने के अपने
कार्यक्रमों और अधिक जटिल हो.
लेकिन एक आसान तय नहीं है.
मुझे यहाँ वापस स्क्रॉल करते हैं.
>> और मैं देख रहा हूँ पहली त्रुटि क्या है?
निहित घोषणा.
आम तौर पर क्या इंगित करता है?
ओह, मैं प्रोटोटाइप भूल गया.
मैं स्वैप कि संकलक को पढ़ाने के लिए भूल गया अस्तित्व के लिए जा रहा है, भले ही वह
बहुत शुरुआत में मौजूद नहीं है कार्यक्रम का.
तो मैं बस, शून्य, स्वैप कहने जा रहा हूँ INT, एक int बी, अर्धविराम.
>> इसलिए मैं यह reimplement करने के लिए नहीं जा रहा हूँ.
लेकिन अब यह नीचे यहाँ है क्या मेल खाता है.
और, सूचना अर्धविराम का अभाव यहाँ, जो आवश्यक नहीं है जब
लागू करने.
>> तो कोई स्वैप करना, मुझे इस रीमेक करते हैं.
बहुत बेहतर स्थिति.
कोई स्वैप चलाएँ.
और यह लानत.
हम सोमवार को कहाँ थे अब हम वापस आ गए हैं बात स्वैप नहीं किया है.
>> और सहज व्याख्या क्या है के लिए क्यों यह मामला है?
हाँ?
>> छात्र: [सुनाई].
>> डेविड मालन: बिल्कुल.
तो एक और बी एक्स और वाई की प्रतियां हैं.
और वास्तव में, किसी भी समय आप से किया गया है इस प्रकार अब तक एक समारोह बुला कि
ints की तरह चर गुजरता है -
स्वैप यहाँ उम्मीद है बस के रूप में -
तुम लोग प्रतियों में गुजर गया है.
>> अब जब कि यह एक छोटा सा लगता है इसका मतलब के लिए समय, एक दूसरे विभाजन के
एक से बिट्स कॉपी करने के लिए कंप्यूटर दूसरे के टुकड़े में चर.
लेकिन यह है कि इस तरह के एक बड़ा सौदा नहीं है.
लेकिन वे फिर भी एक प्रतिलिपि हो.
>> और इसलिए अब, स्वैप के संदर्भ में, मैं सफलतापूर्वक वास्तव में हूँ
ए और बी बदल रहा है.
वास्तव में, हम एक त्वरित करते हैं मानसिक स्वास्थ्य की जांच.
छापा च एक मैं, नई लाइन% है.
और हम एक में प्लग.
अब बिस्तर के साथ ही काम करते हैं.
और चलो यहाँ एक ही काम करते हैं.
>> और अब, मुझे उन्हीं लाइनों की नकल करते हैं फिर समारोह के तल पर
दिलचस्प के अपने तीन लाइनों के बाद मार डाला, और हो सकता था
अभी तक फिर से प्रिंट एक और बी.
तो अब कोई स्वैप करना है, चलो यह करते हैं.
मुझे टर्मिनल विंडो एक कर दूं हम देख सकते हैं कि ऐसा है, तो थोड़ा लम्बे
पर एक बार इसके बारे में अधिक.
>> और कोई स्वैप चलाते हैं.
एक्स 1 है, वाई 2 है. एक 1 है, बी 2 है.
और फिर, एक बी 1 है 2 है.
तो यह सिर्फ जेस की तरह काम कर रहा है स्वैप के अंदर यहां किया था.
लेकिन हां, यह कोई प्रभाव नहीं होने वाला है मुख्य में चर पर.
>> तो हम एक चाल देखा था जिससे हम ठीक है, यह तय कर सकता है?
आप इस scoping के साथ सामना कर रहे हैं जब मुद्दा है, तुम सिर्फ बाज़ी और एक्स बना सकता है
और Y के बजाय चर किस तरह का?
>> आप उन पर वैश्विक कर सकता है.
फाइल के ऊपर से ही उन्हें रखो हम भी 15 के खेल में, के रूप में किया.
हम एक वैश्विक चर का उपयोग करें.
लेकिन खेल एक 15 के संदर्भ में, यह एक वैश्विक है करने के लिए उचित है
बोर्ड का प्रतिनिधित्व चर, क्योंकि 15.c की सम्पूर्णता है सब
के बारे में कहा कि खेल को लागू करने.
वह फाइल करने के लिए मौजूद है.
>> लेकिन यहाँ इस मामले में, मैं कर रहा हूँ एक समारोह स्वैप बुला.
मैं दो चर स्वैप करना चाहता हूँ.
और यह सिर्फ मैला महसूस करना शुरू कर देना चाहिए अगर हमारे सभी के लिए समाधान
हम दायरे में चलाने की समस्याओं जब मुद्दों को वैश्विक बनाने है.
क्योंकि बहुत जल्दी से हमारे कार्यक्रम है काफी गड़बड़ बनने जा रहा.
और हम बहुत संयम से किया है कि 15.c. में एक परिणाम के रूप में
>> लेकिन यह एक वहाँ बाहर हो जाता है कुल मिलाकर बेहतर तरीका है.
मुझे वास्तव में वापस जाने के लिए और नष्ट करने दें बस इस कोड को आसान बनाने के लिए, च मुद्रित.
और मुझे का प्रस्ताव करते हैं कि यह वास्तव में बुरा है.
लेकिन मैं बजाय कुछ तारक में जोड़ते हैं और सितारे, मैं बजाय इस बारी कर सकते हैं
है कि एक समारोह में वास्तव में कार्य कर रही.
>> तो मुझे यहाँ वापस चलते हैं और कह मानता तारक, हमेशा मुश्किल होता है
इसलिए मैं सितारों कहूँगा.
मैं सिर्फ इतना है कि एक के ऊपर fess करेंगे.
ठीक है.
और अब, क्या मैं जा रहा हूँ बजाय करना है?
>> तो सब से पहले, मैं निर्दिष्ट करने के लिए जा रहा हूँ कि बजाय में एक int पारित की
स्वैप समारोह, मैं बजाय हूँ के INT सितारा कहने जा रहा.
अब, तारा क्या दर्शाती है?
यह एक सूचक की धारणा है कि है कि Binky, claymation चरित्र था,
पहले एक पल का जिक्र है.
>> तो हम int सितारा, का अर्थ कहते हैं यह अब एक नहीं किया जा रहा है कि है
इसकी कीमत द्वारा में पारित कर दिया.
यह अंदर नकल करने नहीं जा रहा है
बल्कि, एक का पता है अंदर पारित किया जा करने के लिए जा
>> इसलिए आपके कंप्यूटर के अंदर है कि याद स्मृति की एक पूरी गुच्छा अन्यथा, है
राम के रूप में जाना जाता है.
और कहा कि राम सिर्फ एक है बाइट्स की पूरी गुच्छा.
तो अपने मैक या अपने पीसी है अगर दो गीगाबाइट, आप 2
स्मृति की अरब बाइट्स.
>> अब चलो बस लगता है कि अभी तक अच्छा है और चीजें व्यवस्थित रखने हम
एक पते आवंटित -
एक नंबर -
आपके कंप्यूटर में राम के हर बाइट को.
उन 2 के पहले ही बाइट अरब संख्या शून्य से है.
अगले एक बाइट नंबर एक, नंबर है दो,, डॉट डॉट ऊपर पर सभी तरह
डॉट, लगभग 2 अरब डॉलर के लिए.
>> तो आप कर सकते हैं बाइट्स की संख्या आपके कंप्यूटर में स्मृति की.
तो चलो कि हम मानते हैं कि क्या हम एक पते से मतलब है.
मैं int सितारा एक देखते हैं जब तो, क्या हो रहा है अब स्वैप में पारित किया जाना है
एक का पता.
नहीं अपने मूल्य, लेकिन जो कुछ भी अपनी डाक पता है, तो बात है -
रैम में अपने स्थान.
>> और इसी प्रकार बी के लिए, मैं जा रहा हूँ एक ही बात कहना.
इंटरनैशनल, सितारा, बी.
एक तरफ, तकनीकी रूप से स्टार के रूप में अन्य स्थानों में जा सकते हैं.
लेकिन हम जा रहा है स्टार पर प्रमाण देंगे ठीक बगल में डेटा प्रकार के लिए.
>> तो स्वैप हस्ताक्षर अब मतलब है, मुझे दे एक पूर्णांक के पते, और कॉल
उस पते एक.
और मुझे एक का एक और पता दे int और उस पते बी कहते हैं.
>> लेकिन अब यहाँ अपने कोड बदलने के लिए है.
क्योंकि मैं int अस्थायी घोषणा -
प्रकार int के जो अभी भी -
लेकिन मैं यह एक में स्टोर, मूल्य किस तरह का?
स्पष्ट है, मैं के साथ एक एक डाल रहा हूँ सही अब लिखित रूप में कोड?
>> मैं एक का स्थान डाल रहा हूँ.
लेकिन मैं उसकी परवाह नहीं है स्थान अब, है ना?
अस्थायी बस जेस 'तीसरी कप मौजूद क्या प्रयोजन के लिए अस्तित्व?
एक मूल्य की दुकान.
दूध या संतरे का रस.
वास्तव में पता की दुकान नहीं एक का मानना ​​है जो उन चीजों के दोनों
यह असली में थोड़ा बेतुका दुनिया के संदर्भ वैसे भी.
>> तो सच में, क्या मैं अस्थायी में डाल करना चाहते हैं एक का पता नहीं है, लेकिन
एक की सामग्री.
एक 123 की तरह एक संख्या है, तो यह है स्मृति के 123 बाइट कि एक बस
, कब्जे में होना होता है कि मूल्य एक में कब्जे में होना होता है.
>> मैं उस पते पर जाना चाहते हैं, मैं सितारा एक कहने की जरूरत है.
इसी तरह, अगर मैं थे क्या बदलने के लिए पते में एक पर, मैं बदल
यह एक शुरुआत है.
मैं कम है क्या में स्टोर करना चाहते हैं स्थान पर है क्या साथ स्थान एक
ख में, सितारा बी स्टार.
>> तो संक्षेप में, यह है, भले ही काफी नहीं अभी तक में डूब - और मैं उम्मीद नहीं की होगी
यह इतनी तेजी से होता है कि -
मैं क्या कर रहा हूँ सभी prefixing है कि एहसास मेरे चर करने के लिए इन सितारों,
मानों हड़पने नहीं है कह रही.
मानों न बदलें.
बल्कि, उन पतों पर जाना और मूल्य मिलता है.
उस पते और परिवर्तन करने के लिए जाओ वहाँ मूल्य.
>> तो अब, मुझे ऊपर तक वापस स्क्रॉल अभी तक, यहां इस लाइन को ठीक करने के लिए
मैच के लिए प्रोटोटाइप बदल जाते हैं.
लेकिन अब मैं एक और बात करने की ज़रूरत है.
Intuitively, मैं प्रकार बदला है, तो तर्कों की है कि स्वैप, उम्मीद है
मैं करने के लिए और क्या चाहिए मेरे कोड में परिवर्तित करना है?
>> मैं स्वैप जब कॉल.
अभी, क्या कर रहा हूँ क्योंकि मैं अभी भी स्वैप करने के लिए पासिंग?
मूल्य एक्स और वाई के मूल्य, या दूध और संतरे का रस.
लेकिन मैं ऐसा नहीं करना चाहता.
मैं बजाय क्या में पारित करने के लिए करना चाहते हैं?
एक्स के स्थान और y के स्थान.
उनके डाक पते क्या हैं, इतनी बात करने के लिए.
>> तो यह है कि ऐसा करने के लिए, एक एम्परसेंड नहीं है.
एम्परसेंड तरह का पता तरह लगता है.
तो N, एम्परसेंड, पता एक्स की, और y का पता.
तो यह है कि हम इस्तेमाल जानबूझकर है एम्परसेंड्स समारोह बुला जब,
और सितारे की घोषणा कब और जब समारोह को लागू करने.
>> और बस के रूप में एम्परसेंड के बारे में सोच ऑपरेटर के पते, और के रूप में सितारा
वहाँ ऑपरेटर जाने -
या, और अधिक ठीक से, भिन्नता ऑपरेटर.
इसलिए कि शब्दों की एक पूरी बहुत अभी तक है अब, उम्मीद है, स्वैप जा रहा है का कहना है कि
सही हो.
>> मुझे आगे जाना है और कर दूं -
वास्तव में ऐसा न हो, फ़ाइल का नाम बदल देना इस कार्यक्रम अभी तक कोई स्वैप कहा जा.
मैं अब हम swap.c यह फोन करता हूँ कि दावा करते हैं.
तो, स्वैप करना.
डॉट, स्लैश, स्वैप.
>> और अब वास्तव में, एक्स 1 है, वाई 2 है.
और फिर, एक्स वाई एक है, 2 है.
खैर, हम इस एक ऐसा नहीं कर सकते, तो चलो देखते हैं थोड़ा थोड़ा अलग है के रूप में क्या
यहाँ पर जा रहा.
सबसे पहले, मुझे पर ज़ूम करते हैं हमारे यहाँ स्क्रीन ड्राइंग.
और मुझे एक पल के लिए प्रस्ताव हैं - और मैं यहाँ आकर्षित जब भी महसूस किया जाएगा
वहाँ अब - मुझे का प्रस्ताव करते हैं कि यहाँ स्मृति की एक पूरी गुच्छा है, या
राम, मेरे कंप्यूटर के अंदर.
>> और इस काटने नंबर होगा, के, 1 कहते हैं.
इस बाइट्स संख्या 2 हो जाएगा.
और मैं अधिक एक पूरी गुच्छा करते हैं, और हूँ डॉट डॉट डॉट्स की तो एक गुच्छा के लिए
2 अरब है कि वहाँ से संकेत मिलता है इन बातों की.
4, 5, और बहुत आगे है.
>> तो पहले पांच बाइट्स कर रहे हैं मेरे कंप्यूटर की स्मृति की.
सब ठीक है?
2 अरब से बाहर बहुत कम.
लेकिन अब मैं प्रस्ताव करने के लिए जा रहा हूँ निम्नलिखित.
मैं एक्स के लिए जा रहा है कि प्रस्ताव करने जा रहा हूँ नंबर 1 की दुकान, और y जा रहा है
2 नंबर स्टोर करने के लिए.
और मैं अब आगे चलते हैं और प्रतिनिधित्व करता है इन मूल्यों के रूप में निम्नानुसार.
>> के रूप में इस प्रकार यह करते हैं.
मुझे सिर्फ एक दूसरी दे.
एक दूसरा.
ठीक है.
मैं इस एक छोटे से करना चाहते हैं -
चलो फिर से यह करते हैं.
नहीं तो मैं करने जा रहा है और उपयोग कर रहा हूँ एक ही नंबर, अनजाने,
कई बार.
>> इसलिए अभी तो हम अलग नंबर हैं के बारे में बात करने के लिए है, चलो इस बाइट कहते हैं
संख्या 123, 124, 125, 126, और डॉट डॉट डॉट.
और मैं जा रहा हूँ कि मुझे अब दावा करते हैं यहां मूल्य 1 डाला, और मूल्य 2
यहाँ, अन्यथा एक्स और वाई के रूप में जाना जाता है.
तो यह सिर्फ इतना होता है कि इस x है, इस y है.
>> और अभी कुछ यादृच्छिक संयोग से, कंप्यूटर, ऑपरेटिंग सिस्टम,
स्थान पर एक्स डाल करने के लिए क्या हुआ संख्या 123.
और y स्थान 124 पर समाप्त हुआ -
अरे.
मैं यह तय हो जाना चाहिए था.
अरे यार, मैं वास्तव में ऐसा करना चाहते हैं?
हाँ, मैं इसे ठीक करना चाहते हैं और बी इस बारे में आज उचित.
क्षमा करें, इस पर नया.
>> 127, 131, और मैं यह हो नहीं करना चाहता था जटिल, लेकिन मैं क्यों बदल दिया
वहाँ संख्या?
मैं ints करना चाहते हैं वास्तव में चार बाइट्स हो.
तो चलो इस बारे में सुपर गुदा हो.
तो यह है कि 1 संबोधित होना होता है 123, 2 पते पर होने जा रहा है
यह सिर्फ 4 बाई दूर 127 है.
यही सब है.
और हम सब के बारे में भूल जाओगे दुनिया में अन्य पते.
>> तो एक्स, स्थान 123 पर है Y स्थान पर 127 है.
और अब, क्या मैं वास्तव में करना क्या करना चाहते हैं?
मैं अब स्वैप कहते हैं, क्या है वास्तव में चल रहा है?
मैं स्वैप कॉल करते हैं तो ठीक है, मैं में गुजर रहा हूँ एक्स और वाई के पते का पता.
तो उदाहरण के लिए, अगर इन दो टुकड़े कागज के अब दो का प्रतिनिधित्व
स्वैप करने के लिए तर्क ए और बी, क्या मैं कर रहा हूँ इनमें से पहले पर लिखने के लिए जा रहा है,
मैं एक के रूप में देखें कॉल करने के लिए जा रहा हूँ जो?
>> वास्तव में, 123.
तो यह मैं दावे एक है.
यह पैरामीटर एक है.
मैं वहाँ में एक्स के पते डाल रहा हूँ.
>> वह क्या है?
>> नहीं, नहीं.
यह ठीक है.
फिर भी अच्छा है, अभी भी अच्छा है.
तो यह एक है.
और अब कागज के दूसरे टुकड़े पर, इस ख होने जा रहा है, और क्या मैं कर रहा हूँ
पर लिख होने जा रहा इस कागज के टुकड़े?
127.
>> के बाद से बदल इतना है कि केवल एक चीज इस कहानी के हमारे पिछले कह, है
बल्कि सचमुच 1 और 2 से, मैं कर रहा हूँ 123 और 127 में पारित करने के लिए जा रहा है.
और मैं अब इन के अंदर डाला जा रहा हूँ इस बॉक्स की, ठीक है?
ब्लैक बॉक्स अब प्रतिनिधित्व करता है तो स्वैप समारोह.
>> इस बीच, चलो अब किसी को जाने स्वैप समारोह को लागू.
यहाँ किसी को होगा स्वयंसेवक के लिए पसंद है?
ऊपर आओ.
तुम्हारा नाम क्या है?
चार्ली.
सब ठीक है, चार्ली.
ऊपर आओ.
>> तो चार्ली खेलने के लिए जा रहा है हमारे ब्लैक बॉक्स की भूमिका.
और मुझे लगता है कि आप क्या करना चाहते हैं क्या चार्ली, अब ऐसे में स्वैप लागू किया जाता है
कि, उन दो पते दिए आप वास्तव में जा रहे थे
मूल्यों को बदलने की.
और मैं अपने कान में कानाफूसी करेंगे कैसे यहाँ टीवी चलाने के लिए.
>> तो आगे चलते हैं, और आप ब्लैक बॉक्स रहे हैं.
वहाँ तक पहुँचने में.
आप क्या मानों एक के लिए देखते हैं, और है क्या मानों आप बी के लिए देखते हैं?
>> चार्ली: एक 123 है और बी 127 है.
>> डेविड मालन: ठीक है, बिल्कुल.
अब बस एक पल के लिए वहाँ थामने.
तुम अब क्या करने जा रहे हैं, पहली बात, कोड के अनुसार - जो
मैं अब स्क्रीन पर खींच लेंगे -
एक छोटे से आवंटित करने के लिए होने जा रहा है स्मृति बुलाया अस्थायी का सा.
तो मैं आगे जाने के लिए जा रहा हूँ आपको लगता है कि याददाश्त दे.
>> तो यह एक तीसरा चर होने जा रहा है आप के लिए सुलभ है कि
आप अस्थायी बुलाया.
और क्या आप लिखने जा रहे हैं कागज के अस्थायी टुकड़े पर?
>> चार्ली: सूचक, सही?
>> डेविड मालन: ठीक है, अच्छी तरह से नहीं जरूरी संकेत दिए.
मैं उस कोड की तो लाइन दाहिने हाथ की ओर पर प्रकाश डाला,
चलो वहाँ शुरू करते हैं.
यह एक स्टार कहते हैं.
तो एक वर्तमान में जमा कर रहा है संख्या 123.
और बस intuitively, क्या सितारा 123 मतलब था?
>> लेकिन विशेष रूप से, अगर एक है 123, सितारा एक क्या मतलब है?
एक के लिए मूल्य.
या अधिक लापरवाही, वहाँ जाना.
तो मुझ में एक होल्डिंग, प्रस्ताव है कि चलो अपने हाथ, आगे बढ़ो और कहा कि इलाज
यह एक नक्शा है के रूप में यद्यपि.
और कंप्यूटर के लिए अपने आप पर चलना स्मृति, और है क्या हमें लगता है
स्थान 123 पर.
बिल्कुल सही.
>> इसलिए हम स्थान 123 में देखना क्या जाहिर है, है ना?
ठीक है, तो अब क्या मूल्य है आप कर रहे हैं अस्थायी में डाल दिया जा रहा है?
बिल्कुल सही.
तो आगे चलते हैं और ऐसा करते हो.
और के टुकड़े पर नंबर 1 लिखना फिलहाल अस्थायी शीर्षक है कि कागज.
>> और अब अगले कदम है कि आप को लागू करने के लिए जा रहे हैं
क्या होने जा रहा है.
खैर, के दाहिने हाथ की ओर कोड की अगली पंक्ति सितारा ख है. बी, की
बेशक, एक पते संग्रहीत करता है.
यही कारण है कि 127 के पते.
स्टार बी लापरवाही से क्या, बोलने का मतलब है?
>> उस स्थान पर जाएँ.
तो आगे जाकर क्या हमें लगता है स्थान पर 127.
ठीक है.
बेशक, स्थान पर 127, अभी भी मान 2 है.
तो आप की दुकान पर अब क्या जा रहे हैं जो कुछ भी एक में स्थान पर है?
तो एक साधन स्थान एक पर जाने के स्टार.
स्थान एक क्या है?
>> बिल्कुल सही.
तो अब, आप बदलना चाहते हैं क्या उस स्थान पर है -
मुझे आगे जाना है और चलने देंगे रबड़ यहाँ हैं.
और अब ब्रश पर इसे वापस डाल दिया.
क्या नंबर आप लिखने जा रहे हैं अब कि खाली बॉक्स में?
>> बिल्कुल सही.
जाने - तो कोड की इस पंक्ति, स्पष्ट होना मुझे थामने क्या चार्ली कर रही है और
यहां का कहना है, क्या वह अभी कुछ किया है है स्थान 123 पर कि बॉक्स में लिखना
बी में पहले से था कि मूल्य.
और इसलिए हम अब वास्तव में क्रियान्वित किया है कोड के इस दूसरे लाइन.
>> अब दुर्भाग्य से, वहाँ अभी भी एक लाइन शेष.
अब सचमुच, अस्थायी में क्या है?
यह स्पष्ट रूप से नंबर एक है.
वह पता नहीं है.
यह की तरह, सिर्फ एक संख्या है सप्ताह में एक से एक चर.
>> और अब तुम सितारा बी का कहना है कि, जब साधन का है जो पते बी, के लिए जाना
यहां कोर्स.
तो एक बार तुम वहाँ हो -
मुझे आगे जाना है और वास्तव में है क्या मिटा देंगे वहाँ - और आप क्या कर रहे हैं
स्थान 127 में लिखने के लिए जा रहे हैं?
>> चार्ली: अस्थायी, एक है जो.
>> डेविड मालन: एक है जो अस्थायी,.
और क्या अंत में अस्थायी होता है?
ठीक है, हम वास्तव में नहीं पता है.
हम वास्तव में परवाह नहीं है.
हम एक समारोह क्रियान्वित किया है किसी भी समय इस प्रकार अब तक, आप किसी भी स्थानीय चर
वास्तव में स्थानीय हैं.
और वे गायब.
वे ऑपरेटिंग द्वारा reclaimed रहे प्रणाली अंततः.
>> अस्थायी अभी भी इतना है कि तथ्य मूल्य 1 की तरह मौलिक है
हमारे लिए शुष्क.
ठीक है, तो प्रशंसा का एक दौर हम चार्ली के लिए कर सकता है.
बहुत अच्छी तरह से किया.
>> ठीक है, तो क्या अधिक है इसका मतलब है कि हम क्या कर सकते हैं?
तो यह है कि हम किया गया है पता चला है कि कुछ सफेद झूठ बोल
कुछ समय के लिए.
दरअसल, यह एक स्ट्रिंग पता चला है कि इस समय के सभी, वास्तव में नहीं है एक
एसई प्रति वर्णों के अनुक्रम.
यह एक तरह से है कि intuitively है.
>> लेकिन तकनीकी रूप से बोल रहा हूँ, स्ट्रिंग है एक हम के अंदर घोषित कि डेटा प्रकार
दुनिया को आसान बनाने के लिए CS50 पुस्तकालय वर्ग के पहले कुछ हफ्तों के लिए.
एक स्ट्रिंग वास्तव में पता क्या है कहीं राम में एक चरित्र की.
एक स्ट्रिंग 123 की तरह, वास्तव में एक संख्या है या 127, कि हदबंदी के लिए होता है
एक स्ट्रिंग में शुरू होता है, जहां आपके कंप्यूटर की मेमोरी.
>> लेकिन यह प्रतिनिधित्व नहीं करता है स्ट्रिंग, दर असल, में ही.
और हम के रूप में यह देख सकते हैं.
मुझे आगे जाना है और खोल दो. बीच में है कि कुछ कोड
आज के स्रोत कोड उदाहरण.
और मुझे आगे जाना है और खोलने के लिए जा रहा हूँ ऊपर, तुलना-0.c, हम कहते हैं.
यह जा रहा है कि एक छोटी गाड़ी कार्यक्रम है इस प्रकार के रूप में कार्यान्वित किया जाएगा.
>> पहले.
मैं कुछ कहने जा रहा हूँ.
तब मैं आगे जाने के लिए जा रहा हूँ उपयोगकर्ता से एक तार मिल
कि अगली पंक्ति में.
तो मैं इसे फिर से कहने जा रहा हूँ.
तो मैं एक और प्राप्त करने के लिए जा रहा हूँ उपयोगकर्ता से स्ट्रिंग.
>> और नोटिस, मैं से एक दिखा रहा हूँ एक चर में तार कहा जाता है, और
इन तारों में से एक और एक चर बुलाया टी में.
और अब मैं दावा करने के लिए जा रहा हूँ बहुत एस के बराबर होती है अगर यथोचित, टी के बराबर होती है कि
तार वही कर रहे हैं.
आप एक ही बात लिखें.
वरना, तार कर रहे हैं एक ही बात नहीं.
>> आखिरकार, अगर हम इनपुट दो ints, दो घर का काम, दो मंगाई, दो युगल के किसी भी
हम के बारे में बात की है डेटा प्रकार इस प्रकार अब तक उनकी तुलना करने के लिए -
हम थोड़ी देर पहले बहुत स्पष्ट कर दिया याद यदि आप ऐसा नहीं करते हैं, क्योंकि एक
एक बराबर चिह्न जरूर है असाइनमेंट ऑपरेटर.
तो यह है कि एक बग होगा.
>> हम बराबर बराबर के चिह्न का उपयोग वास्तव में जो तुलना
सच समानता के लिए चीजें.
लेकिन मैं इस छोटी गाड़ी का दावा है.
मुझे आगे जाना है और शून्य की तुलना करते हैं, और फिर डॉट स्लेश शून्य की तुलना करते हैं.
और मैं में टाइप करें, नमस्कार, हम कहते हैं.
और फिर चलो फिर से नमस्कार कहते हैं.
वस्तुतः एक ही बात, कंप्यूटर मैं अलग तरह की चीजें टाइप किया दावा किया है.
>> अब शायद मैं अभी कुछ गलत टाइप.
मैं अपना नाम इस समय प्रकार करेंगे.
मैं नमस्कार, मेरा मतलब है.
नमस्कार.
यह हर बार अलग है.
>> खैर, ऐसा क्यों है?
क्या वास्तव में हो रहा है हुड के नीचे?
खैर, क्या वास्तव में नीचे चल रहा है हुड स्ट्रिंग है तो
मैं उदाहरण के लिए है कि पहली बार में टाइप किए गए शब्द बेशक, नमस्कार है.
लेकिन हम यह नीचे का प्रतिनिधित्व करते हैं हुड, याद है कि एक
स्ट्रिंग एक सरणी में है.
और हम अतीत में ज्यादा के रूप में कहा है.
>> मैं इस तरह से है कि सरणी आकर्षित तो, अगर मैं कर रहा हूँ काफी कुछ का प्रतिनिधित्व करने के लिए जा रहा
हम एक क्षण पहले किया था क्या करने के लिए इसी तरह की.
और वास्तव में कुछ नहीं है विशेष यहां भी.
हम क्या निर्धारित किया गया था पर हर स्ट्रिंग के अंत?
जो हाँ, यह बैकस्लैश शून्य, का प्रतिनिधित्व करने का अभी जिस तरह से,
सचमुच, 00000000.
एक पंक्ति में आठ 0 बिट्स.
>> मैं स्पष्ट रूप से पता नहीं है, इस के बाद क्या है.
वह सिर्फ एक गुच्छा अधिक रैम है अपने कंप्यूटर के अंदर.
लेकिन यह एक सरणी है.
हम पहले सरणियों के बारे में बात की थी.
और हम आम तौर पर सरणियों के बारे में बात , स्थान शून्य होने के रूप में
फिर एक, फिर दो.
लेकिन वह सिर्फ सुविधा के लिए है.
और वह पूरी तरह से रिश्तेदार है.
>> आप वास्तव में से स्मृति हो रही है जब कंप्यूटर, यह किसी भी पाठ्यक्रम की है
2 अरब कुछ अजीब बाइट्स, संभवतः.
तो सच में हुड के नीचे, यह सब समय, हाँ.
यह बहुत अच्छी तरह से ब्रैकेट शून्य हो सकता है.
लेकिन आप नीचे भी गहरी खुदाई डाकू, जो वास्तव में है
संख्या 123 को संबोधित.
इस पते 124 है.
इस पते 125 है.
>> और मैं इस बार पेंच नहीं था.
ये अब एक बाइट हैं अलग किस कारण से?
एक चार कितना बड़ा है?
एक चार सिर्फ एक बाइट है.
एक पूर्णांक आम तौर पर चार बाइट्स है.
मैं इसे 123 कर दिया तो यही कारण है कि, है 127, 131 और बहुत आगे है.
अब मैं सरल गणित रख सकते हैं और अभी करना प्लस 1.
और यह अब वास्तव में क्या हो रहा है हुड के नीचे पर.
>> तो अगर आप कुछ इस तरह की घोषणा करते हैं, स्ट्रिंग है, यह वास्तव में है -
यह पता चला है -
चार सितारा.
स्टार, ज़ाहिर है, साधन पता, उर्फ ​​सूचक.
तो यह कुछ का पता है.
इसके बारे में पता क्या है?
>> खैर -
मैं बहुत देख सकते हैं जो केवल एक हूँ महत्वपूर्ण बात मैं कर रही है, या आपको लगता हूँ
मैं कर रहा हूँ.
तो स्ट्रिंग -
दुखद बात यह है कि मैं एक मॉनिटर है अभी भी वहीं है, जहां मैं
कि देखा जा सकता था.
>> ठीक है, तो स्ट्रिंग की है क्या मैं पहले से घोषित कर दिया.
लेकिन यह एक छोटा करने के लिए धन्यवाद पता चला है CS50 पुस्तकालय में जादू है, यह सब
समय स्ट्रिंग शाब्दिक है चार सितारा किया गया.
सितारा फिर से मतलब है सूचक या पता.
यह flanking है कि तथ्य शब्द चार यह है इसका मतलब
एक चरित्र का पता.
>> तो अगर मिल स्ट्रिंग कहा जाता है, और मैं प्रकार है एच ई एल एल ओ में, क्या मिल गया है अब प्रस्ताव
स्ट्रिंग शाब्दिक के सभी लौट गया इस समय, हम नहीं बल्कि करने के बावजूद
दुनिया oversimplified?
वास्तव में स्ट्रिंग प्राप्त करता है क्या अपनी वापसी के मूल्य के रूप में वापसी?
>> इस मामले में 123, उदाहरण के लिए.
हम पहले कहा है कि मिल स्ट्रिंग बस एक स्ट्रिंग, के एक दृश्य देता है
अक्षर.
लेकिन यह एक सफेद झूठ का एक सा है.
मिल स्ट्रिंग वास्तव में काम करता है तरीका हुड के नीचे यह हो जाता है एक
उपयोगकर्ता से स्ट्रिंग.
यह वर्ण plops कि वह या वह प्रकार स्मृति में.
यह अंत में एक बैकस्लैश शून्य डालता पात्रों के उन अनुक्रम की.
>> लेकिन तब क्या स्ट्रिंग प्राप्त करता है सचमुच वापसी?
यह सचमुच का पता देता है राम में बहुत पहले बाइट्स कि
यह है कि ताकत के लिए इस्तेमाल किया.
और यह पता चला है कि बस के लौटने से की एक एकल पता
स्ट्रिंग में पहले वर्ण, कि है सम्पूर्णता की खोज के लिए पर्याप्त
स्ट्रिंग.
>> दूसरे शब्दों में, स्ट्रिंग नहीं है मिल 123 और 124 और 125 लौटने के लिए.
यह मेरे लिए एक लंबा देने के लिए नहीं है बाइट्स के सभी की सूची है कि
मेरे स्ट्रिंग उपयोग कर रहा है.
एक, वे वापस वापस लिए सभी कर रहे हैं.
पहला पते पर आधारित हैं और दो, मैं स्ट्रिंग समाप्त होता है जहां से समझ सकते हैं.
कैसे?
>> विशेष अशक्त चरित्र, अंत में शून्य बैकस्लैश.
दूसरे शब्दों में, तो अगर आप लोगों के पास -
चर के अंदर -
एक चार का पता, और आप मान कि किसी भी स्ट्रिंग के अंत में, किसी भी
अक्षरों के अनुक्रम हम मनुष्य के रूप में आप मानते हैं कि अगर तार के बारे में सोच
ऐसे किसी स्ट्रिंग के अंत में वहाँ एक बैकस्लैश शून्य, आप सोने की हो.
आप हमेशा पा सकते हैं क्योंकि एक स्ट्रिंग के अंत.
>> अब क्या वास्तव में तब हो रहा है इस कार्यक्रम में पर?
क्यों इस कार्यक्रम है, तुलना-0.c, छोटी गाड़ी?
क्या वास्तव में तुलना की जा रही है?
हाँ?
>> छात्र: [सुनाई].
>> डेविड मालन: बिल्कुल.
यह स्थानों की तुलना है तार की.
तो उपयोगकर्ता एक बार नमस्कार में टाइप किया गया है, मैंने किया था, के रूप में स्मृति खत्म हो सकता है
इस तरह देख रहे हैं.
तो प्रकार फिर से नमस्कार में उपयोगकर्ता, लेकिन फिर से मिल स्ट्रिंग को फोन करके, ग
आप को पढ़ाने के लिए जब तक विशेष रूप से चतुर नहीं यह कोड लिखने के द्वारा चालाक हो.
>> सी -
और अधिक आम तौर पर कंप्यूटर -
आप फिर शब्द नमस्कार में लिखते हैं, तो क्या आप करने जा रहे हैं क्या पता है.
तुम बस एक दूसरे सरणी पाने के लिए जा रहे हैं , हां, होना होता है कि स्मृति की
इसके आगे एच ई एल एल ओ भंडारण और.
>> यह करने के लिए एक ही लग रहा है हमें मनुष्यों, लेकिन इस पते
123 नहीं हो सकता है.
यह सिर्फ इतना है कि हो सकता है ऑपरेटिंग सिस्टम कुछ उपलब्ध है
स्थान पर उदाहरण के लिए अंतरिक्ष -
, के मनमाने ढंग से कुछ कहना हैं जैसे इस स्थान 200 है.
और इस स्थान 201 है.
और इस स्थान 202 है.
हम जानते हैं कि जहां पता नहीं है स्मृति में होने जा रहा.
>> लेकिन क्या इसका मतलब यह है कि क्या है एस में अंततः भंडारित किया जा रहा?
संख्या 123.
क्या टी में संग्रहित किया जा रहा है, इस मनमाना उदाहरण में?
संख्या 200.
और फिर इसका मतलब है कि सभी, जाहिर है 123 200 के समान नहीं है.
और इसलिए अगर यह हालत कभी नहीं सही मूल्यांकन.
मिल स्ट्रिंग अलग उपयोग कर रहा है क्योंकि स्मृति की मात्रा हर समय.
>> अब हम फिर से यह देख सकते हैं एक अन्य उदाहरण में.
मुझे आगे जाना है और कॉपी 0.c खोल दें.
मैं इस उदाहरण के लिए जा रहा है कि दावा कोशिश - लेकिन असफल - दो तार कॉपी करने के लिए
इस प्रकार है.
>> मैं कुछ कहने जा रहा हूँ उपयोगकर्ता के लिए.
मैं तो जा रहा हूँ एक स्ट्रिंग और इसे कहते है.
और अब, मैं यहाँ यह चेक कर रहा हूँ.
हम कुछ समय पहले यह उल्लेख किया है.
लेकिन जब, स्ट्रिंग वापसी अशक्त हो सकती है एक और विशेष चरित्र, या विशेष
प्रतीक का कहना हैं.
यह स्मृति से बाहर है तो.
>> उदाहरण के लिए, उपयोगकर्ता सच है अगर एक नृशंस मुश्किल और प्रकार किया जा रहा है
पर पात्रों की संख्या कीबोर्ड और हिट दर्ज करें.
वर्णों की संख्या अभी नहीं कर सकते हैं जो कुछ पागल के लिए रैम में फिट
कारण, अच्छी तरह स्ट्रिंग सकते हैं पाने के बहुत अच्छी तरह से अशक्त वापसी.
>> या अपने कार्यक्रम अपने आप में एक बहुत कुछ कर रही है, तो अन्य बातों के और अभी वहाँ की
मिल स्ट्रिंग के लिए पर्याप्त नहीं स्मृति सफल होने के लिए, यह खत्म हो सकता है
ऊपर अशक्त लौटने.
लेकिन अधिक सटीक हो जाने यह क्या करने के रूप में.
एस के डेटा प्रकार वास्तव में क्या है?
चार सितारा.
>> तो यह अब हम छील कर सकते हैं पता चला है अशक्त की परत वापस.
हाँ, जाहिर है - शून्य है, बाहर वर्षगांठ एक विशेष प्रतीक.
लेकिन यह वास्तव में क्या है?
वास्तव में, अशक्त सिर्फ एक प्रतीक है कि हम मनुष्य के रूप में अच्छी तरह से शून्य का प्रतिनिधित्व करने के लिए उपयोग करें.
>> तो सी के लेखकों, और कंप्यूटर अधिक आम तौर पर, साल पहले का फैसला
कि, तुम्हें पता है क्या.
क्यों हम यह सुनिश्चित नहीं है कि उपयोगकर्ता नहीं डेटा कभी, कभी, कभी है
अलविदा शून्य पर संग्रहीत?
वास्तव में, यहां तक ​​कि मेरे मनमाना उदाहरण में इससे पहले, मैं नंबर शुरू नहीं किया
शून्य पर बाइट्स.
मैं एक पर शुरू कर दिया.
मैं जानता था कि ऐसा इसलिए है क्योंकि दुनिया में लोग शून्य आरक्षित करने का फैसला किया है
किसी के भी राम के रूप में बाइट कुछ खास.
>> कारण जा रहा है, किसी भी समय आप चाहते हैं कुछ गलत हो गया है कि संकेत
पतों के संबंध में, आप लौटे अशक्त - अन्यथा शून्य के रूप में जाना जाता है -
और आप कोई पता है कि वहाँ क्योंकि पते शून्य पर कानूनी डेटा, स्पष्ट रूप से
एक त्रुटि का मतलब है.
हम कन्वेंशन द्वारा, जाँच और यही कारण है अशक्त और बदले में कुछ के लिए
उन मामलों में से एक की तरह.
>> हम अब नीचे स्क्रॉल तो, अगर यह बस है तो कुछ त्रुटि जाँच, सिर्फ मामले में
कुछ [साथ गलत हो गया? जमानत?]
कुल मिलाकर तथा प्रोग्राम से बाहर जल्दी लौटने से.
यह लाइन अब फिर से लिखा जा सकता है इस रूप में, जो क्या मतलब है?
बाएं हाथ की ओर, मुझे एक और दे एक चरित्र के लिए सूचक, और टी कहते हैं.
क्या मैं आधारित, टी के अंदर भंडारण हूँ कोड के इस एक लाइन पर?
>> मैं एक स्थान भंडारण कर रहा हूँ.
विशेष रूप से स्थान कि एस में था.
उपयोगकर्ता नमस्कार में, और लिखा है तो अगर कि पहले नमस्ते समाप्त करने के लिए होता है
यहाँ है, तो संख्या 123 है मिल से वापस आने के लिए जा रहा
स्ट्रिंग और संग्रहीत किया जा -
हम पहले कहा -
एस में.
>> मैं अब तक एक और सूचक घोषित एक चार और टी इसे कहते हैं, क्या संख्या है
सचमुच में खत्म हो जा टी कहानी के अनुसार?
तो 123.
>> तो तकनीकी रूप से अब दोनों और टी सटीक की ओर इशारा कर रहे हैं
स्मृति का एक ही हिस्सा.
तो मैं करने के लिए अब क्या करने जा रहा हूँ नोटिस इस कार्यक्रम में छोटी गाड़ी है कि साबित होते हैं.
>> साथ पहले मैं दावा करने के लिए जा रहा हूँ capitalizing एक प्रिंट च,
स्ट्रिंग की प्रतिलिपि.
तो मैं एक छोटे से क्या करने जा रहा हूँ जाँच त्रुटि.
मुझे यकीन है कि बनाने के लिए जा रहा हूँ.
स्ट्रिंग टी में है कि सुनिश्चित कर देना लंबाई में शून्य से अधिक कम से कम,
इतना कुछ चरित्र वहाँ वहाँ वास्तव में भुनाने के लिए.
>> और फिर आप यह याद हो सकता है पिछले उदाहरण से.
2 ऊपरी - में है जो ctype.h फ़ाइल.
टी ब्रैकेट शून्य मुझे शून्य देता है स्ट्रिंग टी के चरित्र.
और है कि एक ही मूल्य के 2 ऊपरी, बेशक, यह अपरकेस धर्मान्तरित.
>> तो intuitively, इस लाइन पर प्रकाश डाला कोड के पहले capitalizing है
टी में पत्र.
लेकिन यह intuitively, capitalizing नहीं है एस में पहले अक्षर.
आप आगे की सोच रहे हैं लेकिन, क्या मैं कर रहा हूँ मैं इस कार्यक्रम को चलाने देखने के लिए जब के बारे में
और, मूल दोनों बाहर प्रिंट एस, और तथाकथित प्रतिलिपि, टी?
>> वे वास्तव में एक ही होने जा रहे हैं.
और यही कारण है कि वे एक ही होने जा रहे हैं?
वे दोनों की ओर इशारा कर रहे हैं बिल्कुल वही बात.
तो चलो यह करते हैं.
>> नकल शून्य बनाओ.
यह ठीक compiles.
मुझे प्रतिलिपि शून्य चलाते हैं.
मुझ में नमस्ते की तरह कुछ टाइप करते सभी लोअरकेस तो हिट दर्ज करें.
और यह दावा है कि मूल के दोनों और प्रतिलिपि वास्तव में समान हैं.
>> तो क्या वास्तव में यहाँ क्या हुआ?
मुझे इस तस्वीर redraw चलो बस एक में कहानी बताने के लिए
अलग तरह से.
क्या वास्तव में नीचे चल रहा है मैं ऐसा कुछ घोषित हुड जब
चार है शुरू, या स्ट्रिंग है, मैं एक सूचक हो रही है -
चार बाइट्स होना होता है CS50 उपकरण में
और कंप्यूटर के एक बहुत में.
और मैं यह कॉल करने के लिए जा रहा हूँ.
और यह वर्तमान में है किसी अज्ञात मूल्य.
>> आप एक चर घोषित करते हैं, तो आप जब तक अपने आप को, वहाँ एक मान रखा है जो
वहाँ क्या जानता है.
यह कुछ यादृच्छिक अनुक्रम का हो सकता है पिछले निष्पादन से बिट्स.
मैं कोड की अपनी लाइन में मिलता है तो जब स्ट्रिंग, और फिर वापसी की दुकान
किसी भी तरह प्राप्त स्ट्रिंग में मूल्य -
और हम अंत में मिलता है कैसे वापस छील देंगे स्ट्रिंग काम करता है, किसी न किसी तरह एक का आवंटन
शायद लग रहा है कि सरणी इस तरह एक सा है.
एच ई एल एल ओ, बैकस्लैश शून्य.
>> चलो यह पता है कि लगता हैं 123 सिर्फ पहली स्थिरता.
इतने में, स्ट्रिंग रिटर्न मिलता है वहाँ लाइन पर प्रकाश डाला, यह रिटर्न
संख्या हम, 123 कहा.
तो क्या वास्तव में यहाँ के अंदर चला जाता है?
>> खैर, क्या वास्तव में चला जाता है एस के अंदर 123 है.
लेकिन सच कहूँ तो, मैं एक छोटे से हो रही है इन पतों के सभी से उलझन में,
इन मनमाना संख्या के सभी.
123, 124, 127.
तो चलो वास्तव में आसान बनाने में करते हैं दुनिया एक छोटा सा.
>> हम स्पष्ट रूप से, संकेत के बारे में बात करते हैं, करने के लिए बिल्ली जहां कौन परवाह करता है हमें मनुष्यों,
चीजें स्मृति में हैं?
यही कारण है कि पूरी तरह से मनमाना है.
यह इस पर निर्भर करने के लिए कैसे हो रहा है ज्यादा रैम उपयोगकर्ता है.
यह दिन में जब इस पर निर्भर हो रहा है आप शायद, कार्यक्रम चलाने के लिए, और
उपयोगकर्ता आपको देता है क्या इनपुट.
हम महत्वहीन विवरण पर निवास कर रहे हैं.
>> तो चलो सार दूर करते हैं और कहते हैं कि, आप इस तरह से कोड की एक लाइन से चलाने, जब
चार सितारा वापसी हो जाता है मिल स्ट्रिंग के लिए मूल्य.
क्यों हम बजाय सिर्फ आकर्षित नहीं करते क्या हम यह है के रूप में हालांकि एक सूचक बुला रखना
कुछ तरफ इशारा करते हुए?
इसलिए मुझे लगता है कि अब दावे एक सूचक है -
हुड के नीचे यह एक पता है.
लेकिन यह सिर्फ करने के लिए इशारा कर रहा है में पहली बाइट
लौटा दिया गया है कि स्ट्रिंग.
>> मैं अब, यहाँ कोड पर लौटने हैं क्या इस लाइन पर चल रहा है?
खैर, इस में, अब रेखा पर प्रकाश डाला मैं जाहिरा तौर पर एक और घोषणा कर रहा हूँ
चर टी कहा जाता है.
लेकिन यह भी एक सूचक है, तो मैं जा रहा हूँ सटीक, सिद्धांत रूप में, के रूप में आकर्षित करने के लिए
एक ही आकार बॉक्स.
और मैं यह कॉल करने के लिए जा रहा हूँ.
>> और अब हम फिर से वापस कोड के लिए जाना अगर मैं टी के अंदर स्टोर करते हैं,
क्या मैं तकनीकी रूप से कर रहा हूँ टी के अंदर डाल?
वैसे तकनीकी तौर पर, इस संख्या 123 थी.
इसलिए वास्तव में मैं लेखन किया जाना चाहिए वहाँ संख्या 123.
लेकिन यह उच्च स्तर पर ले जाने.
टी, यह सिर्फ एक सूचक है, intuitively, कि बस है.
यही जा रहा है कि सब है वहाँ में संग्रहीत.
>> तो अब आखिरी दिलचस्प लाइनों में कोड की, मैं वास्तव में जाने के बारे में जब
शून्य चरित्र capitalizing टी में, क्या हो रहा है?
खैर, टी ब्रैकेट शून्य अब इशारा कर रहा है करने के लिए क्या चरित्र, शायद?
>> यह ज की ओर इशारा करते है.
टी ब्रैकेट शून्य क्योंकि -
याद, इस पुराने सिंटैक्स है. टी ब्रैकेट टी एक स्ट्रिंग, टी है अगर शून्य बस का मतलब
ब्रैकेट शून्य शून्य हो रही है उस शक्ति में चरित्र.
तो क्या हुआ कि वास्तव में मतलब इस सरणी के लिए जाना जाता है -
और हाँ, यह 123 हो सकता है, इस 124 हो सकता है.
लेकिन यह याद रखना, सब रिश्तेदार है.
एक सरणी के बारे में बात कर देता है तो हम हैं के बारे में बात करने का लाभ
रिश्तेदार सूचकांक.
>> और इसलिए अब हम सिर्फ कल्पना कर सकते हैं कि टी ब्रैकेट शून्य ज रहा है.
मैं उस पर ऊपरी 2 कॉल करते हैं तो, क्या है सच में कर रहा capitalizing है
एच. अपरकेस लोअरकेस घंटे लेकिन हां, एस क्या है?
यह वही रफ़ू स्ट्रिंग की ओर इशारा करते है.
>> तो यह हो रहा है कि सब है अब तक इस कोड में.
तो क्या फिर निहितार्थ है?
हम कैसे इन दो समस्याओं को ठीक करते हैं?
कैसे हम वास्तविक तार करने के लिए तुलना?
>> खैर intuitively, कैसे होगा आप दोनों की तुलना के बारे में जाना
सच समानता के लिए तार?
>> इसका क्या मतलब है अगर दो तार बराबर हैं?
जाहिर है नहीं, उनके पते हैं कि कि एक कम है, क्योंकि स्मृति में बराबर
स्तर कार्यान्वयन विस्तार.
सभी अक्षर ही हैं.
तो मुझे का प्रस्ताव करते हैं, और मुझे परिचय compare.c के संस्करण में
यहाँ, तो तुलना-1.c.
>> मुझे हम अभी भी मिलता है कि प्रस्ताव चलो एक इसमें यह कहा जाता है सूचक, और दुकान
मिल स्ट्रिंग के मूल्य वापसी.
टी के साथ ही काम करते हैं.
तो कोड में से कोई भी अलग है.
मैं एक छोटे से जोड़ने के लिए जा रहा हूँ अब जाँच अधिक त्रुटि.
हम की तरह वापस छीलने रहे हैं तो अब है कि क्या एक स्ट्रिंग की CS50 में इस परतें
वास्तव में है, हम और अधिक गुदा होने की जरूरत यकीन है कि हम गाली नहीं है बनाने के बारे में
अशक्त तरह अवैध मान.
>> तो मैं बस की जाँच करने के लिए जा रहा हूँ.
एस बराबर नहीं अशक्त करता है और टी नहीं करता है बराबर अशक्त, कि हम ठीक कर रहे हैं इसका मतलब है.
तार हो रही बिगाड़ नहीं किया हो जाओ या तो उन तार की.
और तुम शायद, अब अनुमान लगा सकते हैं क्या एसटीआर सीएमपी संभवतः क्या करता है?
स्ट्रिंग तुलना.
>> तो इससे पहले कि आप जावा में कार्यक्रम कर चुके हैं, इस में बराबरी विधि की तरह है
स्ट्रिंग वर्ग.
लेकिन नहीं है जो आप उन लोगों के लिए पहले क्रमादेशित,
यह सिर्फ एक सी समारोह है.
यह एक में आने के लिए होता है फ़ाइल string.h कहा जाता है.
यह घोषित किया है कि जहां.
>> और स्ट्रिंग तुलना -
मैं वास्तव में इसके उपयोग को भूल जाते हैं, लेकिन कोई बात नहीं.
हम क्या कर सकते हैं कि याद आदमी, तुलना हलचल.
और यह ऊपर लाने के लिए जा रहा है लिनक्स प्रोग्रामर पुस्तिका.
और यह स्पष्ट है, एक छोटे से गुप्त है.
लेकिन मैं यहाँ हां, यह देख सकते हैं.
मैं string.h शामिल करने के लिए है.
>> और यह ", विवरण के तहत यहाँ कहते हैं स्ट्रिंग तुलना समारोह तुलना
दो तार S1 और S2. "और S1 और S2 जाहिरा तौर पर दो हैं
अंदर पारित किया तर्कों
मैं सच में याद नहीं है क्या const है, लेकिन अब सूचना -
और आप जब पहले से ही यह देखा है हो सकता है तुम आदमी पृष्ठों का उपयोग किया है आप अगर
यह सब किया है -
कि चार सितारा बस पर्याय बन गया है तार के साथ.
>> तो यह दो स्ट्रिंग्स तुलना S1 और S2, और यह कम एक पूर्णांक देता है
या इसके बराबर या शून्य से अधिक से अधिक S1 पाया जाता है, तो क्रमश: होने के लिए
कम से कम, या मैच, या S2 से अधिक होना.
कह रही है कि सिर्फ एक बहुत ही जटिल तरीका है कि स्ट्रिंग रिटर्न की तुलना
शून्य दो अगर तार intuitively हैं के लिए समान, चरित्र
चरित्र के लिए चरित्र.
>> यह एक नकारात्मक संख्या अगर रिटर्न एस, वर्णानुक्रम में, माना जाता है
टी से पहले आने के लिए.
या एक सकारात्मक संख्या अगर रिटर्न एस टी के बाद आने वाली है
वर्णानुक्रम.
तो इस सादे समारोह के साथ, कर सकते थे तुम, उदाहरण के लिए, एक प्रकार
शब्दों की पूरी गुच्छा?
>> तो इस नए संस्करण में, मैं जा रहा हूँ आगे बढ़ो और compare1 बनाने के लिए.
डॉट एक तुलना स्लेश.
मैं सब कम मामले में नमस्कार में टाइप करेंगे.
मैं नमस्कार में टाइप करने के लिए जा रहा हूँ फिर सभी लोअरकेस में.
और शुक्र है अब यह एहसास मैं एक ही बात टाइप.
>> इस बीच, मैं कम में नमस्कार में लिखते हैं ऊपरी मामले में मामले और नमस्ते और
उनकी तुलना, मैं टाइप किया अलग अलग चीजें हैं.
क्योंकि न केवल पते हैं अलग, लेकिन हम तुलना कर रहे हैं
विभिन्न पात्रों बार बार.
>> खैर चलो चलते हैं और एक तय अब दूसरी समस्या.
मुझे संस्करण एक से खोल दो. अब नकल, जो पतों
इस प्रकार के रूप में इस मुद्दे को.
और यह एक लग रहा है एक छोटे से अधिक जटिल.
लेकिन आपको क्या समस्या के बारे में अगर आपको लगता है कि हम उम्मीद है कि यह हो जाएगा, हल करने की जरूरत
अब बस एक पल में साफ है.
>> तो यह पहली पंक्ति में, टी आरंभ वर्ण आम आदमी की दृष्टि किसी प्रस्ताव कर सकता है
क्या यह लाइन यहाँ मतलब है?
चार सितारा टी, कर रही है कि क्या है?
>> अच्छा.
कुछ करने के लिए एक सूचक बनाएँ स्मृति में हाजिर.
और मुझे यह एक छोटा सा को परिष्कृत करते हैं.
दुकान होगी कि एक चर घोषित स्मृति में कुछ चार का पता, बस
एक छोटे से अधिक उचित हो.
>> ठीक है, तो अब दाहिने हाथ की ओर, मैं इन कार्यों में से एक कभी नहीं देखा
इससे पहले, malloc.
लेकिन यह है कि क्या मतलब हो सकता है?
स्मृति का आवंटन.
मेमोरी आवंटन.
>> तो यह अब तक पता चला है, हम वास्तव में एक शक्तिशाली रास्ते से नहीं पड़ा है
ऑपरेटिंग सिस्टम पूछ, मुझे कुछ स्मृति दे.
बल्कि, हम अब कहा जाता है एक समारोह है ठीक है कि करता है कि malloc.
यह एक का एक सा है हालांकि व्याकुलता अब ठीक है, में है कि नोटिस
दो कोष्ठकों के बीच सिर्फ एक संख्या होने जा रहा.
मैं प्रश्न में टाइप किया है कहां निशान एक नंबर हो सकता है.
>> और उस नंबर का मतलब है, मुझे 10 बाइट्स दे.
मुझे 20 बाइट्स दे.
मुझे 100 बाइट दे.
और malloc करने के लिए अपनी पूरी कोशिश करूँगी ऑपरेटिंग सिस्टम से पूछते हैं -
लिनक्स, इस मामले में -
अरे, उनके 100 बाइट्स हैं उपलब्ध रैम की?
यदि ऐसा है, ने मुझे उन बाइट्स लौटने जिनमें से पता लौटने
शायद उन बाइट्स,?
बहुत पहले एक.
>> तो यहाँ भी है - और यह प्रमुख है सी में, आप कर रहे हैं किसी भी समय
पते के साथ काम?
आप लगभग हमेशा के साथ काम कर रहे हैं पहले इस तरह के पते, चाहे कितना बड़ा
आप जा रहे हैं स्मृति का एक हिस्सा इतनी बात करने के लिए, वापस सौंप दिया.
>> तो चलो यहाँ में गोता करते हैं.
मैं आवंटित करने के लिए कोशिश कर रहा हूँ कैसे कई बाइट्स, ठीक?
खैर.
एस की स्ट्रिंग लंबाई - चलो एक ठोस उदाहरण है.
एस नमस्कार है, तो एच ई एल एल ओ, क्या है एस के स्ट्रिंग की लंबाई, जाहिर है?
तो यह पांच है.
लेकिन मैं क्यों, उस पर एक प्लस 1 कर रहा हूँ?
क्यों मैं छह बाइट्स चाहते हैं पांच के बजाय?
अशक्त चरित्र.
>> मैं इस बंद को छोड़ने के लिए नहीं करना चाहती विशेष अशक्त चरित्र.
क्योंकि मैं नमस्कार की एक प्रतिलिपि बनाने और अगर बस एच ई एल एल ओ करते हैं, लेकिन मैं मत डालो
कि विशेष चरित्र, कंप्यूटर मौका, एक बैकस्लैश से, नहीं हो सकता है
मेरे लिए वहाँ शून्य.
और इसलिए मैं यह पता लगाने की कोशिश कर रहा हूँ अगर नकल की लंबाई, मुझे लगता है कि हो सकता है कि
यह 20 वर्ण लंबा है, या एक लाख मैं ऐसा कभी नहीं अगर वर्ण लंबा
एक बैकस्लैश शून्य हिट करने के लिए.
>> इसलिए हम स्टोर करने के लिए छह बाइट्स की जरूरत एच ई एल एल ओ, बैकस्लैश शून्य.
और फिर यह सिर्फ है सुपर गुदा हो.
मैं भूल मान लीजिए कि क्या एक चार का आकार है.
हम इसे एक बाइट कह रखना.
और यह आमतौर पर है.
सिद्धांत रूप में, यह कुछ हो सकता है एक अलग मैक पर, अलग या एक
विभिन्न पीसी.
>> तो यह इस ऑपरेटर वहाँ पता चला है sizeof कहा जाता है कि आप इसे पारित अगर
एक डेटा प्रकार का नाम - तरह चार, या INT, या नाव -
यह गतिशील, कितने, आपको बता देगा एक चार इस पर लेता बाइट्स
विशेष कंप्यूटर.
>> तो यह प्रभावी ढंग से बस है कह टाइम्स 1 या पसंद
समय पर सब कुछ नहीं.
लेकिन मैं सुपर गुदा होने के लिए सिर्फ यह कर रहा हूँ, कि सिर्फ एक चार अलग मामले में
अपने कंप्यूटर पर मेरा बनाम, इस तरह गणित हमेशा की जाँच करने जा रहा है.
>> अन्त में, यहाँ मैं बातिल के लिए जाँच, जो हमेशा अच्छा अभ्यास है - फिर,
हम संकेत के साथ काम कर रहे हैं किसी भी समय.
Malloc देने के लिए सक्षम नहीं था मुझे छह बाइ - जो है
संभावना नहीं है, लेकिन सिर्फ मामले में -
तुरंत एक वापसी.
और अब, आगे बढ़ो और कॉपी इस प्रकार के रूप स्ट्रिंग.
और इस परिचित वाक्य रचना है, एक अलग भूमिका में यद्यपि.
>> मुझे आगे जाना है और स्ट्रिंग प्राप्त करने के लिए जा रहा हूँ एस की लंबाई और यह एन में दुकान.
मैं तो मैं बराबर होती से पुनरावृति करने के लिए जा रहा हूँ को और एन सहित शून्य,
अधिक से अधिक या बराबर है.
तो यह है कि प्रत्येक यात्रा पर, मैं डाल ith में एस के ith चरित्र
टी के चरित्र.
>> तो क्या वास्तव में नीचे चल रहा है यहाँ हुड?
वैसे यह अगर, उदाहरण के लिए, एस -
और मैं शब्द एच ई एल एल ओ में टाइप किया है और एक बैकस्लैश शून्य नहीं है.
और फिर, यह है ओर इशारा करते हुए यहां है.
और यहाँ अब टी है.
>> और यह अब तक इशारा कर रहा है स्मृति की एक प्रति, है ना?
Malloc मुझे एक पूरी दिया गया है स्मृति का हिस्सा.
मैं क्या शुरू में पता नहीं है इन स्थानों में से किसी में.
तो मैं के रूप में इन के बारे में सोच करने के लिए जा रहा हूँ प्रश्न चिह्न की एक पूरी गुच्छा.
>> लेकिन जैसे ही मैं शुरू के रूप में शून्य से पाशन एस, टी की लंबाई के माध्यम से ऊपर की ओर
ब्रैकेट शून्य और टी ब्रैकेट 1 -
और अब मैं इस डाल देता हूँ ओवरहेड पर -
टी ब्रैकेट शून्य और एस ब्रैकेट शून्य मतलब मैं नकल करने जा रहा हूँ कि
यहां iteratively एच, ई एल एल ओ. साथ ही, मैं प्लस किया क्योंकि
1, शून्य बैकस्लैश.
>> तो अब की तुलना-1.c के मामले में, अंत में, मैं बाहर प्रिंट अगर
टी का पूंजीकरण, हम चाहिए कि अपरिवर्तित है देखते हैं.
मुझे अब आगे बढ़ो और यह करते हैं.
तो copy1 बनाते हैं.
डॉट copy1 स्लेश.
मैं दर्ज, नमस्कार में टाइप करने के लिए जा रहा हूँ.
और अब, केवल प्रतिलिपि नोटिस पूंजीकृत किया गया है.
मैं सच है क्योंकि दो स्मृति का हिस्सा है.
>> दुर्भाग्य से, आप कुछ सुंदर कर सकते हैं यहाँ बुरा और बहुत खतरनाक चीजें.
मुझे अब यहाँ एक उदाहरण ऊपर खींच चलो, कि हमें कुछ का एक उदाहरण देता है
विभिन्न लाइनों.
तो बस intuitively यहाँ, पहली पंक्ति कोड की, INT सितारा एक्स, की घोषणा की है
एक चर एक्स कहा जाता है.
और डेटा प्रकार क्या है कि चर का?
कि चर का डेटा प्रकार क्या है?
यही cliffhanger नहीं था.
>> डेटा प्रकार int सितारा है.
तो इसका क्या मतलब है? एक्स इच्छा एक पूर्णांक के पते की दुकान.
इतना ही आसान.
वाई स्टोर करने के लिए जा रहा है एक पूर्णांक का पता.
तीसरी पंक्ति क्या है कोड की वहाँ क्या कर?
यह आवंटन है कि कितने बाइट्स, सबसे अधिक संभावना है?
चार.
क्योंकि एक पूर्णांक के आकार के है आम तौर पर चार, चार की malloc देता है
मुझे का एक हिस्सा का पता बैक स्मृति, जिसका बाइट्स है की पहले
एक्स में अब संग्रहीत.
>> अब हम जल्दी से एक छोटे से आगे बढ़ रहे हैं.
स्टार एक्स का मतलब क्या?
यह उस पते पर जाने का मतलब और वहाँ क्या नंबर डाल दिया?
वहाँ 42 नंबर डाल दिया.
स्टार Y साधन Y में क्या करने के लिए जाना और वहाँ 13 नंबर डाल दिया.
>> लेकिन एक मिनट रुको.
पल में y में क्या है?
Y भंडारण क्या पता है?
हम सही, पता नहीं?
हम एक बार कार्यभार का प्रयोग कभी नहीं किया है Y शामिल ऑपरेटर.
की दूसरी लाइन पर घोषित रूप में तो y कोड सिर्फ कुछ कचरा मूल्य, एक बड़ा है
प्रश्न चिह्न तो बात करो.
यह बेतरतीब ढंग से इशारा करते हुए किया जा सकता है स्मृति, में कुछ भी करने के लिए जो
आम तौर पर खराब है.
>> इसलिए जैसे ही हम वहाँ कि लाइन मारा, सितारा वाई, 13, बुरा कुछ के बराबर होती है
बहुत बुरा कुछ के बारे में है Binky होने के लिए.
तो चलो समाप्त करने के लिए क्या हो रहा है देखते हैं इस मिनट में यहाँ Binky के लिए हो रहा
या तो देखो.
>> [वीडियो प्लेबैक]
>> हे, Binky.
जागो.
यह सूचक मस्ती के लिए समय है.
>> क्या है?
संकेत के बारे में जानें?
ओह, भले.
>> खैर, शुरू करने के लिए, मुझे लगता है हम कर रहे हैं लगता है एक जोड़े के संकेत की जरूरत जा.
>> ठीक है.
इस कोड को दो संकेत का आवंटन पूर्णांकों को इंगित कर सकते हैं.
>> ठीक है, ठीक है, मैं दो संकेत देखते हैं.
लेकिन वे ऐसा नहीं लगता है कुछ की ओर इशारा करते.
>> -यह सही है.
प्रारंभ में, संकेत नहीं करते कुछ भी करने के लिए बिंदु.
वे करने के लिए बात बातें कहा जाता है pointees, और उन्हें स्थापित करने के लिए एक है
अलग कदम.
>> ओह, ठीक है, ठीक है.
मुझे पता था.
pointees अलग हैं.
तो आप कैसे एक pointee आवंटित करते हैं?
>> ठीक है.
खैर, इस कोड को एक नया पूर्णांकों का आवंटन pointee, और इस हिस्से सेट X
यह करने के लिए बात करने के लिए.
>> हे, कि बेहतर लग रहा है.
तो यह कुछ कर रही है.
>> ठीक है.
मैं सूचक एक्स स्टोर करने के लिए करेंगे भिन्नता इसके pointee में 42 नंबर.
इस चाल के लिए, मैं अपने जादू की आवश्यकता होगी dereferencing की छड़ी.
>> आपका dereferencing की जादू की छड़ी?
उह, वह बहुत अच्छा है.
>> -इस कोड की तरह दिखता है.
मैं सिर्फ संख्या की स्थापना की, और हूँ -
>> -अरे, देखो.
वहाँ यह जाता है.
तो एक्स पर एक भिन्नता इस प्रकार कर इसके pointee का उपयोग करने के लिए तीर.
इस मामले में, वहाँ में 42 स्टोर करने के लिए.
अरे, नंबर स्टोर करने के लिए उपयोग करने की कोशिश अन्य सूचक, वाई के माध्यम से 13.
>> ठीक है.
मैं बस y के लिए यहाँ पर जा सकते हैं और करेंगे 13 नंबर से तैयार हो जाओ.
और फिर छड़ी के ले dereferencing और बस -
वाह!
>> अरे, ओह.
यह काम नहीं किया.
कहते हैं, Binky, मुझे नहीं लगता है Y dereferencing एक अच्छा विचार है,
pointee स्थापित करने की वजह से एक अलग कदम है.
और मुझे लगता है कि हम कभी भी यह किया है नहीं लगता है.
>> हम्म.
अच्छी बात है.
>> हाँ, हम सूचक Y आवंटित.
लेकिन हम यह करने के लिए सेट नहीं एक pointee को इंगित करें.
>> हम्म.
बहुत चौकस.
>> हे, आप देख रहे हैं वहाँ अच्छा, Binky.
आप यह तय कर सकते हैं ताकि Y अंक एक्स के रूप में एक ही pointee करने के लिए?
>> ज़रूर.
मैं अपनी जादुई छड़ी का इस्तेमाल करेंगे सूचक असाइनमेंट.
>> एक होने जा रहा है कि है पहले की तरह समस्या?
>> नहीं.
इस pointees स्पर्श नहीं करता है.
यह सिर्फ बात करने के लिए एक सूचक परिवर्तन एक और रूप में एक ही बात करने के लिए.
>> ओह, मैं देख रहा हूँ.
अब एक्स के रूप में एक ही जगह पर Y अंक.
तो इंतजार.
अब Y तय हो गई है.
यह एक pointee है.
तो तुम छड़ी की कोशिश कर सकते हैं फिर dereferencing की
13 से अधिक भेजने के लिए.
>> ठीक है.
यहाँ जाता है.
>> हे, कि देखो.
अब y पर काम करता है dereferencing.
और संकेत साझा कर रहे हैं, क्योंकि कि एक pointee, वे
13 देखते दोनों.
>> हाँ.
साझा करना.
जो भी हो.
तो क्या अब हम स्विच स्थानों पर जा रहे हैं?
>> ओह, देखो.
हम समय से बाहर रहे हैं.
>> लेकिन -
>> बस तीन याद सूचक नियम.
नंबर एक, बुनियादी संरचना आप एक सूचक है.
और यह एक pointee करने से अधिक अंक.
लेकिन सूचक और pointee अलग हैं.
और आम त्रुटि है एक सूचक की स्थापना की है, लेकिन करने के लिए
एक pointee दिया भूल जाते हैं.
>> नंबर दो, सूचक dereferencing शुरू होता है सूचक पर है और इस प्रकार अपने
इसके pointee का उपयोग करने के लिए ऊपर तीर.
हम सभी जानते हैं, यह केवल अगर वहाँ काम करता है करने के लिए वापस हो जाता है जो एक pointee है
नंबर एक नियम.
>> तीन नंबर, सूचक असाइनमेंट लेता है एक सूचक और इसे करने के लिए बात करने के लिए परिवर्तन
एक और संकेत के रूप में एक ही pointee.
इसलिए काम के बाद, दो संकेत होगा
एक ही pointee को इंगित करें.
कभी कभी लगता है कि साझा करने का आह्वान किया है.
और कहा कि वास्तव में, यह सब वहाँ है.
अब अलविदा.
>> [अंत वीडियो प्लेबैक]
>> डेविड मालन: तो अधिक संकेत पर, अगले सप्ताह Binky पर अधिक.
हम सोमवार को आप देखेंगे.