मैं आकर्षित करने के लिए प्रयास करने के लिए जा रहा हूँ कैसे
int array[10][6];
और
int **array2 = new int *[10];
for (int i = 0; i < 10; ++i)
array2[i] = new int[6]
नज़र स्मृति में और कैसे वे अलग हैं (और है कि वे एक दूसरे से ढाला नहीं जा सकता की तरह)
array
लगता है:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| | | | | | | | | | | | | ..............| | | (10*6 elements of type int)
- - - - - - - - - - - - - - - - - - - - - -
< first row >< second row> ...
array2
लगता है:
_ _ _ _ _ _ _ _ _ _
| | | | | | | | | | | (10 elements of type int *)
- - - - - - - - - -
| | .... | _ _ _ _ _ _
| | \-->| | | | | | | (6 elements of type int)
| | - - - - - -
| |
| | _ _ _ _ _ _
| \ -->| | | | | | | (6 elements of type int)
| - - - - - -
|
|
| _ _ _ _ _ _
\ -->| | | | | | | (6 elements of type int)
- - - - - -
जब आप कहते हैं कि array[x][y]
, इसे में *(((int *)array)+x*6+y)
जबकि तब्दील हो, जब आप कहते हैं array2[x][y]
, यह *(*(array2+x)+y)
यही है, एक स्थिर 2 डी सरणी में है में तब्दील वास्तव में एक पंक्ति में रखी पंक्तियों के साथ एक 1 डी सरणी। सूचकांक की गणना row * number_of_columns_in_one_row + column
सूत्र द्वारा की जाती है।
एक गतिशील 2 डी सरणी, हालांकि पॉइंटर्स की केवल 1 डी सरणी है। प्रत्येक पॉइंटर को गतिशील रूप से आवंटित किया जाता है ताकि दूसरे 1 डी सरणी को इंगित किया जा सके। सच में, वह सूचक कुछ भी हो सकता है। NULL
हो सकता है, या एक परिवर्तक को इंगित कर सकता है, या किसी अन्य सरणी को इंगित कर सकता है। और उनमें से प्रत्येक पॉइंटर्स अलग-अलग सेट होते हैं, इसलिए उनके पास अलग-अलग स्वरूप हो सकते हैं।
आप array
का सूचक कहीं पारित करने के लिए की जरूरत है, तो आप इसे int **
में ढाला नहीं जा सकता है (कल्पना क्या होगा array
की कोशिकाओं के int
मूल्यों संकेत के रूप में व्याख्या और dereferenced कर रहे हैं -।> बैम विभाजन गलती!)। हालांकि आप array
के int [6]
एस के 1 डी सरणी के रूप में सोच सकते हैं; यह int [6]
टाइप के साथ तत्वों की एक 1 डी सरणी है। इसे लिखने के लिए, आप कहते हैं कि
int (*p)[6] = array;
आपने किस प्रश्न को संकलित किया है जो आपके प्रश्न में कोड के समान है? –
बहुआयामी सरणी से दूर भागें (शायद छोटे लोगों को छोड़कर)। –
@Alexandre C. बहुआयामी सरणी सरल, उपयोगी और कुशल हैं। आप उनसे दूर भागना क्यों चाहेंगे? – Shahbaz