Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में स्ट्रक्चर के पॉइंटर की डायनामिक मेमोरी एलोकेशन समझें


स्ट्रक्चर का पॉइंटर संपूर्ण स्ट्रक्चर का पता रखता है।

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

स्ट्रक्चर के मेंबर्स को एक विशेष ऑपरेटर जिसे एरो ऑपरेटर (->) कहा जाता है, का उपयोग करके एक्सेस किया जा सकता है।

घोषणा

C प्रोग्रामिंग में स्ट्रक्चर्स के पॉइंटर्स के लिए घोषणा निम्नलिखित है:

struct tagname *ptr;

उदाहरण: struct student *s;

एक्सेस करना

स्ट्रक्चर्स के पॉइंटर्स को कैसे एक्सेस करें, यह नीचे समझाया गया है:

ptr->membername;

उदाहरण: s->sno, s->sname, s->marks;

उदाहरण

निम्नलिखित C प्रोग्राम C प्रोग्रामिंग में स्ट्रक्चर की डायनामिक मेमोरी एलोकेशन को समझाता है:

#include <stdio.h>
#include <stdlib.h>

struct person {
    int age;
    float weight;
    char name[30];
};

int main() {
    struct person *ptr;
    int i, n;
    
    printf("व्यक्तियों की संख्या दर्ज करें: ");
    scanf("%d", &n);
    
    // n संख्या के struct person के लिए मेमोरी एलोकेट करना
    ptr = (struct person*) malloc(n * sizeof(struct person));
    
    for (i = 0; i < n; ++i) {
        printf("नाम और उम्र क्रमशः दर्ज करें: ");
        // पहले struct person के मेंबर्स को एक्सेस करने के लिए,
        // ptr->name और ptr->age का उपयोग किया जाता है
        // दूसरे struct person के मेंबर्स को एक्सेस करने के लिए,
        // (ptr+1)->name और (ptr+1)->age का उपयोग किया जाता है
        scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
    }
    
    printf("जानकारी प्रदर्शित:\n");
    for (i = 0; i < n; ++i)
        printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);
    
    return 0;
}

आउटपुट

उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:

व्यक्तियों की संख्या दर्ज करें: 1
नाम और उम्र क्रमशः दर्ज करें: bhanu 24
जानकारी प्रदर्शित:
Name: bhanu
Age: 24

उदाहरण 2

पॉइंटर्स और स्ट्रक्चर्स पर एक और उदाहरण पर विचार करें, जिसमें पॉइंटर्स और स्ट्रक्चर्स को दर्शाने वाला C प्रोग्राम दिया गया है।

#include <stdio.h>

// बाहरी और आंतरिक स्ट्रक्चर्स घोषित करना
struct Manager {
    char Name[15];
    int Age;
    char Gender;
    float Level;
    char Role[50];
    char temp;
} m[20];

void main() {
    int i;
    struct Manager *p;
    
    // पॉइंटर परिभाषित करना
    p = &m;
    
    // यूजर इनपुट पढ़ना
    for (i = 1; i < 3; i++) { // 2 मैनेजर्स का डेटा स्वीकार करने के लिए फंक्शन घोषित करना
        printf("मैनेजर %d का नाम दर्ज करें: ", i);
        gets(p->Name);
        printf("मैनेजर %d की उम्र दर्ज करें: ", i);
        scanf("%d", &p->Age);
        scanf("%c", &p->temp); // बफर क्लियर करना
        printf("मैनेजर %d का जेंडर दर्ज करें: ", i);
        scanf("%c", &p->Gender);
        printf("मैनेजर %d का स्तर दर्ज करें: ", i);
        scanf("%f", &p->Level);
        scanf("%c", &p->temp); // बफर क्लियर करना
        printf("मैनेजर %d की भूमिका दर्ज करें: ", i);
        gets(p->Role);
        p++;
    }
    
    // आउटपुट प्रिंट करने के लिए पॉइंटर को फिर से परिभाषित करना
    p = &m;
    
    // आउटपुट प्रिंट करना
    for (i = 1; i < 3; i++) {
        printf("मैनेजर %d का नाम है: %s\n", i, p->Name);
        printf("मैनेजर %d की उम्र है: %d\n", i, p->Age);
        printf("मैनेजर %d का जेंडर है: %c\n", i, p->Gender);
        printf("मैनेजर %d का स्तर है: %f\n", i, p->Level);
        printf("मैनेजर %d की भूमिका है: %s\n", i, p->Role);
        p++;
    }
}

आउटपुट

उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:

मैनेजर 1 का नाम दर्ज करें: Hari
मैनेजर 1 की उम्र दर्ज करें: 55
मैनेजर 1 का जेंडर दर्ज करें: M
मैनेजर 1 का स्तर दर्ज करें: 2
मैनेजर 1 की भूमिका दर्ज करें: Senior
मैनेजर 2 का नाम दर्ज करें: Bob
मैनेजर 2 की उम्र दर्ज करें: 60
मैनेजर 2 का जेंडर दर्ज करें: M
मैनेजर 2 का स्तर दर्ज करें: 1
मैनेजर 2 की भूमिका दर्ज करें: CEO
मैनेजर 1 का नाम है: Hari
मैनेजर 1 की उम्र है: 55
मैनेजर 1 का जेंडर है: M
मैनेजर 1 का स्तर है: 2.000000
मैनेजर 1 की भूमिका है: Senior
मैनेजर 2 का नाम है: Bob
मैनेजर 2 की उम्र है: 60
मैनेजर 2 का जेंडर है: M
मैनेजर 2 का स्तर है: 1.000000
मैनेजर 2 की भूमिका है: CEO

  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

  1. C भाषा में यूनियन टू पॉइंटर (Union to Pointer) C भाषा में यूनियन टू पॉइंटर (Union to Pointer)

    यूनियन (Union) क्या है? यूनियन एक यूजर-डिफाइंड डेटा प्रकार है जो एक ही मेमोरी स्थान को विभिन्न डेटा प्रकारों के सदस्यों के लिए साझा करने की अनुमति देता है। किसी भी समय केवल एक सदस्य ही मान रख सकता है। यूनियन की घोषणा union यूनियन_नाम { डेटा_प्रकार सदस्य1; डेटा_प्रकार सदस्य2; // ... };

  1. C भाषा में पॉइंटर एक्सेस करने की अवधारणा C भाषा में पॉइंटर एक्सेस करने की अवधारणा

    पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस 1. सामान्य चर int qty = 179; // मेमोरी में: पता 1000 पर मान 179 संग्रहीत 2. पॉइंटर घोषणा int *p; // p एक पॉइंटर चर है जो int का पता रख सकता है 3. पॉइंटर प्रारंभिकरण int qty = 175; int *p; p = &qty; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर