2012-05-24 8 views
18

आप 10 तत्वों के साथ एक बहुत ही सरल सरणी घोषित करने और इसे उस तरह से उपयोग कर सकते हैं:सी ++ में किसी सरणी के लिए अधिकतम आयामों की अनुमति क्या है?

int myArray[10]; 
myArray[4] = 3; 
std::cout << myArray[4]; 

या int myArray[30][50][70];

साथ int myArray[10][100];

भी बनाने और अधिक जटिल 3-डी सरणियों के रूप में 10x100 तत्वों के साथ एक 2d सरणी की घोषणा

मैं भी लेखन के रूप में जहाँ तक जा सकते हैं:

int complexArray[4][10][8][11][20][3]; 
complexArray[3][9][5][10][15][3] = 5; 
std::cout << complexArray[3][9][5][10][15][3]; 

तो, सरणी घोषित करते समय आप कितने आयामों का उपयोग कर सकते हैं?

+16

यह स्पष्ट रूप से है। –

+6

वास्तव में, आपके दूसरे उदाहरण में इसमें एक बफर ओवररन है। ओह। – Puppy

+7

क्यों कुछ नब डाउनवोट? यह बुरा या गलत सवाल नहीं है। – Puppy

उत्तर

27

मानक कम से कम 256 (आईएसओ 14882, B.2) स्वीकार करने के लिए कार्यान्वयन की सिफारिश की है, लेकिन वे समर्थन कर सकते हैं कम या अधिक:

सीमा मात्रा है कि नीचे या दूसरों वर्णित शामिल विवश कर सकते हैं । प्रत्येक मात्रा के बाद ब्रैकेट किए गए नंबर को उस मात्रा के लिए न्यूनतम के रूप में अनुशंसित किया जाता है। हालांकि, ये मात्रा केवल दिशानिर्देश हैं और अनुपालन निर्धारित नहीं करते हैं।

[...]

- सूचक, सरणी, और समारोह declarators (किसी भी संयोजन में) एक गणित, संरचना, संघ, या अधूरा एक घोषणा [256] में प्रकार संशोधित।

यह सी ++ 03 और सी ++ 11 दोनों में समान है।

-3

सरणी लिखते समय आपके पास एकमात्र सीमा है जो आपके कंप्यूटर की स्मृति क्षमता है।

+3

गलत - यह वास्तव में एक सीमा नहीं है। वर्चुअल मेमोरी और पेजिंग के लिए धन्यवाद, एक प्रक्रिया वास्तव में सिस्टम की भौतिक स्मृति (धीरे-धीरे हालांकि) की तुलना में अधिक डेटा को संबोधित कर सकती है। दूसरी तरफ, स्मृति विखंडन के कारण सबसे बड़ी सरणी आवंटित की जा सकती है, इसकी पता स्थान की तुलना में काफी छोटी हो सकती है। –

4

मेरी पहली पोस्ट!

इसके लायक होने के लिए, मेरे सिस्टम की सीमा केवल 30 आयाम है जब स्थिर रूप से आवंटित और स्टैक पर आवंटित किए जाने पर 1 9 आयाम आवंटित किए जाते हैं। सिस्टम एएमडी ए 10-7700 के, 64-बिट (8 जीबी रैम) है। डिफ़ॉल्ट सेटिंग्स के साथ विजुअल सी ++ 2013 पर संकलित।

ध्यान दें कि आपके सिस्टम पर अधिकतम निर्धारित करने के लिए, सबसे छोटे डेटा प्रकार (char) का उपयोग सबसे छोटे आयाम आकार (2) के साथ करें। 1 की आयाम (किसी भी आयाम में) के आयाम के बाद आयाम 1 है जब कोई सीमा नहीं है और सरणी के समग्र आकार को प्रभावित नहीं करता है। इसका कारण यह है कि डेटा प्रकार जितना बड़ा होगा या आयाम का आकार बड़ा होगा, उतना कम आयाम आपके पास हो सकता है। हालांकि, मैंने पाया है कि कोई भी (और केवल एक) आयाम 3 हो सकता है, लेकिन 4.

#include<iostream> 
int main() 
{ 
    char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok 
    char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail! 
    static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok 
    static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail! 

} 
+1

1 का आयाम अनावश्यक नहीं है, क्योंकि 'टी' और' टी [1] 'में अलग-अलग अर्थशास्त्र हैं। – Hurkyl

+0

अर्थशास्त्र भिन्न है लेकिन स्मृति खपत नहीं है। लेकिन क्या 1 के आयाम के लिए कोई व्यावहारिक उपयोग है? –