संभव डुप्लिकेट:
In C arrays why is this true? a[5] == 5[a]यह क्यों काम करता है? विसंगत सरणी पहुँच
मेरा एक दोस्त पहली बार के लिए C++ सीख रहा है, और मुझे इस टुकड़ा भेजा:
int foo[] = { 3, 38, 38, 0, 19, 21, 3, 11, 19, 42 };
char bar[] = " abcdefghijklmnopqrstuvwxyz-,.!?-_";
for (int i = 0; i < 10; ++i) {
std::cout << foo[i][bar];
}
एक पर नज़र, मैंने उससे कहा कि यह काम नहीं करेगा - मैंने सोचा कि यह संकलित नहीं होगा, या कम से कम एक उल्लंघन उल्लंघन का परिणाम होगा, क्योंकि foo
एक नहीं है द्वि-आयामी सरणी, जिसमें उन्होंने जवाब दिया कि यह करता है।
मैंने अपने लिए प्रयास किया, और मेरे आश्चर्य की बात है, स्निपेट पूरी तरह से ठीक चला गया। सवाल यह है: क्यों?
तर्क, सामान्य ज्ञान और अच्छी प्रथा के अनुसार, वाक्यविन्यास bar[foo[i]]
होना चाहिए।
मुझे यह स्वीकार करने में शर्म आती है कि मुझे नहीं पता कि क्या हो रहा है। इस मामले में foo[i][bar]
वैध वाक्यविन्यास क्या बनाता है?
यह एक सटीक डुप्लिकेट नहीं है, और उत्तर बहुत दिलचस्प है। दोनों प्रश्नों के लिए मूल कारण समान है, लेकिन यह StackOverflow पर सैकड़ों प्रश्नों के लिए सच है। –
बीटीडब्लू: मैं केवल आउटपुट के साथ सहमत हूं अगर मैं इस तरह की चीजें कर रहा हूं ... – stefaanv
अजीब बात यह है कि अगर कोई लिंक किए गए प्रश्न को पढ़ता है तो यह वास्तव में समझ में आता है, फिर भी जब भी आप ' टी समझ में नहीं आता; अजीब हिस्सा केवल "यह काम कैसे करता है" से बदलता है "उन्होंने यह काम क्यों किया"। –