Structure in C Language - W3 Coding Club

    Introduction of Structure

    Array में हम एक समान टाइप की वैल्यू को एक बेरी बल में स्टोर कर सकते हैं। यदि हम अलग अलग टाइप की वैल्यू बल में स्टोर करना चाहे तो इसके लिए स्ट्रक्चर का प्रयोग किया जाता है। उदाहरण के लिए यदि हमें एक कर्मचारी का नाम(करैक्टर एरे), फोन नंबर(करैक्टर एरे), तथा वेतन(इंटीजर) एक ही वेरिएबल में स्टोर करना है तो इसके लिए स्ट्रक्चर का प्रयोग किया जा सकता हैं। इस प्रकार के लॉजिकल रिलेटेड डाटा को FoxPro, Oracle आदि में रिकॉर्ड किया जाता है। 

    स्ट्रक्चर को डिफाइन करना

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

    स्ट्रक्चर को main() फंक्शन के अंदर या उससे पहले निम्न प्रकार से डिफाइन किया जा सकता है। 

    struct structure_name 

            data_type var_name; //member data 
            data_type var_name; //member data
            _ _ _ _ _ _ _ _ _ _ _ _ _ 
            _ _ _ _ _ _ _ _ _ _ _ _ _ 
    }; 

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

     एक कर्मचारी का नाम, फोन नंबर, तथा वेतन स्टोर करने के लिए स्ट्रक्चर को निम्न प्रकार से डिफाइन किया जा सकता है: 

       
         struct emp
        {
            char name[20];
            char phone[10];
            int cal;
        };


    ऊपर दिए गए  उदाहरण में यह कहा जा सकता है कि emp नामक एक नया डाटा टाइप बना  है, जिसके आधार पर नए वेरिएबल को डिक्लेअर किया जा सकता है। इस स्ट्रक्चर में name, phone, तथा sal  नामक तीन मेंबर हैं। यह स्ट्रक्चर, मेमोरी में निम्नानुसार स्थान घेरेगा। 


    Define structure(स्ट्रक्चर वेरिएबल डिक्लेयर करना) :-

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

    struct structure_name var1, var2, ........., varN; 

    या 


    struct structure_name 

            - - - - - - - - - - - 
            - - - - - - - - - - -
    } var1, var2, ....., varN; 

    Example:-

       struct emp
       {
           char name[20];
           char phone[10];
           int sal;
       };
       struct emp e1, e2, e3;


    या 

       struct emp
       {
           char name[20];
           char phone[10];
           int sal;
       } e1, e2, e3;


    typedef का प्रयोग 

    typedef का प्रयोग पहले से मौजूद किसी data type(डाटा टाइप) को नया नाम देने के लिए किया जाता हैं। 

    typedef का प्रयोग structure(स्ट्रक्चर) को भी नया नाम देने के लिए किया जा सकता है इसका प्रारूप निम्न प्रकार हैं। 

    typedef existing_data_type new_data_type; 

    किसी   स्ट्रक्चर वेरिएबल को declare(डिक्लेअर) करने के लिए प्रयोग किए जाने वाला प्रारूप लंबा है। किंतु typedef के माध्यम से इस से छोटा और आसान बनाया जा सकता हैं: 

    struct emp e1, e2, e3; 

    उपरोक्त उदाहरण में typedef के माध्यम से निम्न प्रकार छोटा और आसान बनाया जा सकता है: 

    typedef struct emp employee; 
    employee e1, e2, e3; 
    ........ 
    employees  e4; 

    एक बार struct emp को employee नया नाम देने के बाद उसके आगे के सभी डिक्लेरेशन में सिर्फ employee का प्रयोग  पर्याप्त होता है। 

    Structure variable(स्ट्रक्चर वेरिएबल) में वैल्यू स्टोर करना

    चूंकि structure(स्ट्रक्चर) में एक से अधिक वैल्यू स्टोर सकती है, अतः जब भी structure(स्ट्रक्चर) के किसी मेंबर को प्रयोग करना होता है तो मेंबर के नाम के साथ structure variable(स्ट्रक्चर वेरिएबल) का नाम भी प्रयोग किया जाता है। structure variable(स्ट्रक्चर वेरिएबल) में वैल्यू स्टोर कराने का प्रारूप निम्न प्रकार हैं:

      structure_var_name.structure_member = value;  

    Exampl:-

    e1.sal = 8550;

    Example:-

    नीचे 👇 दिए गए उदाहरण में एक स्ट्रक्चर को डिफाइन करते हुए उसके आधार पर e नाम का वेरिएबल डिक्लेयर किया गया है। साथ ही साथ उसमें वैल्यू भी उसी समय दे दी गई हैं।

        
        #include<stdio.h>
        #include<conio.h>
        void main(){
            struct emp
            {
                char name[20];
                char phone[10];
                int sal;
            }e = {"Mukesh""9696454748"85000};
            printf("\nName: %s", e.name);
            printf("\nPhone: %s", e.phone);
            printf("\nSalary: %d", e.sal);
            getch();   
        }

    Output:-

    Name: Mukesh
    Phone: 9696454748
    Salary: 85000

    Explain Example:-

    ऊपर👆  दिए गए उदाहरण में स्ट्रक्चर emp को main() फंक्शन के अंदर डिक्लेअर किया गया है, जिसके आधार पर एक वेरिएबल e डिक्लेअर करते हुए उसके विभिन्न मेंबर name, phone तथा sal में क्रमशः Mukesh, 9696454748 तथा 85000 वैल्यू स्टोर करवाई जा रही हैं। इन्हीं वैल्यू को printf() के माध्यम से वापस प्रिंट करवाया दिया गया हैं। 

    Example:-

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

       
        #include <stdio.h>
        #include <conio.h>
        void main(){
            struct emp
            {
                char name[20];
                char phone[100];
                int sal;
            } e1 = {"Mukesh","78783423"92000},
              e2 = {"Ranjeet","78986798"70000};
            
            printf("\n Name: %s",e1.name);
            printf("\n Phone: %s",e1.phone);
            printf("\n Salary: %d",e1.sal);
            
            printf("\n Name: %s",e2.name);
            printf("\n Phone: %s",e2.phone);                  
            printf("\n Salary: %d",e2.sal);

            getch();
        }

    Output:-

     Name: Mukesh
     Phone: 78783423
     Salary: 92000

     Name: Ranjeet
     Phone: 78986798
     Salary: 70000

    Explain Example:-

    ऊपर 👆 दिए के उदाहरण में दो वेरिएबल e1 तथा e2 डिक्लेअर करते हुए उसके विभिन्न मेंबर में दो अलग-अलग  व्यक्तियों से संबंधित वैल्यू स्टोर करवाई जा रही हैं। इन्हीं वैल्यूज  को printf() के माध्यम से प्रिंट करवा दिया गया है। 

    Example:-

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

      
        #include <stdio.h>
        #include <conio.h>    
        void main(){
            struct emp
            {
                char name[20];
                char phone[10];
                int sal;
            }e;
            printf("\n Enter Employee Name: ");
            scanf("%s",e.name);
            
            printf("\n Enter Employee Phone No.: ");
            scanf("%s",e.phone);
            
            printf("\n Enter Employee Salary: ");
            scanf("%d",e.sal);
        
            printf("\n Employee Name: %s",e.name);
            printf("\n Employee Phone: %s",e.phone);
            printf("\n Employee Salary: %d",e.sal);                    
            
            getch();
        }

    Output:-

     Enter Employee Name: Mukesh
     Enter Employee Phone No.: 8845654565
     Enter Employee Salary: 98709
     Employee Name: Mukesh
     Employee Phone: 8845654565
     Employee Salary: 98709

    Explain Example:-

    ऊपर दिए गए उदाहरण में वेरिएबल e को डिक्लेअर किया गया है किंतु साथ में इनिशियलाइज  नहीं किया गया है।  इस उदाहरण में इन्हें प्रारंभिक वैल्यू देने का कार्य scanf() के माध्यम से किया जा रहा हैं। 

    Array of Structure
    (स्ट्रक्चर तथा एरे)

    एक से अधिक कर्मचारियों के नाम, फोन नंबर, तथा वेतन को एक ही वेरिएबल में  स्टोर करना हो तो ऐसी स्थिति में हम स्ट्रक्चर का Array(एरे) बना सकते हैं

    Example:-

    नीचे दिए गए उदाहरण में 5 कर्मचारियों के नाम, फोन नंबर, तथा वेतन को  स्ट्रक्चर का Array(एरे) बनाकर स्टोर किया गया है। 

        #include <stdio.h>
        #include <conio.h>
        void main(){
            struct emp
            {
                char name[20];
                char phone[11];
                int sal;
            }e[5];
            int c;
            for (c = 0; c < 5; c++)
            {
                printf("\nEnter Employee Name, Phone No., Salary: ");
                scanf("%s%s%d",e[c].name,e[c].phone,e[c].sal);
            }
            printf("\nYou Entered:-");
            for (c = 0; c < 5; c++)
            {
                printf("\n %s \t\t %s\t %d",e[c].name,e[c].phone,e[c].sal);
            }
            getch();
        }    

    Output:-

    Enter Employee Name,  Phone No.,  Salary:  Mukesh  2354567856   98000
    Enter Employee Name,  Phone No.,  Salary:  Rudara   9854459866   75000
    Enter Employee Name,  Phone No.,  Salary:  Denny    9645786325   98000
    Enter Employee Name,  Phone No.,  Salary:  Vicky     7898459812   58000
    Enter Employee Name,  Phone No.,  Salary:  Niku       6354896523   65000
    You Entered:-
    Mukesh     2354567856      98000
    Rudra        9854459866      75000
    Denny       9645786325      98000
    Vicky        7898459812      58000
    Niku          6354896523      65000

    Explain Example:-

    ऊपर दिए गए स्ट्रक्चर वेरिएबल e को एक एरे  के रूप में डिक्लेअर किया गया है। इसका आशय यह है कि इस  वेरिएबल ही e में अलग-अलग व्यक्तियों के बारे में जानकारी स्टोर की जा सकती है। जानकारी स्टोर करने का कार्य प्रोग्राम में ही लूप चलाकर किया गया हैं। scanf() में प्रयुक्त e[c].name का आशय  वेरिएबल e के एलिमेंट संख्या c का  name हैं। इस प्रकार चूंकि लूप पांच बार चलेगा, अतः प्रत्येक बार अलग अगल एलिमेंट्स के लिए वैल्यू scan की जाएगी। इन्ही वैल्यू को वापस लूप चलाकर प्रिन्ट करवा दिया गया हैं। 

    Post a Comment

    0 Comments