所以通常当你为函数参数键入数组时,你会像这样声明它们:
f ( const float offset [ 3 ] )
但是我一直在做一个这样声明的项目:
f ( const float ( &offset ) [ 3 ] )
这种变化甚至意味着什么?据我所知,我们已经有效地传递了一个指针。甚至将它强制为这样的引用会做什么?
最佳答案
f ( const float offset [ 3 ] )
在这种情况下,3 没有意义。 offset
甚至不是数组,它是一个指针 (const float*
)。所以这个函数将接受任何浮点指针,并且通过衰减接受任何大小的 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 个常量 float 数组的引用。只有 3 个 float 的数组将被接受为参数。
f(x2); // does not compile
f(x3); // compiles
f(x4); // does not compile
f(fp); // does not compile
在函数内部:
sizeof(offset) == sizeof(float) * 3
关于c++ - 这些数组类型有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26644481/