[英]about pointers in c++
在以下问题中,p1,p2,abd p3是指向整数的指针。 在每个问题的开始中,* p1和* p2的值均为10。
执行以下语句后,* p1和* p2的值是什么
p3 = NULL
p3 = p1
p1 = p2
p2 = p1
我这样做的方式最终以他们开始时的相同方式获得了10分。
p3 = NULL
p3 = p1 ;now p3 is set to 10
p1 = p2 ;now p1 is set to 10
p2 = p1 ;now p2 is set to 10
但我认为我的理解不正确。
最后一行将p2设置为p1,而p2刚刚设置为p2。 因此p1和p2都指向p2的原始目标,该目标包含值10。
不要混淆指针指向的内容。 *p1
和*p2
值为10,即p1
和p2
指向其中写入10的存储位置(尽管存储位置可能不同)。 这并不意味着p1
和p2
指向相同的内存位置!
逐行:
p3 = p1; // p3 points to the memory location of p1, *p3 = *p1 = 10
p1 = p2; // p1 points to the memory location of p2, *p1 = *p2 = 10
p2 = p1; // p2 points to the memory location of p1, *p2 = *p1 = 10
因此,最终,您将得到: p3
取原始p1
的值,然后p1
取原始p2
的值,而p2
保持不变。
这真的很像玩壳游戏。
让我们开始吧..这是每行之后的状态:
p1 = orig1,p2 = orig2,p3 = orig3
p3 = NULL
p1 = orig1,p2 = orig2,p3 = NULL
p3 = p1(当前设置为orig1)
p1 = orig1,p2 = orig2,p3 = orig1
p1 = p2(当前设置为orig2)
p1 = orig2,p2 = orig2,p3 = orig1
p2 = p1(当前设置为orig2)
p1 = orig2,p2 = orig2,p3 = orig1
就像它说的.. * p2和* p1的原始值为10,所以它们全都是10。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.