memset初始化出错

memset初始化时只能将数组的值初始化为0或者-1

输入其他值则会出错

memset初始化出错

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原因:


很简单,memset是一个字节一个字节设置的,取要赋的值的后8位二进制进行赋值。

1的二进制是(00000000 00000000 00000000 00000001),取后8位(00000001),int型占4个字节,当初始化为1时,它把一个int的每个字节都设置为1,也就是0x01010101,二进制是00000001 00000001 00000001 00000001,十进制就是16843009。

之所以输入0,-1时正确,纯属巧合。

0,二进制是(00000000 00000000 00000000 00000000),取后8位(00000000),初始化后00000000 00000000 00000000 00000000结果是0
-1,负数在计算机中以补码存储,二进制是(11111111 11111111 11111111 11111111),取后8位(11111111),则是11111111 11111111 11111111 11111111结果也是-1

要想赋值为1,还是的乖乖for循环

 

参考

memset()初始化为1的那些事