1

让我们假设这段代码:

void function(const float vect[]){

// making something with "vect" here (not modifying as it is const)

};

然后在主函数中:

float v[5];

function(v+2);

像这样调用函数是否正确?我到底要传递给那个函数的是什么?

4

3 回答 3

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]
于 2013-09-27T17:55:19.257 回答
1

要理解这一点,您必须了解有时 C++ 会撒谎。

void function(const float vect[]){不是将数组作为参数的函数(这是谎言)。相反,它与您编写的 this 完全相同void function(const float* vect){。现在更容易理解了,您的函数需要一个指针,所以当您编写时,您function(v+2);将指针传递给数组的第三个元素,就像您在编写时function(v);将指针传递给数组的第一个元素一样。

在 C++ 中不可能将数组传递给函数(或从函数返回数组),在这些情况下,数组总是被转换为指针。

于 2013-09-27T17:51:21.817 回答
1

像这样调用函数是否正确?

只要您不越界访问数组(即您只读取vect[0],vect[1]vect[2]),它就是。

我到底要传递给那个函数的是什么?

我不明白这个问题。如果您想知道这是做什么的:v数组衰减为一个指针,然后+运算符对其执行指针运算,并将指向第三个元素(即索引 2 处的元素)的指针传递给函数。

于 2013-09-27T17:51:33.493 回答