2013-05-14 60 views
2
#include <iostream> 
using namespace std; 

int main() 
{ 
    int firstvalue = 5, secondvalue = 15; 
    int * p1, * p2; 

    p1 = &firstvalue; // p1 = address of firstvalue 
    p2 = &secondvalue; // p2 = address of secondvalue 
    *p1 = 10;   // value pointed by p1 = 10 
    *p2 = *p1;   // value pointed by p2 = value pointed by p1 
    p1 = p2;   // p1 = p2 (value of pointer is copied) 
    *p1 = 20;   // value pointed by p1 = 20 

    cout << "firstvalue is " << firstvalue << endl; 
    cout << "secondvalue is " << secondvalue << endl; 
    return 0; 
} 

输出为10 20.不应该输出20 20吗?我在想什么,因为它确实P1 = P2因此既p1和p2具有相同的地址,然后将其设置为p1指出值= 20,因此,他们的假设值更改为20当两个值具有相同的地址时

回答

2

通过操作p1 = p2;您正在更改指针p1而不是firstvalue的地址。 p1没有指向firstvalue了,但点secondvalue

+0

你的回答让完美的感官。非常感谢。 – 14K 2013-05-14 07:18:17

0

Firstvalue和secondvalue不是指针,他们是你的变数,要小心!

的指针p1和p2,所以你所期望的输出是:

cout << "firstvalue is " << *p1 << endl; 
cout << "secondvalue is " << *p2 << endl; 
2
p1 = &firstvalue; 
    p2 = &secondvalue; 

    // here, p1 points to first, p2 points to second, first is 5, second is 15 

    *p1 = 10;   

    // here, p1 points to first, p2 points to second, first is 10, second is 15 

    *p2 = *p1; 

    // here, p1 points to first, p2 points to second, first is 10, second is 10 

    p1 = p2; 

    // here, p1 points to second, p2 points to second, first is 10, second is 10 

    *p1 = 20; 

    // here, p1 points to second, p2 points to second, first is 10, second is 20 
2

让我改一下你的意见:

p1 = &firstvalue; // p1 points to firstvalue 
    p2 = &secondvalue; // p2 points to secondvalue 
    *p1 = 10;   // means firstvalue = 10 
    *p2 = *p1;   // means secondvalue = firstvalue, which is 10 
    p1 = p2;   // p1 now points to secondvalue and not to firstvalue any more 
    *p1 = 20;   // means secondvalue = 20 

净效应:firstvalue为10,没有指针指向它。 secondvalue为20,P1和P2指向它

1

让我们一行做这一行:

int firstvalue = 5, secondvalue = 15; 
int * p1, * p2; 

p1 = &firstvalue; // p1 = address of firstvalue 
p2 = &secondvalue; // p2 = address of secondvalue 

直到这里,firstvalue = 5, secondvalue = 15

*p1 = 10;   // value pointed by p1 = 10 

现在*p1 = 10,从而firstvalue = 10, secondvalue = 15

*p2 = *p1;   // value pointed by p2 = value pointed by p1 

现在*p2 = secondvalue = *p1 = firstvalue = 10,从而firstvalue = 10, secondvalue = 10

p1 = p2;   // p1 = p2 (value of pointer is copied) 
*p1 = 20;   // value pointed by p1 = 20 

现在*p1 = secondvalue = 20,从而firstvalue = 10, secondvalue = 20

0
first second first second first second first second  first second 
value value value value value value value value  value value 
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+  +---+ +---+ 
| | | | | | | | | | | | | | | |  | | | | 
| 5 | | 15| | 10| | 15| | 10| | 10| | 10| | 15|  | 10| | 20| 
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +-^-+  +---+ +-^-+ 
^ ^ ^ ^ ^ ^  +------|   +------| 
+-|-+ +-|-+ +-|-+ +-|-+ +-|-+ +-|-+ +-|-+ +-+-+  +-|-+ +-+-+ 
| | | | | | | | | | | | | | | | | | | + | | | |  | + | | | | 
| + | | + | | + | | + | | + | | + | | | | + |  | | | + | 
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+  +---+ +---+ 
    p1  p2  p1  p2  p1  p2  p1  p2   p1  p2 

正如在其他的答案中提到,你有两个指针现在指向同一个变量。您first value*p1 = 20因为p1点改为second valuefirst value

相关问题