memset() 没有按预期工作

memset() does not work as expected

我对以下代码感到困惑:

#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

有人可以解释这种奇怪行为的原因吗?

memset 会将传递的内存视为指向字节的指针。每个字节将设置为 10,而不是每个 int。

所以你为每个整数打印出 0x0a0a0a0a,或 168430090。

因为 int 超过一个字节长。 memset() 用给定的值填充每个字节。所以,你的 4 字节整数的每个字节都包含一个 10.