2013-10-20 10 views
8

मैं सी भाषा के लिए नया हूँ की संरचना है, तो मेरे सवाल का उच्च मानकों2 डी सरणी बनाम एक सरणी

हम

struct mat{ 

    int a[10]; 

};m[10]; 
बजाय

int mat[10][10]; 

क्या उपयोग कर सकते हैं को पूरा नहीं कर सकते हैं अंतर? और जो अधिक कुशल है?

+6

मुझे लगता है कि अंतर यहाँ क्या समझना आसान है: यहाँ एक संदर्भ है कि विवरण में सरणी आदेश के बारे में थोड़ा समझाने है। – Matthew

उत्तर

1

का उपयोग कर आप पर भरोसा करना चाहिए का उपयोग कर सकते

int mat[10][10]; 

उसके साथ संकलक। हालांकि, मैं आपके आवेदन के आधार पर अच्छी तरह से काम करने वाले 2 विकल्पों का सुझाव दे सकता हूं।

1) int [10] [10] का उपयोग करें, लेकिन सुनिश्चित करें कि आप उन्हें लूपिंग के दौरान उचित क्रम में एक्सेस करते हैं। संकलक "नीचे" बनाम

for(i = 0 ; i < 10 ; i++) { 
    for (j = 0 ; j < 10 ; j++) { 
     // do something with a[j][i] 
    } 
    } 

प्रदर्शन के मामले में अलग है का उपयोग करेगा आदेश

for(i = 0 ; i < 10 ; i++) { 
    for (j = 0 ; j < 10 ; j++) { 
     // do something with a[i][j] 
    } 
    } 

में एक सारिणी संरचना इतनी acessing। बाद में अधिक प्रदर्शनकारी है।

2) विकल्प 1 को अतिरिक्त देखभाल की आवश्यकता है और प्रतिद्वंद्वी है। मैं बहुत

int a[100] 

क्या करना पसंद करते हैं और

for(i = 0 ; i < 100 ; i++) 
     inline_function(a[i]); 

जहां समारोह इनलाइन घोषित किया जाना चाहिए करते हैं और बात क्या किया है करने के लिए है पहिले। यदि आप समारोह से बच सकते हैं, तो यह भी बेहतर है। उदाहरण के लिए, यदि यह योग है, तो 2 डी या वेक्टर होने से कुछ भी नहीं बदलता है।

संपादित करें: http://www.cplusplus.com/doc/tutorial/arrays/

2

आप जो m[x][y] तुलना में अधिक जटिल वाक्य रचना है, लेकिन कुछ भी नहीं कहते हैं lexically

1

सं यह एक struct जो एक सरणी शामिल है m[x].a[y] होगा।

struct mat 
{ 
    int a[10]; 
}; 

आप struct की एक सरणी को परिभाषित कर सकते हैं:

struct mat m[10]; 

एक कदम में यह करने के लिए:

struct mat{ 

    int a[10]; 

}m[10]; 

नोट आप मीटर से पहले एक अतिरिक्त अर्धविराम है [10] जो सही वाक्यविन्यास नहीं है।

आगमन में एक तत्व का उपयोग करने के लिए आपको m[i].a[j]

का उपयोग इस तरह एक 2d सरणी के लिए वाक्य रचना में बराबर नहीं है: जो आप mat[i][j]