C ++中的参数和函数

时间:2013-09-27 17:47:54

标签: c++ function vector

我们假设这段代码:

void function(const float vect[]){

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

};

然后在主要功能中:

float v[5];

function(v+2);

这样调用函数是否正确? 究竟我正在传递给那个功能呢?

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

要明白这一点,你必须明白,有时C ++就是谎言。

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

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

答案 2 :(得分:1)

  

这样调用函数是否正确?

只要你没有超出范围访问数组(即你只阅读vect[0]vect[1]vect[2]),它就是。

  

我究竟要传递给那个功能呢?

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