关于c ++中的指针

时间:2015-04-08 03:25:18

标签: c++ pointers

在下面的问题中,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

但我认为我没有正确理解它。

3 个答案:

答案 0 :(得分:0)

最后一行将p2设置为p1,它刚刚设置为p2;所以p1和p2都指向p2的原始目标,其中包含值10。

答案 1 :(得分:0)

不要混淆指向他们指向的内容。 *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保持不变。

答案 2 :(得分:0)

这就像玩贝壳游戏一样。

所以让我们开始吧......这是每一行之后的状态:

  

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。