Nested Structure - W3 Coding Club

    Store the value of one struct in another struct

    जिस  प्रकार हम एक वेरिएबल की वैल्यू को दूसरे वेरिएबल में स्टोर कर सकते हैं उसी प्रकार हम एक स्ट्रक्चर  के मेम्बर की वैल्यू को दूसरे स्ट्रक्चर के मेम्बर में स्टोर कर सकते हैं या एक स्ट्रक्चर वेरिएबल की वैल्यू को दूसरे स्ट्रक्चर वेरिएबल में स्टोर कर सकते हैं। 

    Example:-

    नीचे 👇 दिए गए उदाहरण में एक स्ट्रक्चर की वैल्यू को दो अलग-अलग तरीकों से कॉपी करना समझाया गया हैं। 

        
        #include<stdio.h>
        #include<conio.h>
        #include<string.h>
        void main(){
            struct emp
            {
                char name[20];
                char phone[20];
                int sal;
            }e1 = {"Mukesh""6356984578"96000},e2,e3;
            
            strcpy(e2.name, e1.name);
            strcpy(e2.phone, e1.phone);
            e2.sal = e1.sal; 
            e3 = e1;

            printf("\n%s \t %s \t %d", e1.name, e1.phone, e1.sal);
            printf("\n%s \t %s \t %d", e2.name, e2.phone, e2.sal);
            printf("\n%s \t %s \t %d", e3.name, e3.phone, e2.sal);
            getch();
        }    
        

    Output:-

    Mukesh   6356984578      96000
    Mukesh   6356984578      96000
    Mukesh   6356984578      96000

    Explain Example:-

    ऊपर दिए गए उदाहरण में ध्यान देगी स्ट्रक्चर में प्रयुक्त स्ट्रिंग Array name तथा phone को कॉपी करने के लिए e2.name = e1.name क्या प्रयोग नहीं किया जा सकता हैं। इसलिए यह कार्य strcpy() फंक्शन के माध्यम से किया जा रहा हैं। strcpy() की परिभाषा string.h header file(हेडर फाइल) में होती हैं इसलिए हमने प्रोग्राम के शुरुआत में #include<string.h> लिखा हैं। वहीं दूसरी ओर यदि पूरा स्ट्रक्चर एक साथ कॉपी करना हो तो यह कार्य e3 = e1 स्टेटमेंट से किया जा सकता हैं।

    Nested Structure

    जिस प्रकार एक लूप के अंदर दूसरे लूप  को चलाने पर उसे नेस्टेड लूप करते हैं, उसी प्रकार एक स्ट्रक्चर के अंदर यदि दूसरे स्ट्रक्चर के वेरिएबल को डिक्लेअर किया जाए तो इसे स्ट्रक्चर की नेस्टिंग करते हैं। 

    Example:-

    नीचे 👇 दिए गए उदाहरण में एक structure(स्ट्रक्चर) में दूसरे structure variable(स्ट्रक्चर वेरिएबल) को प्रयोग में लेना स्पष्ट किया गया हैं। 

       
        #include<stdio.h>
        #include<conio.h>
        void main(){
            struct info
            {
                char phone[15];
                int sal;
            };
            struct emp
            {
                char name[20];
                struct info i;
            };
            struct emp e;

            printf("\n Enter Employee Name: ");
            scanf("%s",e.name);       

            printf("\n Enter Employee phone Number: ");
            scanf("%s ",e.i.phone);
                   
            printf("\n Enter Employee Salary: ");
            scanf("%s",e.i.sal);       
            
            printf("\nEmployee Name: %s",e.name);
            printf("\nEmployee phone: %s",e.i.phone);
            printf("\nEmployee phone: %d",e.i.sal);

            getch();
        }

    Output:-

    Enter Employee Name: Mukesh
    Enter Employee phone Number: 63775763232
    Enter Employee Salary: 56566
    Employee Name: Mukesh
    Employee phone: 63775763232
    Employee phone: 12391884

    Explain Example:-

    ऊपर 👆 दिए गए उदाहरण में ध्यान दें कि स्ट्रक्चर emp को डिक्लेअर करते वक्त उसमें struct info i के माध्यम से दूसरे स्ट्रक्चर info का  variable भी बनाया  जा रहा हैं। अतः यदि emp के माध्यम से info के मेंबर को प्रयोग करना हो तो ऐसी स्थिति में e.i.phone जैसे स्टेटमेंट प्रयोग(इसमें दो बार डॉट ऑपरेटर प्रयोग किया गया है) करते हुए यह कार्य किया जा सकता हैं।  

    ऊपर 👆 दिए गए उदाहरण को निम्न 👇 चित्र से समझा जा सकता हैं। 

    Structure and function

    अन्य वेरिएबल की तरह स्ट्रक्चर वेरिएबल या उसके मेंबर को भी फंक्शन में इनपुट के रूप में भेजा जा सकता हैं।

    Example:-

    नीचे दिए गए उदाहरण में स्ट्रक्चर के विभिन्न मेंबर को अलग-अलग वेरिएबलो में फंक्शन show() में इनपुट के रूप में भेजा गया है: 

       
        #include<stdio.h>
        #include<conio.h>
        void show(char *nmchar *phint sal);
        void main(){
            struct emp
            {
                char name[20];
                char phone[15];
                int sal;
            }e={"Mukesh""6377595922"86000};

            show (e.name, e.phone, e.sal);
            getch();
        }

        void show(char *nmchar *phint sal){
            printf("\nEmployee Name: %s"nm);
            printf("\nEmployee Phon: %s"ph);
            printf("\nEmployee Salary: %d"sal);
        }

    Output:-

    Employee Name: Mukesh
    Employee Phon: 6377595922
    Employee Salary: 86000

    Explain Example:-

    ऊपर दिए गए उदाहरण में show(e.name, e.phone, e.sal); के माध्यम से स्ट्रक्चर वेरिएबल e के मेंबर name, phone तथा sal को show() फंक्शन के इनपुट के रूप में भेजा जा रहा हैं। 

    Example:-

    नीचे दिए गए उदाहरण में स्ट्रक्चर वेरिएबल फंक्शन show() में इनपुट के तौर पर भेजा गया हैं।

       
        #include<stdio.h>
        #include<conio.h>
        struct emp
        {
            char name[20];
            char phone[15];
            int sal;
        }e = {"Mukesh""6377586822"62000};
        void showstruct emp e1);
        void main(){   
            show(e);
            getch();
        }
        void showstruct emp e1){
            printf("\nEmployee Name: %s"e1.name);
            printf("\nEmployee Phone: %s"e1.phone);
            printf("\nEmployee Salary: %d"e1.sal);
        }
        

    Output:-

    Employee Name: Mukesh
    Employee Phone: 6377586822
    Employee Salary: 62000

    Explain Example:-

    ऊपर दिए गए उदाहरण में show() फंक्शन को पूरा स्ट्रक्चर ही स्ट्रक्चर वेरिएबल a को इनपुट के रूप में भेजा जा रहा हैं। ध्यान दें कि show() फंक्शन में emp स्ट्रक्चर प्रयोग करने के लिए उसे main() फंक्शन से पहले डिक्लेअर किया गया हैं। चूंकि emp स्ट्रक्चर main() फंक्शन से पहले डिक्लेअर हो चुका है, अतः वह ग्लोबल डाटा टाइप बन चुका हैं, जिससे इस प्रोग्राम के सभी फंक्शन इसे प्रयोग करने में सक्षम हो गए हैं

    Structure and pointer

    जिस प्रकार अन्य वेरिएबल के address(एड्रेस) को स्टोर करने के लिए pointer(पॉइन्टर) का प्रयोग किया जा सकता है उसी प्रकार structure variable(स्ट्रक्चर वेरिएबल) के एड्रेस को भी उस structure(स्ट्रक्चर) के समान data-type(डाटा-टाइप) के pointer(पॉइन्टर) वेरिएबल में स्टोर किया जा सकता हैं। structure variable(स्ट्रक्चर वेरिएबल) के एलिमेंट को pointer द्वारा प्रयोग करने के लिए   ->  ऑपरेटर का प्रयोग किया जाता हैं। 

    Example:-

    नीचे दिए गए उदाहरण में structure member(स्ट्रक्चर मेंबर) को pointer(पॉइन्टर) के माध्यम से प्रयोग किया गया है

        #include<stdio.h>
        #include<conio.h>
        void main(){
            struct emp
            {
                char name[30];
                char phone[15];
                int sal;
            }e = {"Mukesh Kumar""6354786922"89000},*p;

            p = &e;
            printf("\nEmployee Name: %s",p->name);
            printf("\nEmployee Phone: %s", p->phone);
            printf("\nEmployee Salary: %d", p->sal);
            getch();        
        }   

    Output:-

    Employee Name: Mukesh Kumar
    Employee Phone: 6354786922
    Employee Salary: 89000

    Explain Example:-

    ऊपर दिए गए उदाहरण में स्ट्रक्चर वेरिएबल e का एड्रेस पॉइन्टर वेरिएबल p में स्टोर करवाते हुए p के माध्यम से स्ट्रक्चर मेंबर किया गया है ध्यान देगी क्योंकि P पॉइन्टर हैं अतः इसके माध्यम से स्ट्रक्चर के मेंबर को प्रयोग करने के लिए डॉट(.) की जगह पर -> चिन्ह प्रयोग किया जाता हैं।

    Post a Comment

    0 Comments