2015-11-05 11 views
5

कोड स्निपेट के बाद:संदर्भ जो कहीं भी संदर्भ नहीं देता है?

int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 
int(&row)[4] = ia[1]; 

enter image description here

मैं चारों ओर क्यों इस विशेष कोड मान्य है मेरे सिर नहीं मिल सकता है। मेरी वर्तमान समझ के लिए मेरे पास तर्कसंगत स्पष्टीकरण नहीं है। क्या कोई मेरी मदद कर सकता है? मेरी समस्या &row के साथ है जो कहीं भी संदर्भ नहीं लगती है। मेरा एकमात्र स्पष्टीकरण यह है कि यह वैध होना चाहिए क्योंकि इसकी प्रारंभिकरण है।

.... हम एक सरणी चार ints

कौन सा सरणी के के लिए एक संदर्भ के रूप में पंक्ति को परिभाषित:

मैं अपनी पुस्तक से निम्नलिखित स्पष्टीकरण मिल गया है? जिसे हम शुरू करने वाले हैं?

उत्तर

13
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

3 तत्वों की एक सरणी है, प्रत्येक तत्व 4 इंट्स की एक सरणी है।

int(&row)[4] = ia[1]; 

यहाँ int(&row)[4] हिस्सा एक संदर्भ नामित पंक्ति है कि 4 ints की एक सरणी संदर्भित कर सकते हैं की घोषणा की। = ia[1] इसे ia सरणी में दूसरे तत्व का संदर्भ देने के लिए प्रारंभ करता है, जो कि 4 इंट्स की सरणी है।

+0

"यहां int (& row) [4] भाग पंक्ति नामक एक संदर्भ घोषित करता है जो 4 इंट्स की सरणी को संदर्भित कर सकता है।" - इसका मतलब है कि यह सिर्फ कर सकता है लेकिन यह नहीं करता है? या यह उस सरणी को इंगित करता है जो initalised हो रहा है? – HansMusterWhatElse

+1

@ किंगजुलियन यह कर सकता है और करता है, आप इसे संदर्भित करने के लिए ('= ia [1] 'भाग) को संदर्भित करते हैं (या यदि आप चाहते हैं तो इंगित करें, लेकिन शब्द" पॉइंट टू "आमतौर पर एक सूचक के साथ प्रयोग किया जाएगा, संदर्भ नहीं) 4 इंच की एक सरणी। शायद आपको उदाहरण के माध्यम से पढ़ना होगा [इस] (http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in)। – nos

6
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

के 3 सरणियों की एक सरणी है।

ia[0]{ 0, 1, 2, 3 } है।

ia[1]{ 4, 5, 6, 7 } है।

ia[2]{ 8, 9, 10, 11 } है।

मुझे समझ में नहीं आता कि आप क्यों कहते हैं कि हम "प्रारंभ करने के बारे में" होंगे - इस बिंदु पर, ia पूरी तरह से प्रारंभ किया गया है।

int(&row)[4] = ia[1]; 

Spiral rule (पहचानकर्ता के साथ शुरू ...):

row

... एक ...

(&row)

... संदर्भ ..

(&row)[4]

... चार की एक सरणी के लिए ...

int(&row)[4]

... int ...

= ia[1];

... ia[1] द्वारा प्रारंभ (क्योंकि आप एक संदर्भ, इसके चारों ओर कोई रास्ता नहीं प्रारंभ करने में है )।

तो row अब ia[1] का संदर्भ है, जो कि "की सरणी" है। यही सब है इसके लिए।

0

(& पंक्ति) [4] का अर्थ है कि यह 4 तत्वों की एक सरणी का संदर्भ दे सकता है और ia [1] 2 डी सरणी [] [] से एक पंक्ति है जिसमें 4 तत्व होते हैं, इसलिए यह ठीक काम करता है।

संबंधित मुद्दे