2012-01-19 8 views
6

私は参考文献に問題があります。 このコードを考えてみましょう:それのクローンまたはコピーが渡されていない変数自体れるよう関数の引数としての参照?

ここ
void pseudo_increase(int a){a++;} 
int main(){ 
    int a = 0; 
    //.. 
    pseudo_increase(a); 
    //.. 
} 

、変数aの値が増加することはありません。
は今、私たちは別の例を考えてみましょう:

void true_increase(int& a){a++;} 
int main(){ 
    int a = 0; 
    //.. 
    true_increase(a); 
    //.. 
} 

ここではaの値が増加しますと言われている - しかし、なぜ?

true_increase(a)が呼び出されると、aのコピーが渡されます。これは別の変数になります。したがって、&aは、実際のアドレスaとは異なります。では、aの値はどのように増加しましたか?

私が間違っている箇所を修正してください。あなたは間違っているところだtrue_increase(A)が呼び出され

+1

関数の引数とそれに渡される変数に異なる識別子を使用して、自分自身をさらに混同しないようにしてください。 – AusCBloke

+1

参照渡しではコピーは作成されません。これは同じ変数への参照です。 – jweyrich

+0

最初にポインタについて学ぶことをお勧めします。次に、参照がどのように初期化されていないオブジェクトや無効なポインタなどの痛みを軽減することができるかをお勧めします。 – sarat

答えて

6

次の例を考えてみましょう

int a = 1; 
int &b = a; 
b = 2; // this will set a to 2 
printf("a = %d\n", a); //output: a = 2 

b別名aためのように扱うことができます。 bに割り当てられたものはaにも割り当てられます(baへの参照です)。パラメータby referenceを渡すと違いはありません:あなたのtrue_increase(int型& a)の機能で

void foo(int &b) 
{ 
    b = 2; 
} 

int main() 
{ 
    int a = 1; 
    foo(a); 
    printf("a = %d\n", a); //output: a = 2 
    return 0; 
} 
5

、 ''

を渡されるのコピー。 aへの参照が行われます。これは、パラメータタイプの隣の&です。参照に起こる操作は、参照先に適用されます。

1

、どのような内部のコードを取得していることは、あなたが指定した整数値のコピーではありません。これは整数値がコンピュータのメモリに存在するまったく同じメモリ位置への参照です。したがって、その参照を介して行われた変更は、元の宣言した実際の整数に発生し、そのコピーには反映されません。したがって、関数が戻るときに、参照を介して変数に対して行った変更は、元の変数自体に反映されます。これはC++での参照渡しの概念です。

最初のケースで言及したように、元の変数のコピーが使用されるため、関数内で行ったことは元の変数に反映されません。

関連する問題