Pointer with 2- Dimensional Array
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5vLJ9wX92_FmojvFcA6Tnql0ArRXL_JK452Xtu6wOzB331_2uEY05zUtXWuUjIOK6DT3a62F9zYql8iOwmStBxwo9QIRRmBjRD0tAHgnagpfz0-ibziUZbgnTbxjFCacKjKx9b-v6Q6jpfn_KRj5pV2P62MXyM1fo1XaL0cBtcEeEdTyn-WnxD3jP/w640-h480/Pointer%20with%202-%20Dimensional%20Array.jpg)
Pointer with 2-
Dimensional Array
एक
बात हमेंशा ध्यान रखें कि Memory में ना तो कोई Row
होती है ना ही कोई Column, Memory में सभी Data
एक क्रम में Store होते हैं |
इसलिए
ये माना जा सकता है कि किसी Array के सभी Elements
एक Row में ही Store होते
हैं जो भी Index Number होते हैं , वे सभी Logical होते हैं | Physical
तो मात्र Address होते हैं , एक Two
Dimensional Array के सभी Elements निम्नानुसार
Store होते हैं |
जैसे
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 Array दे रहा है |
और
इसी प्रकार से आगे भी माना जा सकता है | इस
बात को निम्न उदाहरण द्वारा अधिक अच्छी तरह से समझा जा सकता है |
Program
#include<stdio.h>
main()
{
int s[5][2]={{11,22},{33,44},{55,66},{77,88},{99,100}};
int i,j;
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 कैसे काम करता है |
“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(j[2]+l) लेकिन हमें पहले
पढ़ा कि किसी j[i] व *(j+i) समान है
यानी दोनों ही Expression से समान Output प्राप्त होता है |
इसी
प्रकार से *(s[2]+l) भी *(*(s+2)+1) के समान है | उदाहरण
के लिए निम्नलिखित सभी Expressions किसी समान Element
Location का संकेत देते हैं |
s[2] [l]
*s(s[2]+l)
*(*(s+2)+l)
इसे
सुत्र के रूप में इस प्रकार लिख सकते हैं |
*(*(Base Address + Index Number of Row ) + Index Number of Column);
इस
प्रकार से इसी Concept पर हम दिए गए उदाहरण के सभी Elements
का मान Pointer द्वारा Output में Print कर सकते हैं |
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 <5; i++ ){
for( j = 0; j <= 1; j++ )
printf("\n Value Of s[%d][%d]th Element is = ", *( *( s + i ) + j ) );
printf("\n");
}
getch();
}
Output
Value Of s[1][1]th Element is = 11
Value Of s[1][2]th Element is = 22
Value Of s[2][1]th Element is = 33
Value Of s[2][2]th Element is = 44
Value Of s[3][1]th Element is = 55
Value Of s[3][2]th Element is = 66
Value Of s[4][1]th Element is = 77
Value Of s[4][2]th Element is = 88
Value Of s[5][1]th Element is = 99
Value Of s[5][2]th Element is = 0
No comments