为什么 sizeof 在 C++ 中给出的字节数不正确?

bim*_*mbi -6 c++ memory arrays pointers

我正在尝试获取 C++ 中数组的大小,以便稍后用于处理。为什么这会产生 16?

#include <iostream>

using namespace std;

int main()
{
    int a[4];
    cout << sizeof(a) << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不应该给20吗?因为这个数组从 a[0] 到 a[4] 基本上有 20 个字节?可以通过以下方式验证元素的大小 -

sizeof(a[0])
Run Code Online (Sandbox Code Playgroud)

现在这是 4。16/4 = 4,这意味着有 4 个 4 字节的块,而实际上应该是 5。为什么会这样?

PS 我的主要困惑源于获取 sizeof(a[4]) - 它是 4。因为它给出了输出 4 - 我认为它是数组的一部分。

abe*_*nky 13

如果声明 array a[4],则意味着它有4 个元素。
唯一有效索引是a[0]a[1]a[2],和a[3]

访问a[4]无效。
我不知道你为什么认为a[4] 会有 5 个元素。

该数组有 4 个元素,其大小为:

4-elements * 4-bytes = 16 bytes.
Run Code Online (Sandbox Code Playgroud)