স্ট্রাকচারের মানগুলো এক ফাংশন থেকে অন্য ফাংশনে ট্রান্সফার করার তিনটি পদ্ধতি আছে। সেগুলো হলো −
ফাংশনে আর্গুমেন্ট হিসেবে ইনডিভিজুয়াল মেম্বার পাস করা।
ফাংশনে আর্গুমেন্ট হিসেবে সম্পূর্ণ স্ট্রাকচার পাস করা।
ফাংশনে আর্গুমেন্ট হিসেবে স্ট্রাকচারের অ্যাড্রেস পাস করা।
এখন, স্ট্রাকচারের অ্যাড্রেস ফাংশনে আর্গুমেন্ট হিসেবে কিভাবে পাস করতে হয় সেটি বুঝতে পারি।
স্ট্রাকচারের অ্যাড্রেসটি ফাংশনে আর্গুমেন্ট হিসেবে পাস করা হয়।
ফাংশন হেডারে স্ট্রাকচারের পয়েন্টার হিসেবে এটি সংগ্রহ করা হয়।
সুবিধা
ফাংশনে স্ট্রাকচারের অ্যাড্রেস আর্গুমেন্ট হিসেবে পাস করার সুবিধাগুলো হলো −
কপি তৈরি করার দরকার নাই, তাই মেমরির অপচয় হয় না।
ফাংশন ইনডায়রেক্টলি পুরো স্ট্রাকচার অ্যাক্সেস করে কাজ করতে পারে, তাই মান রিটার্ন করার দরকার নেই।
উদাহরণ
নিচের প্রোগ্রামটি স্ট্রাকচারের অ্যাড্রেস ফাংশনে আর্গুমেন্ট হিসেবে পাস করার 모습을 보여준다 −
#includestruct date{ int day; char month[10]; int year; }; int main(){ struct date d; printf("দিন, মাস ও বছর লিখুন: "); 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); }
আউটপুট
উপরোক্ত প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যায় −
দিন, মাস ও বছর লিখুন: 20 MAR 2021 day=20 month=MAR year=2021
উদাহরণ
নিচে একটি C প্রোগ্রাম দেওয়া হলো যা স্ট্রাকচার ও ফাংশনকে ডেমনস্ট্রেট করে সম্পূর্ণ ফাংশনকে আর্গুমেন্ট হিসেবে কল করে। এই পদ্ধতিতে মেমরির অপচয় হয় না, কারণ আবার কপি তৈরি করার দরকার নেই এবং রিটার্ন মানও দরকার নেই।
#include// স্ট্রাকচার ঘোষণা // 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("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(){ // ফর লুপের জন্য ভেরিয়েবল ঘোষণা // int i; // পয়েন্টারের সাথে স্ট্রাকচার ঘোষণা // struct student *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); // বাফার ক্লিয়ার করা // printf("Enter the Grade of student %d :", i+1); gets(s[i].Grade); } // স্ট্রাকচারের সাথে পয়েন্টার অ্যাসাইন করা // p = &s; // ফাংশন কল করা // 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