Pointer with 2 Dimensional Array: एक बात हमेंशा ध्यान रखें कि Memory में ना तो कोई Row होती है ना ही कोई Column, Memory में सभी Data एक क्रम में Store होते हैं। इसलिए ये माना जा सकता है कि किसी Array के सभी Elements एक Row में ही Store होते हैं। जो भी Index Number होते हैं, वे सभी Logical होते हैं। Physical तो मात्र Address होते हैं। एक Two Dimensional Array के सभी Elements, जैसे int j[3][3]; ये Memory में निम्नानुसार क्रम से Store होते हैं-
इस प्रकार से हम कह सकते हैं कि एक 2-Dimensional array में कई One Dimensional Array होते हैं, जो एक श्रृंखला में व्यवस्थित रहते हैं। जैसे कि
int s[5][2];
इस Declaration को ये कह सकते हैं कि ये 5 One Dimensional Array हैं और पांचों में ही दो-दो Byte के पांच Elements है। हम एक Single One Dimensional Array को एक Index Number द्वारा संकेत कर सकते हैं। इसी तरह से यदि हम मान लें कि s एक One Dimensional Array है तो इसके प्रथम Element को s[0] मान सकते हैं। इसी तरह दूसरे Element को s[1] व तीसरे Element को s[2] मान सकते हैं।
खास तौर से हम ये कह सकते हैं कि s[0] प्रथम One Dimensional Array का Base Address देता है, s[1] दूसरे One Dimensional Array का Base Address दे रहा है और इसी प्रकार से आगे भी माना जा सकता है। इस बात को निम्न उदाहरण द्वारा अधिक अच्छी तरह से समझा जा सकता है।
// Program #include<stdio.h> main() { int s[5][2] = { {11,22},{33,44},{55,66},{77,88},{99,00}}; int i, j; clrscr(); for( i = 0; i <= 3; i++ ) { printf("\n Address Of %d One-Dimensional Array = %u ", i+1, s[i] ); } getch(); } // Output Address Of 1 One-Dimensional Array = 65506 Address Of 2 One-Dimensional Array = 65510 Address Of 3 One-Dimensional Array = 65514 Address Of 4 One-Dimensional Array = 65518
आइये समझने की कोशिश करते हैं कि Program कैसे काम करता है। (Pointer with 2 Dimensional Array : Wiki)
“C” Compiler जानता है कि s एक int प्रकार का Array हैं, इसलिए Array का हर Element 2 Byte की Space लेता है। यहां हर Row में दो Element हैं, इसलिए हर Row 4 Byte लेगा।
चूंकि ये माना जा सकता है कि Memory में किसी भी 2-Dimensional array को उस Array की दूसरी size के अनुसार उतने ही One Dimensional Array माने जा सकते हैं, क्योंकि 2-Dimensional array में भी सभी Elements एक ही Row में Memory में Store होते हैं।
इस प्रकार से यहां 2-2 Elements के 5 one-Dimensional Array माने जा सकते हैं और हर One-Dimensional Array Memory में 4 Byte की Space ले रहा है, क्योंकि हर One-Dimensional Array में दो Element हैं व हर Element int प्रकार का है।
इस कारण से हर one-Dimensional Array Memory में 4 Byte ले रहा है। इस प्रकार से एक 2-Dimensional Array की दूसरी Row को दूसरा One-Dimensional Array, तीसरी Row को तीसरा One-Dimensional Array, चौथी Row को चौथा One-Dimensional Array कहा जा सकता है और यही क्रम आगे भी माना जा सकता है। यदि इस 2-Dimensional Array का Memory Map देखा जाए तो वह निम्नानुसार होगा:
जब Array s को Declare किया जाता है तभी “C” Compiler जान जाता है कि s में कितने Column हैं। इसलिए हम One-Dimensional Array के अंतर्गत बताए अनुसार s[0] को (s+0) व s[1] को (s+1) कह सकते है।
चूंकि (s+0) का Address 65506 है इसलिए (s+1) का Address 65510 होगा। (s+2) का Address 65514 होगा और ये क्रम Array के अन्तिम मान तक चलता रहेगा। इस प्रकार से अब हम किसी भी अमुक Row में पहुंच सकते हैं।
माना हम s[2][1] Element पर Pointer द्वारा पहुंचना चाहते हैं। हम उपरोक्त Declaration से जानते हैं कि s[2] का Address 65514 है जो कि Second one-Dimensional Array का Address है।
स्पष्ट रूप से यदि हम (65514+1) करें, तो हमें 65516 (Pointer के Scale Factor के कारण) Address प्राप्त होगा और यहां पर स्थित मान को *( Value at Address Operator) द्वारा प्राप्त किया जा सकता है यानी *(s[2] +1) लेकिन हमने पहले पढा कि किसी j[i] व *(j+i) समान हैं यानी दोनों ही Expression से समान Output प्राप्त होता है।
इसी प्रकार से *(s[2]+1) भी *(*(s+2)+1) के समान है। उदाहरण के लिए निम्नलिखित सभी Expressions किसी समान Element Location का संकेत देते हैं:
s[2][1] *(s[2] + 1) *( *(s + 2 ) + 1 )
इसे सुत्र के रूप में इस प्रकार लिख सकते हैं।
*( *( Base Address + Index Number of Row) + Index Number of Column );
इस प्रकार से इसी Concept पर हम ऊपर दिये गए उदाहरण के सभी Elements का मान Pointer द्वारा Output में Print कर सकते हैं। Program निम्नानुसार होगा-
Buy this eBook for Complete Discussion about “Pointers with 2D Array in C“
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C Programming Language in Hindi | Page: 477 + 265 | Format: PDF