在下面的问题中,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
但我认为我没有正确理解它。
答案 0 :(得分:0)
最后一行将p2设置为p1,它刚刚设置为p2;所以p1和p2都指向p2的原始目标,其中包含值10。
答案 1 :(得分:0)
不要混淆指向他们指向的内容。 *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
保持不变。
答案 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。