0
void VoidRef (int &ref){
   ref++;
}

void VoidPtr (int *ptr){
  (*ptr)++;
}

int test= 5;

VoidRef(test);
cout << test;  // is 6

VoidPtr(&test);
cout << test;  // is 7 !

両方のボイドが同じことをするのはなぜですか? どのボイドがより多くのリソースを必要としていますか?

4

1 に答える 1

0
void VoidRef (int &ref){
              //^^pass by reference
   ref++;
}

void VoidPtr (int *ptr){
                //^^ptr stores address of test
  (*ptr)++;
}

Why do both voids do the same thing?

refは test への参照、つまり のエイリアスでtestあるため、 on の操作は onの操作でrefもありtestます。

ptrは のメモリ アドレスを格納するポインタであるtestため、メモリ アドレス(*ptr)++に格納されている値を 1 増やします。最初の出力が 6 で 2 番目の出力が 7 である理由は、これら 2 つの関数を呼び出すたびに変数の値が 1 ずつインクリメントされるためです。

変数のアドレスに対してと のthink of両方VoidRefを操作できるため、同じ効果があります。VoidPtrtest

于 2013-04-20T22:15:52.993 に答える