为什么 memset 在 2d 数组中正确填充 0 但无法在该数组中填充 1?

why memset fill 0 in 2d array correctly but fail to fill 1 in that array?

我尝试使用 memset 用 1 填充二维数组。

int arr[3][3];
memset(arr,1,sizeof(arr));
Result :  
16843009 16843009 16843009   
16843009 16843009 16843009  
16843009 16843009 16843009
memset(arr,1,sizeof(arr));

处理每个字节。一个 int 有四个字节(可能会改变),所以 memset 1 写在每个字节上,使 int 值变为 16843009(二进制 00000001000000010000000100000001)。

memset 在字节级别上工作,而不考虑其他步长。您的 int 有 4 个字节大,因此每个字节都设置为 00000001b,因此

00000001000000010000000100000001b = 16843009