因此,通常在为函数参数键入数组时,请按以下方式声明它们:
f ( const float offset [ 3 ] )
但是我一直致力于一个他们这样声明的项目:
f ( const float ( &offset ) [ 3 ] )
这种变化甚至意味着什么?据我所知,我们已经有效地传递指针。是什么迫使它像这样的参考呢?
答案 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