ऐसे तीन तरीके हैं जिनके द्वारा संरचना के मूल्यों को एक फ़ंक्शन से दूसरे फ़ंक्शन में स्थानांतरित किया जा सकता है। वे इस प्रकार हैं -
-
कार्य करने के लिए अलग-अलग सदस्यों को तर्क के रूप में पास करना।
-
कार्य करने के लिए एक तर्क के रूप में संपूर्ण संरचना को पारित करना।
-
संरचना के पते को कार्य करने के लिए तर्क के रूप में पास करना।
अब, आइए समझते हैं कि कार्य करने के लिए एक तर्क के रूप में संरचना के पते को कैसे पारित किया जाए।
-
संरचना का पता फ़ंक्शन के तर्क के रूप में पारित किया जाता है।
-
इसे फ़ंक्शन हेडर में संरचना के लिए एक पॉइंटर में एकत्र किया जाता है।
फायदे
कार्य के तर्क के रूप में संरचना के पते को पारित करने के फायदे इस प्रकार हैं -
-
स्मृति की कोई बर्बादी नहीं है क्योंकि दोबारा प्रतिलिपि बनाने की कोई आवश्यकता नहीं है।
-
मानों को वापस करने की कोई आवश्यकता नहीं है, क्योंकि फ़ंक्शन अप्रत्यक्ष रूप से संपूर्ण संरचना तक पहुंच सकता है और फिर उस पर काम कर सकता है।
उदाहरण
निम्न प्रोग्राम दिखाता है कि किसी संरचना के पते को कार्य करने के लिए तर्क के रूप में कैसे पास किया जाए -
#include<stdio.h> struct date{ int day; char month[10]; int year; }; int main(){ struct date d; printf("enter the day,month and year:"); scanf("%d%s%d",&d.day,d.month,&d.year); display(&d); return 0; } void display(struct date *p){ printf("day=%d\n",p->day); printf("month=%s\n",p->month); printf("year=%d\n",p->year); }
आउटपुट
जब उपरोक्त प्रोग्राम को निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
enter the day, month and year:20 MAR 2021 day=20 month=MAR year=2021
उदाहरण
पूरे फ़ंक्शन को एक तर्क के रूप में कॉल करके संरचनाओं और कार्यों को प्रदर्शित करने के लिए नीचे एक सी प्रोग्राम दिया गया है। कॉलिंग फ़ंक्शन की इस पद्धति के कारण, स्मृति की कोई बर्बादी नहीं होती है, क्योंकि हमें फिर से कॉपी करने और मान वापस करने की आवश्यकता नहीं होती है।
#include<stdio.h> //Declaring structure// struct student{ char Name[100]; int Age; float Level; char Grade[50]; char temp; }s[5]; //Declaring and returning Function// void show(struct student *p){ //Declaring variable for For loop within the function// int i; //For loop for printing O/p// for(i=1;i<3;i++){ printf("The Name of student %d is : %s\n",i,p->Name); printf("The Age of student %d is : %d\n",i,p->Age); printf("The Level of student %d is : %f\n",i,p->Level); printf("The Grade of student %d is : %s\n",i,p->Grade); p++; } } void main(){ //Declaring variable for for loop// int i; //Declaring structure with pointer// struct student *p; //Reading User I/p// for(i=0;i<2;i++){ printf("Enter the Name of student %d : ",i+1); gets(s[i].Name); printf("Enter the Age of student %d : ",i+1); scanf("%d",&s[i].Age); printf("Enter the Level of student %d :",i+1); scanf("%f",&s[i].Level); scanf("%c",&s[i].temp);//Clearing Buffer// printf("Enter the Grade of student %d :",i+1); gets(s[i].Grade); } //Assigning pointer to structure// p=&s; //Calling function// show(&s); }
आउटपुट
जब उपरोक्त प्रोग्राम को निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
Enter the Name of student 1 : Lucky Enter the Age of student 1 : 27 Enter the Level of student 1 :2 Enter the Grade of student 1 :A Enter the Name of student 2 : Pinky Enter the Age of student 2 : 29 Enter the Level of student 2 :1 Enter the Grade of student 2 :B The Name of student 1 is : Lucky The Age of student 1 is : 27 The Level of student 1 is : 2.000000 The Grade of student 1 is : A The Name of student 2 is : Pinky The Age of student 2 is : 29 The Level of student 2 is : 1.000000 The Grade of student 2 is : B