为什么sizeof(数组)在这两种情况下有所不同?

时间:2011-09-22 19:52:42

标签: c++

  

可能重复:
  Sizeof array passed as parameter

鉴于以下代码,我正在使用的系统(在给定指针大小的情况下似乎是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);
}

2 个答案:

答案 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)