2013-05-14 31 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

相關問題