我们假设这段代码:
void function(const float vect[]){
// making something with "vect" here (not modifying as it is const)
};
然后在主要功能中:
float v[5];
function(v+2);
这样调用函数是否正确? 究竟我正在传递给那个功能呢?
答案 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的指针) )被传递给函数。