地址和变量的C ++程序

时间:2016-05-28 15:28:54

标签: c++ function pointers

此代码的输出为:

  

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;
}

4 个答案:

答案 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将成为参数的引用。由于对变量的引用与变量本身的处理完全相同,因此对引用所做的任何更改都会传递给参数!