One–Dimensional Array with Pointer: जैसाकि हम जानते हैं कि जब कोई Array Declare किया जाता है तो Array अपनी Size व Data Type के अनुसार एक ऐसी जगह पर जा कर Store होता है, जहां उस Array की Size के अनुसार सभी Array Element Memory में Store हो सकें। जैसे int b[10] करने पर Array Memory में 20 Byte की Space लेता है और Memory में ऐसी जगह पर जा कर Store होता है जहां सभी Elements एक क्रम में Memory में Store हो सकें। जब हम कोई Array Declare करते हैं तो उस Array के प्रथम Element के Address को Base Address कहते हैं। जैसे:
int b[10];
इस Declaration में Array का Base Address 1000 है। किसी Pointer में हम किसी भी Array का केवल Base Address ही Pass करते हैं। माना एक Pointer Argument int *bp; है। इस Pointer Variable को इस Array का Base Address निम्नानुसार दिया जा सकता है।
bp = &b[0]; otherwise bp = b;
यहां दिया गया दूसरा Statement भी bp में Base Address Store करता है, क्योंकि किसी भी Array में प्रथम Element हमेंशा Base Address से ही Memory में Store होना शुरू होता है। यदि किसी भी Array का नाम किसी Pointer Variable को Assign किया जाए तो वास्तव में उस Pointer Variable में उस Array का Base Address ही Store होता है।
जब हमें क्रम से किसी Array में मान Store करना होता है या फिर किसी Array में Stored मान को क्रम से प्राप्त करना होता है, तब हमें & Operator का प्रयोग करने की जरूरत नहीं होती है। लेकिन जब हमें किसी Array के किसी बीच के Element को Access करना होता है, तब हमें & Address Operator का प्रयोग करना जरूरी हो जाता है। क्योंकि Pointer Variable तो हमेंशा Scale Factor के क्रम में ही Increase या Decrease होता है।
जब किसी Pointer को Increase किया जाता है, तब ये Pointer तुरन्त बाद की Location को, उसके Scale Factor के अनुसार Point करता है। हम किसी Array को उसके Index Number द्वारा Access करना सीख चुके हैं। अब हम एक प्रोग्राम द्वारा किसी Array के मान को Pointer द्वारा Access करना सीखेंगे।
अब इसी उदाहरण को हम Pointer का उपयोग करके Array के मान व Address प्राप्त करते हैं। इसके लिए निम्न प्रोग्राम होगा। इस प्रोग्राम में हमने Base Address प्राप्त करने के लिए (Address of the 0th Element) निम्न Statement Use किया है:
l = &j[0]; //Assign Address 65512 to l
जब हम Loop में पहली बार पहुंचते हैं तो l का Address 65512 होता है और मान 11 होता है। ये निम्न Statements द्वारा Output में Print होता है।
printf(“\n address = %u “, l );
printf(“\t Element = %d “, *l );
जब l का मान Increment होता है तब l का मान बढ कर 65514 हो जाता है। इस Address पर 23 स्थित है। ये दोनों मान पुन: इसी printf() Function द्वारा Output में Print हो जाते है। ये क्रम Array के अंत तक चलता रहता है। इस प्रकार से हम Pointer द्वारा One Dimensional Array के मानों को Access कर सकते हैं।
जैसा कि उदाहरण में बताया कि किसी Pointer को Array का Base Address देने के लिए l = &j[0]; Statement दिया गया है। यदि Pointer l को Increment करते हैं तो इसका मतलब है कि हम Array के रूप में इसे निम्नानुसार भी लिख सकते हैं।
l = &j[0];
दूसरे Element के Address के लिए
l +1 = &j[1];
इसी प्रकार तीसरे Element के Address के लिए
l = &j[0]; +2 = &j[2];
इस प्रकार हम Pointer द्वारा भी किसी Array के किसी भी Element पर पहुंच सकते हैं। क्योंकि जब किसी Pointer को Increment या Decrement किया जाता है, तब वह Pointer अपने Scale Factor के अनुसार दूसरे Element के Location को Point करता है। इसलिए हम किसी भी Array के किसी भी Element को Pointer द्वारा प्राप्त कर सकते हैं। जैसे
int j[] = {11,22,33,44,55,66};
int *k = j;
इस Statement से k में Array j का Base address आ जाएगा। यदि Pointer द्वारा इस Base Address के मान को Print करना हो तो हमें निम्न Statement देना होगा।
printf(“\n Value of the First Element is ” , *k );
यदि हम चाहें तो इसे इस प्रकार से भी लिख सकते हैं।
printf(“\n Value of the First Element is ” , *(k) );
अब यदि हमें दूसरे Element का मान प्राप्त करना हो तो निम्नानुसार प्राप्त कर सकते हैं।
printf(“\n Value of the Second is ” , k +1 );
इसी मान को हम निम्न Statement Use करके प्राप्त कर सकते हैं।
printf(“\n Value of the Base Address is ” , *(k+1) );
इस Statement से Pointer k Array के दूसरे Element को Point करेगा इसलिए दूसरा मान Output में Print होगा। इस तरह हम किसी Array की विभिन्न Locations पर Stored मान को निम्न सुत्र में लिख कर प्राप्त कर सकते हैं।
* ( Base Address + Index Number of Row );
जब हम j[i] लिखते हैं तो Compiler स्वयं ही इसे *( j + i ) में बदल देता है। इसलिए हम नीचे लिखे गए चारों Statement को एक दूसरे के स्थान पर प्रतिस्थापित कर सकते हैं।
( 1 ) *( j + i ) ( 2 ) *( i + j )
( 3 ) j [ i ] ( 4 ) i [ j ]
निम्न प्रोग्राम द्वारा एक ही परिणाम को इन चार तरीकों से प्राप्त किया गया हैं। (One–Dimensional Array with Pointer : Wiki)
Buy this eBook for Complete Discussion about “1D Array with Pointers in C“
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C Programming Language in Hindi | Page: 477 + 265 | Format: PDF