理解在将数组传递给没有其大小的函数时丢失的信息

时间:2012-01-06 16:27:12

标签: c++ arrays

  

可能重复:
  finding size of int array

我很好奇为什么我在这个简单的C ++代码中得到以下行为。

在这里我尝试在两个不同的地方计算浮点数组的大小:

#include <iostream>
#include <iomanip>

using namespace std; 

void foo(float a[])
{
 int size = sizeof(a) / sizeof(float) ;

 cout << size <<std::endl;   
}



int main(int argc, char *argv[])
{

  float a[] = {22.2, 44.4, 66.6} ;

  int size = sizeof(a) / sizeof(float) ;

  cout << size <<std::endl;   

  foo(a);

  return 0;
}

使用gcc编译器,我得到输出为

~: ./a.out
3
2
~: 

对于其他数组大小,我得到的第一个条目是正确的大小,但第二个条目总是为2,

现在在我的代码中,如果我使用数组并且通常使用std :: vectors,我从不传递没有大小的数组。但我很好奇这里发生了什么。

传递给函数时,'a'丢失了哪些信息?

第二个(a)计算的尺寸是多少?

2 个答案:

答案 0 :(得分:1)

第二个sizeof()正在计算:sizeof(float*) / sizeof(float)。函数foo的参数只是指向数组第一个成员的指针,它与float*类似(编辑:相同)。所以sizeof(数组)会给你指向第一个成员的指针的大小,无论数组是int [],float []还是char []。

答案 1 :(得分:0)

测试了它here,你看到第二个结果是1.我怀疑(不完全确定)你的foo参数指针衰减正在进行,所以它计算sizeof(float*)而不是仅仅一个float