让我们假设这段代码:
void function(const float vect[]){
// making something with "vect" here (not modifying as it is const)
};
然后在主函数中:
float v[5];
function(v+2);
像这样调用函数是否正确?我到底要传递给那个函数的是什么?
数组将在调用期间衰减为指针
所以你基本上是这样做的:-
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
^ ^ ^ ^ ^
| | | | |
v v+1 v+2 v+3 v+4
^
|
function(v+2); //In "function" v will be used from v+2, i.e. vect[0] will be v[2]
要理解这一点,您必须了解有时 C++ 会撒谎。
void function(const float vect[]){
不是将数组作为参数的函数(这是谎言)。相反,它与您编写的 this 完全相同void function(const float* vect){
。现在更容易理解了,您的函数需要一个指针,所以当您编写时,您function(v+2);
将指针传递给数组的第三个元素,就像您在编写时function(v);
将指针传递给数组的第一个元素一样。
在 C++ 中不可能将数组传递给函数(或从函数返回数组),在这些情况下,数组总是被转换为指针。
像这样调用函数是否正确?
只要您不越界访问数组(即您只读取vect[0]
,vect[1]
或vect[2]
),它就是。
我到底要传递给那个函数的是什么?
我不明白这个问题。如果您想知道这是做什么的:v
数组衰减为一个指针,然后+
运算符对其执行指针运算,并将指向第三个元素(即索引 2 处的元素)的指针传递给函数。