स्ट्रक्चर के मानों को एक फंक्शन से दूसरे में ट्रांसफर करने के तीन तरीके हैं:
व्यक्तिगत मेंबर्स को फंक्शन में आर्गुमेंट्स के रूप में पास करना।
पूरे स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में पास करना।
स्ट्रक्चर के पते को फंक्शन में आर्गुमेंट के रूप में पास करना।
आइए देखते हैं कि संपूर्ण स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में कैसे पास किया जाता है।
फंक्शन कॉल में स्ट्रक्चर वेरिएबल का नाम आर्गुमेंट के रूप में दिया जाता है।
इसे फंक्शन हेडर में दूसरे स्ट्रक्चर वेरिएबल में एकत्र किया जाता है।
नुकसान यह है कि संपूर्ण स्ट्रक्चर की एक कॉपी फिर से बनाई जाती है जिससे मेमोरी बर्बाद होती है।
उदाहरण
निम्नलिखित प्रोग्राम दर्शाता है कि संपूर्ण स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में कैसे पास किया जाता है:
#include <stdio.h>
struct date {
int day;
char month[10];
int year;
};
void display(struct date d) {
printf("day=%d\n", d.day);
printf("month=%s\n", d.month);
printf("year=%d\n", d.year);
}
int main() {
struct date d;
printf("दिन, महीना और वर्ष दर्ज करें: ");
scanf("%d%s%d", &d.day, d.month, &d.year);
display(d); // संपूर्ण स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में पास करना
return 0;
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
दिन, महीना और वर्ष दर्ज करें: 18 JAN 2021 day=18 month=JAN year=2021
उदाहरण 2
एक और उदाहरण पर विचार करें, जिसमें संपूर्ण स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में पास करने को समझाया गया है।
#include <stdio.h>
// स्ट्रक्चर घोषित करना
struct add {
int var1;
int var2;
} a;
// फंक्शन घोषित करना और वापस करना
void show(struct add a) {
int sum;
sum = a.var1 + a.var2;
printf("जोड़ा गया मान %d है", sum);
}
void main() {
struct add a;
printf("वेरिएबल 1 दर्ज करें = ");
scanf("%d", &a.var1);
printf("वेरिएबल 2 दर्ज करें = ");
scanf("%d", &a.var2);
show(a); // फंक्शन कॉल करना
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
वेरिएबल 1 दर्ज करें = 20 वेरिएबल 2 दर्ज करें = 50 जोड़ा गया मान 70 है
उदाहरण 3
एक और C प्रोग्राम जो संपूर्ण स्ट्रक्चर को फंक्शन में आर्गुमेंट के रूप में पास करने को दर्शाता है:
#include <stdio.h>
// स्ट्रक्चर घोषित करना
struct student {
int s1, s2, s3;
} s[5];
// फंक्शन घोषित करना और वापस करना
void addition(struct student s[]) {
int i, sum;
for (i = 1; i < 4; i++) {
sum = s[i].s1 + s[i].s2 + s[i].s3;
printf("छात्र %d ने कुल %d अंक प्राप्त किए\n", i, sum);
}
}
void main() {
int i;
for (i = 1; i < 4; i++) {
printf("छात्र %d के विषय 1 के अंक दर्ज करें = ", i);
scanf("%d", &s[i].s1);
printf("छात्र %d के विषय 2 के अंक दर्ज करें = ", i);
scanf("%d", &s[i].s2);
printf("छात्र %d के विषय 3 के अंक दर्ज करें = ", i);
scanf("%d", &s[i].s3);
}
addition(s); // फंक्शन कॉल करना
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
छात्र 1 के विषय 1 के अंक दर्ज करें = 25 छात्र 1 के विषय 2 के अंक दर्ज करें = 89 छात्र 1 के विषय 3 के अंक दर्ज करें = 45 छात्र 2 के विषय 1 के अंक दर्ज करें = 12 छात्र 2 के विषय 2 के अंक दर्ज करें = 45 छात्र 2 के विषय 3 के अंक दर्ज करें = 89 छात्र 3 के विषय 1 के अंक दर्ज करें = 12 छात्र 3 के विषय 2 के अंक दर्ज करें = 78 छात्र 3 के विषय 3 के अंक दर्ज करें = 12 छात्र 1 ने कुल 159 अंक प्राप्त किए छात्र 2 ने कुल 146 अंक प्राप्त किए छात्र 3 ने कुल 102 अंक प्राप्त किए