这些数组类型有何不同?

时间:2014-10-30 03:17:48

标签: c++ arrays types

因此,通常在为函数参数键入数组时,请按以下方式声明它们:

f ( const float offset [ 3 ] )

但是我一直致力于一个他们这样声明的项目:

f ( const float ( &offset ) [ 3 ] )

这种变化甚至意味着什么?据我所知,我们已经有效地传递指针。是什么迫使它像这样的参考呢?

1 个答案:

答案 0 :(得分:3)

f ( const float offset [ 3 ] )

在这种情况下,3是没有意义的。 offset甚至不是数组,它是一个指针(const float*)。因此,此函数将接受任何浮点指针,并且将通过衰减接受任何大小的浮点数组。

float x2[2];
float x3[3];
float x4[4];
float* fp;

f(x2);       // compiles
f(x3);       // compiles
f(x4);       // compiles
f(fp);       // compiles

此外,在函数内部:

sizeof(offset) == sizeof(float*)

然而,

f ( const float ( &offset ) [ 3 ] )

在这种情况下,offset是对3个const浮点数组的引用。只接受3个浮点数的数组作为参数。

f(x2);       // does not compile
f(x3);       // compiles
f(x4);       // does not compile
f(fp);       // does not compile

在函数内部:

sizeof(offset) == sizeof(float) * 3