我已经用值 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)
换句话说,memset 将数组的每个字节设置为指定的值。
这适用于 0 和 -1 的原因是因为它们在任意大小上使用相同的重复模式:
(int) -1 is 0xffffffff
(char) -1 is 0xff
Run Code Online (Sandbox Code Playgroud)
因此填充内存区域0xff将有效地用 -1 填充数组。
但是,如果您用 填充它,则将1每个字节设置为0x01; 因此,这与将每个整数设置为 value 相同0x01010101,这不太可能是您想要的。
Memset 填充字节,来自cppreference:
将值 ch 转换为 unsigned char 并将其复制到 dest 指向的对象的每个前 count 个字符中。
您int需要几个字节,例如 32 位 int 将填充 1,1,1,1(在基数 256 中,字节序在这种情况下并不重要),然后您将其错误地解释为“垃圾”值。