我对以下代码感到困惑:
#include<iostream>
#include<cstring>
int main()
{
int arr[3][4];
memset(arr, 10, sizeof(arr));
for(int i = 0; i < 3; ++i)
{
for(int j = 0; j < 4; ++j)
std::cout<<arr[i][j]<<" ";
std::cout<<"\n";
}
return 0;
}
输出:
168430090 168430090 168430090 168430090
168430090 168430090 168430090 168430090
168430090 168430090 168430090 168430090
我原本预计会运行上面的代码会打印
10 10 10 10
10 10 10 10
10 10 10 10
有人可以解释这种奇怪行为的原因吗?
答案 0 :(得分:6)
Becase int
超过一个字节。 memset()
使用给定值填充每个字节。因此,4字节整数的每个字节都包含一个10。
答案 1 :(得分:3)
memset会将传递的内存视为指向字节的指针。每个字节将设置为10,而不是每个int。
所以你要为每个int打印出0x0a0a0a0a或168430090。