原先就碰到过这个问题,一直不知道为什么。
考虑下面代码:
#include<stdio.h>
void fun(int arr[])
{
int i;
/* sizeof should not be used here to get number
of elements in array*/
int arr_size = sizeof(arr)/sizeof(arr[0]); /* incorrect use of siseof*/
for (i = 0; i < arr_size; i++)
{
arr[i] = i; /*executed only once */
}
}
int main()
{
int i;
int arr[4] = {0, 0 ,0, 0};
fun(arr);
/* use of sizeof is fine here*/
for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
printf(" %d " ,arr[i]);
getchar();
return 0;
}
在fun的函数里面的for函数只会被调用一次,arr_size算出来是1.原来C里面所有的传递都是传递的指针,
所以fun的两个函数,相当于是int*,和int. int*/int = 1;