پاس دادن آرایه به تابع
ارسال آرایه به توابع، تفاوت با متغیرهای معمولی و پارامتر اندازه
پاس دادن آرایه به تابع
قبلاً دیدید که متغیرها با مقدار (کپی) به تابع پاس داده میشوند. اما آرایهها متفاوت هستند: در واقع آدرس آرایه ارسال میشود، پس تغییرات داخل تابع روی آرایه اصلی اثر میگذارد!
روش ۱: با براکت
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d\n", arr[i]);
}
}
روش ۲: با اشارهگر (معادل روش ۱)
void printArray(int *arr, int size) {
// کاملاً معادل روش بالا
}
پارامتر size چرا لازم است؟
داخل تابع نمیتوان با sizeof اندازه واقعی آرایه را به دست آورد (چون فقط آدرس ارسال شده). پس همیشه اندازه را جداگانه بفرستید:
printArray(numbers, 5);
مثال: تغییر آرایه داخل تابع
void doubleAll(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2; // آرایه اصلی تغییر میکند!
}
}
مثال: تابع جمع عناصر
int sumArray(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
پاس دادن آرایه دوبعدی
برای آرایه دوبعدی، بعد دوم باید مشخص باشد:
void printMatrix(int m[][3], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", m[i][j]);
}
printf("\n");
}
}
نکات مهم
- آرایهها عملاً با ارجاع پاس داده میشوند — تغییرات دیده میشوند
- اگر نمیخواهید تابع آرایه را تغییر دهد، آن را const کنید:
void print(const int arr[], int size) - همیشه اندازه آرایه را بهعنوان پارامتر جدا ارسال کنید
این مبحث بخشی از دوره آموزش کامل زبان C است.