【发布时间】:2012-01-06 16:27:11
【问题描述】:
我很好奇为什么在这个简单的 C++ 代码中会出现以下行为。
在此我尝试在 2 个不同的地方计算浮点数组的大小:
#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:: 向量,我永远不会传递没有大小的数组。但我很好奇这里发生了什么。
“a”在传递给函数时丢失了哪些信息?
计算的第二个 sizeof(a) 是多少?
【问题讨论】:
-
在 MSVC 2010 上,我得到 3 和 1。很有趣。
-
@Joe:32 位和 64 位指针。 4byte(32bit 指针) / 4byte(float) == 1, 8byte(64bit 指针) / 4byte(float) == 2.
-
@xeo 我刚刚意识到数组衰减为一个指针,然后来找你的评论 :) 谢谢。