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.
我对以下代码感到困惑:
#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.