2016-05-28 6 views
-2

ためのプログラム、このコードの出力は次のとおりです。C++アドレスと変数

そして、私はそれが機能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; 
} 
+7

C++の参考文献を読むべきです。 –

+1

あなたは座って、良い本を1冊読んだり、C++について2冊読んだりする必要があります。 http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

+0

ほぼ完全に重複しています:http://stackoverflow.com/questions/2564873/how -do-i-use-reference-parameters-in-c –

答えて

3

は、そのパラメータを関数の参照として渡されることになります。これが何を意味するのか

はあなたの関数add1nは、あなたのmain機能にiように、メモリ内の同じスペースを指しますということです。 nへの変更は、同じものの異なる名前として機能するため、iにも反映されます。

+0

私はそれを得ましたが、2回目のループでは、私は** 2 **ではありません** 1 **なぜ? –

1

変数iがそのようにすべてのラウンドiは2だけ増加し、参照パラメータとしてadd1に渡されます。

1st round: i = 0, m = 1 
2nd round: i = 2, m = 4 
3rd round: i = 4, m = 9 
+0

しかし、私は1つのループごとに1ずつ増やしてはなりませんか? 2ではない! @elinx –

+0

@MostafaIbrahemそれはまさに "int"が "add"の "n"が "main"の "i"と同じメモリを共有していることです。したがって、 "n"上の操作はすべて "i"に影響します。 – elinx

1

あなたはこの

int add1(int n) 
      ^^^^^ 
{ 
    n++; 

    return n; 
} 

のような機能を持っており、

ようにそれを呼び出した場合
m += add1(i); 

次に、関数deal可能性のある値のコピーを持つi。関数はこの

int add1(int &n) 
      ^^^^^ 
{ 
    n++; 

    return n; 
} 

のように宣言された場合ループ

for (int i = 0; i < 5; i++) 
{ 
    // m += add1(i); 
    // function add1 
    int n = i; 
    n++; 
    m += n; 
} 

の体でそれを構築する場合

あなたはそれがパラメータであることを意味し、それを次のように想像することができます対応する元の引数を参照してください。引数の別名と同様に考えることができます。それは直接に使用されているので、だから、変数iが関数ADD1に2回交換されたループの本体に

for (int i = 0; i < 5; i++) 
{ 
    // m += add1(i); 
    // function add1 
    i++; 
    m += i; 
} 

をそれを構築する場合は、それを次のように想像することができる。この場合

ループの制御文で参照番号nを使用して実行します。

1

ここでは、参照渡しを使用してadd1()関数にパラメータを渡します。参照によって変数を渡すには、関数のパラメータを標準変数ではなく参照として宣言するだけです。上記のコードで

、関数が呼び出され、nは引数を参照となるであろう

int add1(int &n){ // n is a reference variable 
    n++; 
    return n; 
} 

。変数への参照は変数自体とまったく同じように扱われるため、参照に加えられた変更はすべて引数に渡されます!

関連する問題