Understanding arrays in Objective-C / C -
मैंने सिर्फ अपना पहला कदम आगे बढ़ाया
1)
रेखा = मूल [6] ; Forloop (i ... i ++) {मूल [i] = 7; } [बिल्ड एस्यूब्यूव्यू: मूल];
2)
रेखा प्रतिक्रिया [6]; - (आईडी) बिल्ड एस्यूब्यूव्यू: (लाइन []) मूल {* response = * origin; NSLog (@ "प्रतिक्रिया [1] =% ओ", प्रतिक्रिया [1]); NSLog (@ "मूल [1] =% ओ", मूल [1]); ........ .....}
मुझे मिल रहा आउटपुट है:
प्रतिक्रिया [1] = 0; & Lt; - मैं मूल मूल [1] = 7 के समान मूल्य की अपेक्षा करता हूं;
लेकिन अगर मैं सूचकांक 0 पर मान मुद्रित करने के लिए कहता हूं तो मुझे लगता है कि मैं क्या चाहता था:
प्रतिक्रिया [0] = 7; & Lt; - अब वे समान मूल हैं [0] = 7;
मैं पूछ रहा हूं कि दो अलग-अलग मूल्य क्यों हैं? और भी, अगर मैं लिखूं
प्रतिक्रिया = मूल;
मुझे एक असंगत असाइनमेंट संकलन त्रुटि मिलती है?
संक्षेप में, , सरणी के पहले तत्व को सूचक को सी "decays" में एक सरणी का नाम, और वह आपको परेशान कर रहा है।
जब आप लिखते हैं
प्रतिक्रिया = मूल; आरएचएस पर " मूल
नाम" decays "टाइप करें लाइन *
, और मूल
सरणी, जबकि प्रतिक्रिया प्रकार की है "सरणी [6] का रेखा"। चूंकि दो प्रकार संगत नहीं हैं (यह एक संकेतक के साथ एक सरणी को प्रारंभ करने का मतलब नहीं है), यह एक त्रुटि है। अब,
* response = *मूल;
सभी मेमोरी को मूल
से प्रतिक्रिया
कॉपी नहीं करता है। जैसा कि मैंने उपरोक्त वर्णित किया है, और ऊपर दिए गए लिंक में अधिक विवरण में, मूल
इस संदर्भ में मूल
सरणी के पहले तत्व को इंगित करता है, इसलिए * मूल वास्तव में सरणी का पहला तत्व है इसलिए, * प्रतिक्रिया = * मूल;
बस प्रतिक्रिया
के पहले तत्व के मूल
एरे के पहले तत्व का मान कॉपी करता है। चूंकि आपने प्रतिक्रिया [1]
के लिए कोई मान नहीं सौंपा है, इसमें कूड़ा होता है।
यदि आप सरणी डेटा की प्रतिलिपि बनाना चाहते हैं, तो आप एक पाश कर सकते हैं:
आकार_टी i; के लिए (i = 0; i & lt; 6; ++ i) प्रतिक्रिया [i] = मूल [i];
या, आप memcpy ()
:
memcpy (प्रतिक्रिया, उत्पत्ति, आकार की प्रतिक्रिया) का उपयोग कर सकते हैं;
(उपरोक्त सी के लिए है, उद्देश्य-सी में भिन्नता और आप जो करना चाहते हैं, उसके अन्य तरीके हो सकते हैं।)
Comments
Post a Comment