繁体   English   中英

关于C ++中的指针

[英]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,即p1p2指向其中写入10的存储位置(尽管存储位置可能不同)。 这并不意味着p1p2指向相同的内存位置!

逐行:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM