পুরো অ্যারে পাস করা (Call by Reference / Pointer Decay)
সি-তে অ্যারে ফাংশনে পাস করলে এটি পয়েন্টারে ডিকে (decay) হয় — শুধু প্রথম এলিমেন্টের ঠিকানা পাস হয়। ফাংশন আসল অ্যারে এক্সেস ও মডিফাই করতে পারে।
সিনট্যাক্স
// কল
func(arr); // বা func(&arr[0])
// ফাংশন প্রোটোটাইপ/ডেফিনিশন (তিনটি সমতুল্য)
void func(int arr[]);
void func(int arr[10]); // সাইজ উপেক্ষা করা হয়
void func(int *arr); // সবচেয়ে স্পষ্ট
উদাহরণ ১: অ্যারে প্রিন্ট করা
#include <stdio.h>
void display(int a[5]); // প্রোটোটাইপ
int main() {
int a[5], i;
printf("Enter 5 elements: ");
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
display(a); // অ্যারে নাম পাস = বেস এড্রেস
return 0;
}
void display(int a[5]) {
int i;
printf("Array elements: ");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
printf("\n");
}
আউটপুট
Enter 5 elements: 10 20 30 40 50 Array elements: 10 20 30 40 50
উদাহরণ ২: অ্যারে মডিফাই করা (সর্টিং)
#include <stdio.h>
void sort(int *arr, int n); // পয়েন্টার নোটেশন
int main() {
int a[5] = {50, 10, 40, 20, 30};
sort(a, 5);
printf("Sorted: ");
for (int i = 0; i < 5; i++)
printf("%d ", a[i]);
return 0;
}
void sort(int *arr, int n) {
// সিম্পল বাবল সর্ট
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-1-i; j++)
if (arr[j] > arr[j+1]) {
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
আউটপুট
Sorted: 10 20 30 40 50
গুরুত্বপূর্ণ নোট
- ফাংশনে অ্যারে পাস করলে
sizeof(arr)ফাংশন ভিতরে পয়েন্টার সাইজ দেবে, অ্যারে সাইজ নয়। সাইজ আলাদা পাস করুন। - মাল্টি-ডাইমেনশনাল অ্যারে পাস করলে সকল ডাইমেনশন বাদে প্রথমটি ছাড়া বাকিগুলো স্পেসিফাই করতে হয়:
void func(int a[][10], int rows)। - অ্যারে পাস করা সবসময় কল বাই রেফারেন্স (পয়েন্টার পাস) হয়।