非常简单的程序,我只是测试该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。
这是未定义的行为
long long whatever[] = {0};
std::cout << whatever[0] << std::endl;
whatever[2] = 10; // BAD
Run Code Online (Sandbox Code Playgroud)
该代码静态初始化whatever为一个元素的数组。然后你给 赋值whatever[2]。该数组中唯一有效的索引是0。将任何内容分配给索引1或2覆盖堆栈上的重要内容或执行其他邪恶的操作。
你的意思可能是:
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)