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

John Connor 2016-10-08 06:40:55
一个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);
}

求解,不胜感激!
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-10-08
  • 打赏
  • 举报
回复
你需要将数组的大小用一个参数传入函数
paschen 版主 2016-10-08
  • 打赏
  • 举报
回复
数组作为函数参数时会退货为指针 void fun(int arr[]) 实际等价于 void fun(int * arr) 所以你函数中的sizeof(arr)得到的是指针的大小(32位程序为4),并不是数组的大小
HymanLiuTS 2016-10-08
  • 打赏
  • 举报
回复
看下我之前写的一个博客《 C++中数组名的二义性》 http://blog.csdn.net/hyman_c/article/details/52606143
John Connor 2016-10-08
  • 打赏
  • 举报
回复
那要怎么写才可以初始化、然后在被调用函数里面使用sizeof呢?
ztenv 版主 2016-10-08
  • 打赏
  • 举报
回复
void fun(int arr[])//到这一步时,已经变成了int *arr;

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧