स्ट्रक्चर के प्वाइंटर को उदाहरण सहित समझाइए।(Pointer and Structure,)explain pointer of structure with example

 

Pointer and Structure

Pointer and Structure: हम एक साधारण Variable का Pointer बनाना जानते हैं। ठीक उसी प्रकार से  Structure भी एक प्रकार का Data Type है जिसे User स्वयं अपनी जरूरत के अनुसार बनाता है। किसी Structure को Use करने के लिए हमें Structure प्रकार के Variables Declare करने पडते हैं।

जैसे माना int प्रकार का एक Variable Declare करते हैं तो उस int प्रकार के Variable का Address Store करने के लिए हमें int प्रकार का ही एक अन्‍य Pointer Variable Declare करना पडता है। इसी प्रकार से किसी Structure प्रकार के Variable का Pointer Declare करने के लिए या किसी Structure प्रकार के Variable का Address किसी Pointer में Store करने के लिए हमें Pointer भी Structure प्रकार का ही लेना होगा।

जब हमें किसी Pointer द्वारा किसी Structure के Members को Access करना होता है, तब हमें -> Arrow Operator का प्रयोग करना पडता है। अब हम एक उदाहरण द्वारा Structure को Pointer द्वारा Access करते हैं।

// Program
    #include<stdio.h>
    main()
    {
        struct Address 
        {
            char name[15];
            char city[10];
            int room_no;
        };
        
        struct Address student1={"Kuldeep", "Falna", "122"};
        struct Address *stud1;
        stud1 = &student1;
        clrscr();
        
        printf("\n Name of student1 is %s ", stud1->name);
        printf("\n City of student1 is %s", stud1->city);
        printf("\n Room Number of student1 is %d", stud1->room_no);
        getch();
    }

// Output 
    Name of student1 is Kuldeep
    City of student1 is Falna
    Room Number of student1 is 122

हमने इस प्रोग्राम में Address नाम का एक Structure बनाया है और इस Structure प्रकार का एक Variable student1 बनाया है, साथ ही इस Variable को मान भी Initialize कर दिया है। फिर एक Pointer Variable Declare किया है जो कि Structure Address प्रकार का है। इस Pointer को Structure के Variable student1 का Address प्रदान किया गया है।

एक Structure और एक Array में केवल इतना ही फर्क होता है कि Array में एक ही प्रकार के ढेर सारे Data Store किये जाते हैं जबकि एक Structure में भिन्न-भिन्न प्रकार के कई Data Store किये जा सकते हैं। एक Structure Memory में निम्नानुसार Store होता है:

Pointer and Structure

इस प्रकार से किसी Structure के Variable का Address उसी प्रकार से किसी Pointer Variable में Store होता है, जिस प्रकार से एक Array में। Array में सभी Element समान Space लेते हैं, लेकिन Structure में Data Type के अनुसार Space Reserve होता है।

हमने इस Structure में name को 15 byte की Space दी है, इसलिए यदि Structure 4000 Location पर Store होता है, तो city नाम का Member name नाम के Member से 15 Byte आगे 4015 पर Store होगा।

इसी प्रकार city को 10 Byte दिया है इसलिए room_no नाम का Member city Member से 10 byte आगे 4025 पर Store होगा।

इस प्रकार से यदि हम किसी Structure Variable का  Address किसी Pointer Variable को देते हैं, तो उस Structure का Base Address ही उस Variable को प्राप्त होता है, जिस तरह किसी Array प्रकार के Variable का Address किसी Pointer Variable को देने पर उस Variable का Base Address ही उस Pointer को प्राप्त होता है।

जिस प्रकार से एक सामान्‍य Variable को Access किया जाता है, उसी प्रकार से एक Pointer Variable को भी access किया जाता है। लेकिन Pointer Variable को जब Use किया जाता है तब ( . ) Dot Operator के स्थान पर -> Arrow Operator का प्रयोग करना पडता है।

इस उदाहरण में Pointer का मान Output में उसी प्रकार से Print किया गया है, जिस प्रकार से एक सामान्‍य Structure Variable को Print किया जाता है। लेकिन चूंकि हम यहां Structure Variable student1 के मानों को Pointer Variable stud1 की सहायता से Print कर रहे हैं, इसलिए यहां -> Operator का प्रयोग किया गया है।

यदि हम Pointer की सहायता से ये मान Output में Print ना करके Variable student1 की सहायता से Print करते] तो हमें निम्नानुसार Statements में परिवर्तन करके Arrow Operator के स्थान पर Dot Operator का प्रयोग करना पडता।

    printf("\n Name of student1 is %s ", stud1.name);
    printf("\n City of student1 is %s", stud1.city);
    printf("\n Room Number of student1 is %d", stud1.room_no);

इन Statements का Output भी वही प्राप्त होता जो प्राप्त हुआ है। यानी:

    Name of student1 is Kuldeep
    City of student1 is Falna
    Room Number of student1 is 122

इसी प्रकार से हम किसी Structure Variable के Pointer को किसी User Defined Function में भी Argument के रूप में भेज सकते हैं। जब हम किसी Structure Variable के Pointer को Argument के रूप में किसी Function में भेजते हैं तब भी उस Structure को Access करने का तरीका वही रहता है।

जब हम Pointer द्वारा किसी Function में किसी Structure का Base Address भेजते हैं तब उस Structure के Variables को Use करने के लिए Arrow Operator का प्रयोग करना होता है। हम उपर बताए गये प्रोग्राम में ही Function का प्रयोग करके Output को Function द्वारा Print करने का प्रोग्राम बना रहें हैं जिससे Pointer पद Function को समझा जा सके।

// Program
#include<stdio.h>
main()
{
    struct Address 
    {
        char name[15];
        char city[10];
        int room_no;
    };
        
    struct Address student1={"Kuldeep", "Falna", "122"};
    struct Address *stud1;
    stud1 = &student1;
    clrscr();
        
    printf("\n Name of student1 is %s ", stud1->name);
    printf("\n City of student1 is %s", stud1->city);
    printf("\n Room Number of student1 is %d", stud1->room_no);
    getch();
}

// Output 
    Name of student1 is Kuldeep
    City of student1 is Falna
    Room Number of student1 is 122

इस प्रकार से हम किसी struct प्रकार के Variable को किसी Function में भी भेज सकते हैं। इस Program में Structure Address के Variable student1 का Address Function में भेजा है।

इस Function में Argument को प्राप्त करने के लिए एक Pointer Variable Declare किया है जो कि Structure Address प्रकार का है। stud1ptr Pointer में Variable student1 का Address आ जाता है। अब हम इसे Use करके Structure के सारे Members को Print कर सकते हैं। जिससे कि बताए अनुसार Output प्राप्त हो जाता है। इसी प्रकार से हम उन Structures के साथ भी प्रक्रिया कर सकते हैं जिनमें Array का प्रयोग होता है।

एक बात हमेंशा ध्‍यान रखें कि Dot Operator के Left Side में हमेंशा Structure का Variable होता है, जबकि Arrow Operator के Left Side में हमेंशा एक Structure Pointer होता है जो कि Structure को Point करता है। Union व Structure को use करने का तरीका बिल्कुल समान होने से Union को Use करना नहीं बताया जा रहा है।

यदि हम struct Key Word की जगह union Key Word का प्रयोग करें, तो उपर बताया गया उदाहरण ही एक Union with Pointer का उदाहरण हो जाएगा। Union व Structure के Memory में Store होने के तरीके में अन्तर होने से इनके Output में अन्तर होगा लेकिन Union व Structure को Use करने का तरीके में जरा सा भी अन्तर नहीं हैं।

यदि हमें Structure के लिए Memory Allocate करनी हो तो भी यही बात लागू होती है। जैसे:

  struct stud *new1;
  new1 = ( struct stud * ) malloc ( sizeof (struct stud ) );

इस Statement से Structure stud के लिए एक Block Of Memory Allocate हो जाएगा और उसके प्रथम Byte का Address new1 नाम के Structure stud प्रकार के Pointer Variable new1 को प्राप्त हो जाएगा।

No comments: