c++ - 这些数组类型有何不同?

标签 c++ arrays types

所以通常当你为函数参数键入数组时,你会像这样声明它们:

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/

相关文章:

c++ - 关于 boost.asio 异步 sleep

c++ - 处理 const 类数据的最佳实践

java - 给定两个随机整数数组,打印它们的交集。也就是说,打印两个给定数组中存在的所有元素

python - 如何引导 numpy 数组的最里面的数组?

c - 在 C 中比较不同数据类型的一般规则是什么?

c++ - 对象和变量上的指针 C++

Java ArrayList 包含方法不起作用

java - 获取通用类

generics - Scala 类无法覆盖扩展 java.util.comparator 的 Java 接口(interface)中的比较方法

c++ - 使用 MapWindowPoints 时堆栈损坏