为什么memset()输出这个?

int main()
{

int ia1[50];
memset(ia1,5,50*sizeof(int));
cout<<ia1[10];

system("pause");
return 0;

}

clipboard.png??

阅读 3.2k
3 个回答

因为你把每个字节设置成了 5,也就是二进制的 101
ia1[10] 或任何一个 ia1[i] 都是 4 字节组成的整数,int 占 4 字节。
所以 ia1[10] 即为 00000101 00000101 00000101 00000101(二进制)。
就等于 2^26 + 2^24 + 2^18 + 2^16 + 2^10 + 2^8 + 5,这里 x^y 表示 x 的 y 次方。
你用计算机摁一下,精确的等于 84215045
教训是,memset 只该用来清空一片内存,即永远设 0。

因为memset是按字节的.
具体过程楼上说了, 稍微做点补充, 除了0, -1也是可以都置成-1

只有0和-1才能这样初始化吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题