स्ट्रक्चर के मानों को एक फंक्शन से दूसरे में ट्रांसफर करने के तीन तरीके हैं:
व्यक्तिगत मेंबर्स को फंक्शन में आर्गुमेंट्स के रूप में पास करना।
पूरे स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में पास करना।
स्ट्रक्चर के पते को फंक्शन में आर्गुमेंट के रूप में पास करना।
अब, आइए समझते हैं कि स्ट्रक्चर के पते को फंक्शन में आर्गुमेंट के रूप में कैसे पास किया जाता है।
स्ट्रक्चर का पता फंक्शन को आर्गुमेंट के रूप में पास किया जाता है।
इसे फंक्शन हेडर में स्ट्रक्चर के पॉइंटर में एकत्र किया जाता है।
लाभ
स्ट्रक्चर के पते को फंक्शन में आर्गुमेंट के रूप में पास करने के लाभ निम्नलिखित हैं:
कोई मेमोरी बर्बाद नहीं होती क्योंकि कॉपी बनाने की आवश्यकता नहीं होती।
मान वापस करने की आवश्यकता नहीं होती, क्योंकि फंक्शन अप्रत्यक्ष रूप से पूरे स्ट्रक्चर को एक्सेस कर सकता है और उस पर काम कर सकता है।
उदाहरण
निम्नलिखित प्रोग्राम दर्शाता है कि स्ट्रक्चर के पते को फंक्शन में आर्गुमेंट के रूप में कैसे पास किया जाता है:
#include <stdio.h>
struct date {
int day;
char month[10];
int year;
};
void display(struct date *p) {
printf("day=%d\n", p->day);
printf("month=%s\n", p->month);
printf("year=%d\n", p->year);
}
int main() {
struct date d;
printf("दिन, महीना और वर्ष दर्ज करें: ");
scanf("%d%s%d", &d.day, d.month, &d.year);
display(&d);
return 0;
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
दिन, महीना और वर्ष दर्ज करें: 20 MAR 2021 day=20 month=MAR year=2021
उदाहरण 2
नीचे दिया गया C प्रोग्राम स्ट्रक्चर और फंक्शन्स को संपूर्ण फंक्शन को आर्गुमेंट के रूप में कॉल करके प्रदर्शित करता है। इस कॉलिंग विधि के कारण, मेमोरी की कोई बर्बादी नहीं होती, क्योंकि हमें फिर से कॉपी करने और मान वापस करने की आवश्यकता नहीं होती।
#include <stdio.h>
// स्ट्रक्चर घोषित करना
struct student {
char Name[100];
int Age;
float Level;
char Grade[50];
char temp;
} s[5];
// फंक्शन घोषित करना और वापस करना
void show(struct student *p) {
int i;
for (i = 1; i < 3; i++) {
printf("छात्र %d का नाम है: %s\n", i, p->Name);
printf("छात्र %d की उम्र है: %d\n", i, p->Age);
printf("छात्र %d का स्तर है: %f\n", i, p->Level);
printf("छात्र %d की ग्रेड है: %s\n", i, p->Grade);
p++;
}
}
void main() {
int i;
struct student *p;
// यूजर इनपुट पढ़ना
for (i = 0; i < 2; i++) {
printf("छात्र %d का नाम दर्ज करें: ", i+1);
gets(s[i].Name);
printf("छात्र %d की उम्र दर्ज करें: ", i+1);
scanf("%d", &s[i].Age);
printf("छात्र %d का स्तर दर्ज करें: ", i+1);
scanf("%f", &s[i].Level);
scanf("%c", &s[i].temp); // बफर क्लियर करना
printf("छात्र %d की ग्रेड दर्ज करें: ", i+1);
gets(s[i].Grade);
}
// स्ट्रक्चर को पॉइंटर असाइन करना
p = &s;
// फंक्शन कॉल करना
show(&s);
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
छात्र 1 का नाम दर्ज करें: Lucky छात्र 1 की उम्र दर्ज करें: 27 छात्र 1 का स्तर दर्ज करें: 2 छात्र 1 की ग्रेड दर्ज करें: A छात्र 2 का नाम दर्ज करें: Pinky छात्र 2 की उम्र दर्ज करें: 29 छात्र 2 का स्तर दर्ज करें: 1 छात्र 2 की ग्रेड दर्ज करें: B छात्र 1 का नाम है: Lucky छात्र 1 की उम्र है: 27 छात्र 1 का स्तर है: 2.000000 छात्र 1 की ग्रेड है: A छात्र 2 का नाम है: Pinky छात्र 2 की उम्र है: 29 छात्र 2 का स्तर है: 1.000000 छात्र 2 की ग्रेड है: B