使用 memset 初始化整个数组

ish*_*sal 4 c++ arrays memset

我已经用值 1 初始化了整个数组,但输出显示了一些垃圾值。但是,如果我使用 0 或 -1 代替 1,该程序可以正常工作。那么,对于可以使用 memset 初始化的值类型是否有一些限制。

 int main(){
    int a[100];
    memset(a,1,sizeof(a));
    cout<<a[5]<<endl;
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

Sna*_*ipe 6

换句话说,memset 将数组的每个字节设置为指定的值。

这适用于 0 和 -1 的原因是因为它们在任意大小上使用相同的重复模式:

(int) -1 is 0xffffffff
(char) -1 is 0xff
Run Code Online (Sandbox Code Playgroud)

因此填充内存区域0xff将有效地用 -1 填充数组。

但是,如果您用 填充它,则将1每个字节设置为0x01; 因此,这与将每个整数设置为 value 相同0x01010101,这不太可能是您想要的。


Kar*_*ath 3

Memset 填充字节,来自cppreference

将值 ch 转换为 unsigned char 并将其复制到 dest 指向的对象的每个前 count 个字符中。

int需要几个字节,例如 32 位 int 将填充 1,1,1,1(在基数 256 中,字节序在这种情况下并不重要),然后您将其错误地解释为“垃圾”值。