پاس دادن آرایه به تابع

ارسال آرایه به توابع، تفاوت با متغیرهای معمولی و پارامتر اندازه

پاس دادن آرایه به تابع

قبلاً دیدید که متغیرها با مقدار (کپی) به تابع پاس داده می‌شوند. اما آرایه‌ها متفاوت هستند: در واقع آدرس آرایه ارسال می‌شود، پس تغییرات داخل تابع روی آرایه اصلی اثر می‌گذارد!

روش ۱: با براکت

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");
    }
}

نکات مهم

این مبحث بخشی از دوره آموزش کامل زبان C است.

ابزارهای مرتبط