C++ memset 是否只适用于 0 和 -1?
Does C++ memset only works for 0 and -1?
int a[2];
memset(a, 3, sizeof(a));
当我 运行 时,我得到的输出是 0 1。为什么不 3 3
Does C++ memset only works for 0 and -1?
它适用于所有字节值。
int a[2];
memset(a, 3, sizeof(a));
when I run this I am getting output as 0 1.
我对此表示怀疑。要么是你的系统坏了,要么是你弄错了。
Why not 3 3
因为那不是 std::memset
所做的。它将 每个字节 设置为您提供的值。每个字节都为 3 的多字节整数没有值 3。在值 3 中,只有最低有效字节具有值 3,更高有效字节将为 0。
除非您想要重复的字节模式,否则 std::memset
对您没有用处。如果您只是想为每个元素分配一个值,那么您应该使用 std::fill
或其朋友:
std::fill(std::begin(a), std::end(a), 3);
或者只是一个简单的循环:
for(int& i : a)
i = 3;
0 恰好是唯一在所有系统上跨所有字节宽度保留值的字节模式; -1 是另一个但仅适用于 2 的补码系统。在 1 的补码系统上,另一个模式的值为 -0。这就是为什么 std::memset
在使用这些值时并且仅在使用这些值时偶然表现得与 std::fill
相同。
int a[2];
memset(a, 3, sizeof(a));
当我 运行 时,我得到的输出是 0 1。为什么不 3 3
Does C++ memset only works for 0 and -1?
它适用于所有字节值。
int a[2]; memset(a, 3, sizeof(a));
when I run this I am getting output as 0 1.
我对此表示怀疑。要么是你的系统坏了,要么是你弄错了。
Why not 3 3
因为那不是 std::memset
所做的。它将 每个字节 设置为您提供的值。每个字节都为 3 的多字节整数没有值 3。在值 3 中,只有最低有效字节具有值 3,更高有效字节将为 0。
除非您想要重复的字节模式,否则 std::memset
对您没有用处。如果您只是想为每个元素分配一个值,那么您应该使用 std::fill
或其朋友:
std::fill(std::begin(a), std::end(a), 3);
或者只是一个简单的循环:
for(int& i : a)
i = 3;
0 恰好是唯一在所有系统上跨所有字节宽度保留值的字节模式; -1 是另一个但仅适用于 2 的补码系统。在 1 的补码系统上,另一个模式的值为 -0。这就是为什么 std::memset
在使用这些值时并且仅在使用这些值时偶然表现得与 std::fill
相同。