一个int类型的数组arr,在定义数组的那个定义域中可以用sizeof(arr)/sizeof(0)来获取数组元素个数,或用memset(arr,0,sizeof(arr));将数组初始化,但当把这个arr传递到其他函数中使用时,两个写法都会保存。
void fun(int arr[]){ int len = sizeof(arr)/sizeof(0);//报错 memset(arr,0,sizeof(arr));//报错 Sizeof on array function parameter will return size of "int *" instead of "int[]" } int main(){ int arr[]; int len = sizeof(arr)/sizeof(0);//正确 memset(arr,0,sizeof(arr));//正确 fun(arr); }
求指导,不胜感激!
解决方案
10
void fun(int arr[])//到这一步时,已经变成了int *arr;
25
20
数组作为函数参数时会退货为指针
void fun(int arr[]) 实际等价于 void fun(int * arr)
所以你函数中的sizeof(arr)得到的是指针的大小(32位程序为4),并不是数组的大小
void fun(int arr[]) 实际等价于 void fun(int * arr)
所以你函数中的sizeof(arr)得到的是指针的大小(32位程序为4),并不是数组的大小
10
你需要将数组的大小用一个参数传入函数