সি প্রোগ্রামিং ভাষায় ফাংশনের মাধ্যমে প্যারামিটার পাসিং সাধারণত দুটি পদ্ধতিতে করা হয়: পাস-বাই-ভ্যালু এবং পাস-বাই-রেফারেন্স। এই পদ্ধতিগুলির মাধ্যমে ফাংশনে ভ্যারিয়েবল পাস করা হয় এবং সেগুলি ফাংশনের ভিতরে ব্যবহৃত হয়।
১. পাস-বাই-ভ্যালু (Pass-by-Value)
পাস-বাই-ভ্যালু পদ্ধতিতে ভ্যারিয়েবলের মান কেবলমাত্র ফাংশনে কপি করা হয়। এর মানে হল, ফাংশনের ভিতরে সেই কপিকৃত মান ব্যবহার করা হয়, মূল ভ্যারিয়েবলের উপর কোনো পরিবর্তন করা হলে সেটি মূল ভ্যারিয়েবলে প্রভাব ফেলে না।
উদাহরণ:
ধরা যাক, আমরা একটি ফাংশন তৈরি করছি যা দুটি সংখ্যার মান অদল-বদল (swap) করার চেষ্টা করবে। তবে পাস-বাই-ভ্যালু পদ্ধতিতে মূল মানগুলো পরিবর্তিত হবে না।
#include <stdio.h>
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
printf("Inside swap function: x = %d, y = %d\n", x, y);
}
int main() {
int a = 5, b = 10;
printf("Before swap: a = %d, b = %d\n", a, b);
swap(a, b); // পাস-বাই-ভ্যালু, শুধুমাত্র কপি পাঠানো হচ্ছে
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
আউটপুট:
Before swap: a = 5, b = 10
Inside swap function: x = 10, y = 5
After swap: a = 5, b = 10
বিবরণ:
- এখানে
swapফাংশনেaএবংbএর মান কপি করা হয়েছে এবং সেই কপিগুলির মান অদল-বদল করা হয়েছে। তবে ফাংশনের বাইরেaএবংbএর আসল মান অপরিবর্তিত থাকে, কারণ এটি পাস-বাই-ভ্যালু দ্বারা পাস করা হয়েছে।
২. পাস-বাই-রেফারেন্স (Pass-by-Reference)
পাস-বাই-রেফারেন্স পদ্ধতিতে ভ্যারিয়েবলের ঠিকানা (address) ফাংশনে পাঠানো হয়। এর ফলে ফাংশনের ভিতরে ভ্যারিয়েবলের আসল মান পরিবর্তন করা সম্ভব হয়।
সি ভাষায় সরাসরি পাস-বাই-রেফারেন্স নেই, তবে পয়েন্টার ব্যবহার করে আমরা পাস-বাই-রেফারেন্সের মতো আচরণ করতে পারি।
উদাহরণ:
একই swap ফাংশন এখানে পাস-বাই-রেফারেন্স পদ্ধতিতে তৈরি করা হয়েছে। পয়েন্টারের মাধ্যমে দুটি সংখ্যার মান অদল-বদল করা হবে।
#include <stdio.h>
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
printf("Inside swap function: x = %d, y = %d\n", *x, *y);
}
int main() {
int a = 5, b = 10;
printf("Before swap: a = %d, b = %d\n", a, b);
swap(&a, &b); // পাস-বাই-রেফারেন্স, ঠিকানা পাঠানো হচ্ছে
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
আউটপুট:
Before swap: a = 5, b = 10
Inside swap function: x = 10, y = 5
After swap: a = 10, b = 5
বিবরণ:
- এখানে
swapফাংশনেaএবংbএর ঠিকানা পাস করা হয়েছে। ফাংশনের ভিতরে পয়েন্টার*xএবং*yএর মাধ্যমে আসল ভ্যারিয়েবলের মান পরিবর্তন করা সম্ভব হয়েছে। এর ফলে মূল ভ্যারিয়েবলaএবংbএর মানও পরিবর্তিত হয়েছে।
সংক্ষেপে পার্থক্য:
| বৈশিষ্ট্য | পাস-বাই-ভ্যালু | পাস-বাই-রেফারেন্স |
|---|---|---|
| প্রকৃতি | ভ্যারিয়েবলের মান কপি করা হয় | ভ্যারিয়েবলের ঠিকানা পাস করা হয় |
| মূল ভ্যারিয়েবলে প্রভাব | পরিবর্তন হয় না | পরিবর্তন সরাসরি মূল ভ্যারিয়েবলে প্রভাব ফেলে |
| প্রয়োগ পদ্ধতি | সাধারণভাবে প্যারামিটার পাস করা হয় | পয়েন্টারের মাধ্যমে পাস করা হয় |
পাস-বাই-ভ্যালু পদ্ধতিতে মূল ডেটা অপরিবর্তিত থাকে, তবে পাস-বাই-রেফারেন্সের মাধ্যমে মূল ডেটায় সরাসরি পরিবর্তন করা যায়।