鉴于以下代码,我正在使用的系统(在给定指针大小的情况下似乎是64位)打印:
32
4
现在,在这个系统上int的大小应该是4个字节,所以8 * 4 = 32是有意义的。另外,我知道指针的大小也应该是4个字节,这正是我猜测foo中的数组所发生的。
我的问题是为什么foo函数中的sizeof(arr)与main()中的sizeof(myarray)不同,当两者都是特定的int [8]数组时?我原本预计在这两种情况下都会收到32,这让我感到困惑,为什么它会以其他方式结束。
#include <iostream>
void foo(int arr[8])
{
std::cerr << sizeof(arr) << std::endl;
}
int main()
{
int myarray[8];
std::cerr << sizeof(myarray) << std::endl
foo(myarray);
}
答案 0 :(得分:2)
当传入函数时,数组会衰减为指针,以便在sizeof
中打印foo()
4个字节的int数组指针。
sizeof(myarray)
打印数组的大小为32(num elements x size of int)。
答案 1 :(得分:0)
因为作为函数参数的数组被转换为指针。 所以
void foo(int arr[8])
实际上是
void foo(int *arr)