Dark Mode Logo (Optional)

Dark Mode Logo (Optional)

Pointer with 2- Dimensional Array



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



You may like these posts:

No comments:

Post a Comment