[英]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)
其中, a
是int *
。 然后,當你從main()
傳遞數組a
,它將被衰減為funct()
的指針。 因此, funct()
sizeof(a)
只會給出指針的大小。
要滿足您的要求,您還必須從main()
傳遞大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.