为什么这个指针是8字节?

APM*_*500 3 c++ arrays pointers function

我正在学习 C++,并读到当数组传递给函数时它会衰减为指针。我想尝试一下并编写了以下函数:

void size_print(int a[]){
    cout << sizeof(a)/sizeof(a[0]) << endl;
    cout << "a ->: " << sizeof(a) << endl;
    cout << "a[0] ->" << sizeof(a[0]) << endl;
}
Run Code Online (Sandbox Code Playgroud)

我尝试输入一个包含三个元素的数组,比方说

int test_array[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

有了这个输入,我期望这个函数打印 1,因为我认为这a将是一个整数指针(4 个字节)并且a[0]也将是 4 个字节。然而,令我惊讶的是结果是 2 和sizeof(a) = 8

我不明白为什么a占用8个字节,却a[0]占用4个字节。它们不应该是一样的吗?

Mar*_*ler 10

它们不应该是一样的吗?

No.a是(本来应该是)一个数组(但因为它是一个函数参数,已被调整为指向第一个元素的指针),因此具有指针的大小。您的机器似乎有 64 位地址,因此,每个地址(以及每个指针)都是 64 位(8 字节)长。

a[0]另一方面, 是该数组的元素所具有的类型 (an int),并且该类型在您的计算机上有 32 位(4 字节)。