memset
函数常被我们用来初始化数组,然而有个坑可能会被我们踩到。
静态数组初始化
一般情形是这样的:
1 |
|
这样做是正确的,通过输出可以看到正确结果。
注意:这份代码中arr
是个静态数组。
动态数组初始化
1 |
|
这份代码运行后,我们发现memset
并没有把数组元素全部初始化为0。
注意:arr
是个动态数组
原因如下:
我们可以在上面两份代码中输出sizeof(arr)
,可以发现结果是不一样的。
因为在第一份代码中arr
代表一个数组,第二份代码中arr
代表一个指针。(关于数组名是什么这个问题可以参考我的另一篇文章:https://www.cnblogs.com/chouxianyu/p/11322951.html,其实这个问题我觉得是编译原理应该会学到的)
解决方案
初始化数组(静态动态均可)时,把代码改成memset(arr,0,sizeof(int)*10);
,int
是数组元素的类型,10
是数组元素个数。
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!