मेरे अवलोकन से, आप शायद नहीं जानते कि आप क्या चाहते हैं और संरचना और सूचक अंकगणित पर भ्रमित हैं। कृपया निम्नलिखित 2 संभावनाओं से गुज़रें।
1) प्रत्येक तत्व के साथ एक दो आयामी सरणी में test
पर पॉइंटर होता है। इस मामले में सभी पॉइंटर्स की स्मृति test
s पहले से ही स्थिर हैं आवंटित। लेकिन, वास्तविक test
एस की स्मृति तैयार नहीं है। इस मामले में आपको test [i][j]
एक-एक करके भरना होगा।
test
प्रत्येक स्मृति में अलग है और आपके पास अलग-अलग गतिशील रूप से उन्हें बनाने या नष्ट करने का लाभ है।
typedef struct {
int i;
} test;
test* t[20][20];
/* or instead of statically allocated the memory of all the pointers to tests
you can do the following to dynamically allocate the memory
test ***t;
t = (test***)malloc(sizeof(test *) * 20 * 20);
*/
for (int i=0; i < 20; i++){
for (int j=0; j < 20; j++){
t[i][j] = malloc(sizeof(test));
}
}
2) प्रत्येक तत्व के साथ एक दो आयामी सरणी एक test
है। इस मामले में सभी test
एस की स्मृति पहले से ही आवंटित है। इसके अलावा, वास्तविक test
एस की स्मृति अतिरिक्त तैयारी के बिना उपयोग करने के लिए तैयार हैं।
test
एस सभी बड़े ब्लॉक के रूप में स्मृति में निरंतर हैं और हमेशा वहां रहते हैं। इसका मतलब यह है कि यदि आप केवल कुछ test
एस को कुछ शीर्ष समय पर ही चाहते हैं तो आप स्मृति का एक हिस्सा बर्बाद कर सकते हैं और अधिकांश समय आप उनमें से कुछ का उपयोग करते हैं।
typedef struct {
int i;
} test;
test t[20][20];
/* or instead of statically allocated the memory of all tests
you can do the following to dynamically allocate the memory
test **t;
t = (test**)malloc(sizeof(test) * 20 * 20);
*/
आपको बहुत बहुत धन्यवाद! – Mortezaipo