স্ট্রাকচারের পৃথক মেম্বার পাস করা (Call by Value)
স্ট্রাকচারের প্রতিটি মেম্বার আলাদা আলাদা ভ্যালু হিসেবে ফাংশনে পাস করা হয়। ফাংশন হেডারে সেগুলো সাধারণ ভেরিয়েবল হিসেবে রিসিভ করা হয়।
বিশেষত্ব
- প্রতিটি মেম্বার আলাদা আর্গুমেন্ট।
- ফাংশন আসল স্ট্রাকচার মডিফাই করতে পারে না (কপি পাস হয়)।
- ছোট স্ট্রাকচার বা কিছু মেম্বার পাস করার জন্য উপযুক্ত।
উদাহরণ প্রোগ্রাম: ছাত্রের মার্কস যোগফল
#include <stdio.h>
struct student {
int s1, s2, s3;
} s[5];
void addition(int a, int b, int c) {
int sum = a + b + c;
printf("Total marks = %d\n", sum);
}
int main() {
int i;
for (i = 0; i < 3; i++) {
printf("Student %d:\n", i+1);
printf("Subject 1: "); scanf("%d", &s[i].s1);
printf("Subject 2: "); scanf("%d", &s[i].s2);
printf("Subject 3: "); scanf("%d", &s[i].s3);
}
for (i = 0; i < 3; i++) {
printf("Student %d: ", i+1);
addition(s[i].s1, s[i].s2, s[i].s3);
}
return 0;
}
আউটপুট
Student 1: Subject 1: 80 Subject 2: 75 Subject 3: 90 Student 2: Subject 1: 60 Subject 2: 70 Subject 3: 65 Student 3: Subject 1: 50 Subject 2: 55 Subject 3: 60 Student 1: Total marks = 245 Student 2: Total marks = 195 Student 3: Total marks = 165
তুলনা: পুরো স্ট্রাকচার vs পৃথক মেম্বার পাস
| দিক | পুরো স্ট্রাকচার (by reference) | পৃথক মেম্বার (by value) |
|---|---|---|
| সিনট্যাক্স | func(&s) | func(s.a, s.b) |
| ফাংশন প্যারামিটার | struct tag *ptr | int a, int b |
| মূল ডেটা পরিবর্তন | সম্ভব | সম্ভব নয় |
| মেমরি খরচ | কম (শুধু ঠিকানা) | বেশি (প্রতিটি মেম্বারের কপি) |