这是因为 memset 是根据字节来初始化的
举个例子
int main()
{
int a[10];
//memset(a, 0, sizeof(int)*10);
//memset(a, 1, sizeof(int)*10);
memset(a, 2, sizeof(int)*10);
for (auto e : a)
cout << e << " ";
cout << endl;
}
这里实际上是这样的
//因为一个 int 是四个字节,所以 memset 会把每个字节初始化为你给的值
memset(a, 1, sizeof(int)*10)
00000001 00000001 00000001 00000001 //每个字节初始化为1
memset(a, 2, sizeof(int)*10)
00000010 00000010 00000010 00000010 每个字节初始化为2
输出结果如下
这样就能解释为什么 memset 只能初始化 0 了,因为即使按字节初始化 0 也是不会改变的。