簡體   English   中英

C:將數組傳遞給函數並在接收函數中迭代

[英]C: pass array to a function and iterate over in recipient function

我想將數組傳遞給C中的函數並迭代它。 我有這個代碼:

#include <stdio.h>

int funct(int * a);

int main(int argc, char ** argv){
    int a[5] = {0};
    int b[5] = {1, 1};

    printf("Size of cache: %d\n", sizeof(a));
    printf("Array values:\n");
    printf("Numb of elments in a[]: %d\n", (sizeof(a) / sizeof(a[0])));

    for(int i = 0; i < (sizeof(a) / sizeof(a[0])); i++){
        printf("for loop\n");
        printf("%d\n", a[i]);
    }
    printf("\n");

    printf("Size of cache: %d\n", sizeof(b));
    printf("Array values:\n");
    printf("Numb of elments in a[]: %d\n", (sizeof(b) / sizeof(b[0])));

    for(int i = 0; i < (sizeof(b) / sizeof(b[0])); i++){
        printf("for loop\n");
        printf("%d\n", b[i]);
    }
    printf("\n");

    funct(a);
    funct(b);

    return 0;
}

int funct(int * a){

    printf("Size of cache: %d\n", sizeof(a));
    printf("Numb of elements in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
    printf("Array values:\n");

    for(int i = 0; i < (sizeof(a) / sizeof(a[0])); i++){
        printf("sizeof(a): %d\n",sizeof(a));
        printf("sizeof(a[0]): %d\n",sizeof(a[0]));
        printf("for loop\n");
        printf("%d\n", a[i]);
    }
    printf("\n");

    return 0;
}

結果是:

 Size of cache: 20 Array values: Numb of elments in a[]: 5 for loop 0 for loop 0 for loop 0 for loop 0 for loop 0 Size of cache: 20 Array values: Numb of elments in a[]: 5 for loop 1 for loop 1 for loop 0 for loop 0 for loop 0 Size of cache: 4 Numb of elements in a[]: 1 Array values: sizeof(a): 4 sizeof(a[0]): 4 for loop 0 Size of cache: 4 Numb of elements in a[]: 1 Array values: sizeof(a): 4 sizeof(a[0]): 4 for loop 1 

請解釋為什么我不能在函數內迭代數組 - 我做錯了什么(i)以及如何正確地執行它(ii)。 謝謝

因為sizeof運算符給你一個指針的大小,而不是數組中的元素數,你應該像這樣寫你的函數

int funct(int * a, int count){

    printf("Size of cache: %d\n", sizeof(a));
    printf("Numb of elements in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
    printf("Array values:\n");

    for(int i = 0; i < count; i++){
        printf("sizeof(a): %d\n",sizeof(a));
        printf("sizeof(a[0]): %d\n",sizeof(a[0]));
        printf("for loop\n");
        printf("%d\n", a[i]);
    }
    printf("\n");

    return 0;
}

然后在main()函數調用中

funct(a, sizeof(a) / sizeof(a[0]));
funct(b, sizeof(b) / sizeof(b[0]));

你無法獲得指針所指向的元素數,因此唯一的方法是將其作為函數參數與數組一起傳遞。

另請注意,您沒有正確初始化數組,並且在嘗試打印數組元素時將是未定義的行為。

sizeof(a)將給出指針的大小而不是傳遞的數組,因為a是函數funct的指針。

功能原型是

int funct(int * a)

其中, aint * 然后,當你從main()傳遞數組a ,它將被衰減funct()的指針。 因此, funct() sizeof(a)只會給出指針的大小。

要滿足您的要求,您還必須從main()傳遞大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM