我很好奇为什么我在这个简单的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)计算的尺寸是多少?
答案 0 :(得分:1)
第二个sizeof()正在计算:sizeof(float*) / sizeof(float)
。函数foo
的参数只是指向数组第一个成员的指针,它与float*
类似(编辑:相同)。所以sizeof(数组)会给你指向第一个成员的指针的大小,无论数组是int [],float []还是char []。
答案 1 :(得分:0)
测试了它here,你看到第二个结果是1.我怀疑(不完全确定)你的foo参数指针衰减正在进行,所以它计算sizeof(float*)
而不是仅仅一个float