为什么 sizeof() 不打印 16 个字节而不是 8 个字节?

Sha*_*cob 0 c++ sizeof

非常简单的程序,我只是测试该sizeof()功能并尝试看看它是否有效。如果 sizeof() 确实以位为单位返回内容,那么当我有这两个元素时,它不应该返回 16 而不是 8 吗?既然long longC++ 中是 8 个字节,而我有两个元素?


int main()
{
    long long whatever[] = {0};
    std::cout << whatever[0] << std::endl;
    whatever[2] = 10;

    std::cout << "The size of this array is " << sizeof(whatever[0] + whatever[2]) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*nde 10

您测量的不是数组的大小,而是两个 s 之和的大小long long。IE,

sizeof(whatever[0] + whatever[2])
Run Code Online (Sandbox Code Playgroud)

本质上是一样的

sizeof(long long)
Run Code Online (Sandbox Code Playgroud)

你指出的是8。


sel*_*bie 7

这是未定义的行为

long long whatever[] = {0};
std::cout << whatever[0] << std::endl;
whatever[2] = 10;  // BAD
Run Code Online (Sandbox Code Playgroud)

该代码静态初始化whatever为一个元素的数组。然后你给 赋值whatever[2]。该数组中唯一有效的索引是0。将任何内容分配给索引12覆盖堆栈上的重要内容或执行其他邪恶的操作。

你的意思可能是:

long long whatever[2] = {0};
std::cout << whatever[0] << std::endl;
whatever[1] = 10; 

std::cout << "The size of this array is " << sizeof(whatever) << std::endl;
Run Code Online (Sandbox Code Playgroud)

  • 在 C++ 中,使用 `std::vector` 而不是数组。 (2认同)