2016-04-15 3 views
6

मैं सी मानक दस्तावेज़ों में विशेष रूप से नहीं ढूंढ पा रहा हूं, जहां यह कहता है कि बहुआयामी सरणी संगत हैं। हालांकि यह इस तथ्य से निहित किया जा सकता है कि सरणी तत्व संगत हैं, मैं समुदाय से कुछ परिप्रेक्ष्य चाहता हूं। 9.सी बहुआयामी सरणी छेद के बिना संगत हैं?

#include <stdio.h> 

int main() 
{ 
    int a[][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
    int* p = (int*)a; 
    int i; 

    for (i = 0; i < sizeof(a)/sizeof(int); i++) 
     printf("%d ",p[i]); 

    return 0; 
} 
+1

के बाद से बहुआयामी-सरणियों सरणियों के सरणियों कर रहे हैं, तत्व सन्निहित हैं (मुझे लगता है कि)। –

+1

वे बेहतर हो - यह एक बहुत ही आम मुहावरा के रूप में पाश के लिए नेस्ट का विरोध करने के लिए एक एकल के साथ 2-आयामी सरणी कार्रवाई करने के लिए है। अगर ऐसा नहीं होता तो ऐसा सभी कोड टूटा जाएगा। –

+0

एक 'सरणी [x] [y] 'प्रकार' z' पर कब्जा करने की गारंटी है (x * y * sizeof (z)) ** केवल **। ध्यान दें कि 'sizeof (जेड)' सभी मामलों प्रकार केवल के लिए आवश्यक बिट्स की अधिकतम राशि पर कब्जा करने की गारंटी में नहीं है - यह बड़ा हो सकता है और 'sizeof (चार)', उदाहरण के लिए, कुछ CPUs पर अधिक से अधिक 8 हो सकता है । – tofro

उत्तर

10

हाँ, यह प्रेरण द्वारा प्राप्त किया जा सकता है -

निम्नलिखित कोड आदेश है कि मैं उम्मीद होती है, जो 1 है में संख्या बाहर प्रिंट करता है। (बस एक सुझाव के रूप में, जोड़ने के लिए, कि अगर मदद करता है, सरणियों की सरणी के रूप में बहु-आयामी सरणी के बारे में सोच की कोशिश करो।)

उदाहरण के लिए, a[3][3] की तरह एक सरणी पर विचार करें।

  • तो, a[0][0], a[0][1] और a[0][2]a[0] के तत्व हैं और वे सन्निहित हो जाएगा।

  • इसके बाद, a[0] और a[1]a के तत्व हैं, तो यह सन्निहित

एक इतने पर किया जाएगा।

एक साथ लिया गया, a[0][2] और a[1][0] एक-दूसरे के बगल में रहेंगे, जिससे संयोग जारी रहेगा।

बेहतर दृश्य प्रतिनिधित्व के लिए, नीचे दिए गए चित्र देखें।

सरणी, का कहना है कि int arr[4][5], चार पंक्तियों, a[0], a[1], a[2] और a[3] है और वे सन्निहित हैं।

अब

उन पंक्तियों पाँच कॉलम, a[n][0], a[n][1], a[n][2], a[n][3], a[n][4] की तरह है और वे सन्निहित हैं में से प्रत्येक।

तो, सरणी के सभी तत्व (और तत्वों के तत्व) संगत हैं।

Multi-Dimensional Array, Image CR: IIT-KGP

+1

पुष्टि करने के लिए धन्यवाद। यह मेरा वही विचार था। – Bran

6

हाँ वे सन्निहित हैं। मैं कहूंगा कि तथ्य "एक सरणी" (यानी एकवचन) सम्मिलित है कि बहु-आयामी एक है। यह के भीतर प्रत्येक सरणी समीप होनी चाहिए और बाहरी सरणी उन सरणियों का एक सन्निहित संग्रह होना चाहिए ...

6

अनुसार 6.2.5 Types को p20:

एक सरणी प्रकार का एक साथ वस्तुओं की एक समीपवर्ती आवंटित अरिक्त समुच्च्य का वर्णन करता है विशिष्ट सदस्य ऑब्जेक्ट प्रकार, जिसे तत्व प्रकार कहा जाता है। सरणी प्रकार निर्दिष्ट होने पर तत्व प्रकार पूर्ण हो जाएगा। ...

इसलिए सभी सरणी प्रकार, बहुआयामी या नहीं, संगत रूप से आवंटित किए जाते हैं।

2

सी स्पष्ट रूप से बहु आयामी सरणी नहीं है, सी सरणियों के सरणी है, और सी में सरणियों समीपवर्ती स्मृति में प्रतिनिधित्व कर रहे हैं। इसलिए सी में सभी सरणी संगत हैं।

+0

@ जॉन कॉलेमैन क्षमा करें, मैं यह सुनिश्चित करना चाहता था कि नया कॉमर्स समझता है कि सी में बहु-आयामी सरणी नहीं हैं, इसमें सरणी की सरणी है। – fluter

+1

@fluter क्या "वास्तविक" बहुआयामी सरणी माना जाएगा? – Bran

+1

असल में सी मानक कई बार बहुआयामी सरणी का उल्लेख करता है, उदाहरण के लिए, अध्याय §6.7.6.2 में फुटनोट 142: * "जब कई '' सरणी 'सरणी निकट हैं, तो एक बहुआयामी सरणी घोषित की जाती है।" * – user694733

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