وقتی یک متغیر عادی رو به تابع میفرستیم، یک کپی از مقدارش ساخته میشه. اما در مورد آرایهها، زبان C برای جلوگیری از کپی شدن دادههای حجیم و افت سرعت برنامه، تنها آدرس اولین عنصر آرایه در حافظه رو به تابع ارسال میکنه.
به زبان سادهتر، تابع جدید به همون آرایه اصلی دسترسی پیدا میکنه. بنابراین، هر تغییری که روی آرایه در داخل تابع انجام بدیم مستقیماً روی آرایه اصلی اعمال میشه.
مثلا
#include <stdio.h>
void modifyArray(int arr[]) {
arr[0] = 99;
}
int main() {
int numbers[3] = {1, 2, 3};
modifyArray(numbers);
printf("First element: %d\n", numbers[0]);
// output : 99
return 0;
}
یه نکتهای هم هست که بهش Array Decay میگن.
از اونجا که آرایه هنگام ارسال به تابع، صرفاً به یک آدرس (pointer) تبدیل میشه، ماهیت اصلی خودش رو به عنوان مجموعهای با طول مشخص از دست میده و تابع گیرنده سایز اونو نمیدونه.
اگر در داخل تابع از دستور sizeof استفاده کنیم، به جای حجم کل آرایه، تنها حجم یک پوینتر نمایش داده میشه. به همین دلیل توی زبان C، همیشه باید طول آرایه رو هم در زمان فراخوانی محاسبه کنیم و به عنوان یک آرگومان جداگانه به تابع بفرستیم:
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
printf("%d\n", arr[i]);
}
}#c
@CleverDevs - @CleverDevsGp