Header Ads

ad728
  • New Updates

    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
    
    
    
    

    No comments

    Post Top Ad

    ad728

    Post Bottom Ad

    ad728