Code Bye

c++对memset函数使用的几个问题,望大神指点

一个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

看下本人之前写的一个博客《 C++中数组名的二义性》
http://blog.csdn.net/hyman_c/article/details/52606143

20

数组作为函数参数时会退货为指针
void fun(int arr[]) 实际等价于 void fun(int * arr)
所以你函数中的sizeof(arr)得到的是指针的大小(32位程序为4),并不是数组的大小

10

你需要将数组的大小用一个参数传入函数

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++对memset函数使用的几个问题,望大神指点