这些数组类型有何不同

How are these array types different?

本文关键字:何不同 类型 数组      更新时间:2023-10-16

因此,通常当您为函数参数键入数组时,您会这样声明它们:

f ( const float offset [ 3 ] )

但我一直在做一个项目,他们这样宣布:

f ( const float ( &offset ) [ 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个常量浮点数组的引用。只有一个包含3个浮点值的数组将被接受为参数。

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

在功能内部:

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