このコードだと、値渡しのほうは結局メモリを開けられたものの、ポインタpは値渡しになっているから、pにはNULLが入ったままになっているという状態になっています。
ただしメモリが開けられる時点ではpポインターが指すメモリとしてcomputerは認識しているわけですよね、ただしそのアドレスがpに参照として渡させれないから、pの値は変わらないという事なんですが、最初にpポインターを認識していたとするなら、コピーできなかった時点でメモリを示していたpポインタは削除されて、
現時点ではアクセスができない無駄なメモリが生まれてしまったという理解になるのでしょうか?
コード void pass_by_value(int* p) { //Allocate memory for int and store the address in p p = new int; } void pass_by_reference(int*& p) { p = new int; } int main() { int* p1 = NULL; int* p2 = NULL; pass_by_value(p1); //p1 will still be NULL after this call pass_by_reference(p2); //p2 's value is changed to point to the newly allocate memory return 0; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/18 04:17
2015/12/18 04:58