此代码的输出为:
9
而且我不确定它在函数add1
中的变化。此问题&n
的含义是什么?当我们将i
分配给&n
时,它会做什么?
#include <iostream>
using namespace std;
int add1(int &n){
n++;
return n;
}
int main(){
int m = 0;
for (int i = 0; i < 5; i++){
m += add1(i);
}
cout << m ;
cout << "\n\n";
return 0;
}
答案 0 :(得分:3)
在参数列表中使用&
时,会将该参数作为参考传递给该函数。
这意味着您的函数n
中的add1
将指向i
函数中与main
相同的内存空间。对n
的更改也会反映在i
中,因为它们只是作为同一事物的不同名称。
答案 1 :(得分:1)
变量i
作为参考参数传递到add1
,因此每轮i
增加2:
1st round: i = 0, m = 1
2nd round: i = 2, m = 4
3rd round: i = 4, m = 9
答案 2 :(得分:1)
如果你有这样的功能
int add1( int n )
^^^^^
{
n++;
return n;
}
并将其称为
m += add1(i);
然后该函数处理vatiable i
的值的副本。
如果要在循环体中构建它,可以用以下方式想象它
for ( int i = 0; i < 5; i++ )
{
// m += add1(i);
// function add1
int n = i;
n++;
m += n;
}
当声明一个函数时
int add1( int &n )
^^^^^
{
n++;
return n;
}
然后它表示该参数是对相应原始参数的引用。您可以将其视为参数的别名。
在这种情况下,如果要在循环体中构建它,可以通过以下方式设想它
for ( int i = 0; i < 5; i++ )
{
// m += add1(i);
// function add1
i++;
m += i;
}
因此变量i
在函数add1中被更改了两次,因为它通过引用n
和循环的控制语句直接在函数中使用。
答案 3 :(得分:1)
这里我们通过引用传递将参数传递给add1()函数。要通过引用传递变量,我们只需将函数参数声明为引用而不是正常变量。
在上面的代码中,
make silent
调用该函数时,n将成为参数的引用。由于对变量的引用与变量本身的处理完全相同,因此对引用所做的任何更改都会传递给参数!