2010-06-07 30 views
0

我有一個示例代碼:C++指點例如

#include <iostream> 
#include <conio.h> 
using namespace std; 

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

    p1 = &firstvalue; 
    p2 = &secondvalue; 
    cout << "1.p1: " << p1 << ", p2: " << p2 << endl; 
    cout << "1.*p1: " << *p1 << ", *p2: " << *p2 << endl; 
    *p1 = 10; 
    cout << "2.p1: " << p1 << ", p2: " << p2 << endl; 
    cout << "2.*p1: " << *p1 << ", *p2: " << *p2 << endl; 
    *p2 = *p1; 
    cout << "3.p1: " << p1 << ", p2: " << p2 << endl; 
    cout << "3.*p1: " << *p1 << ", *p2: " << *p2 << endl; 
    p1 = p2; 
    cout << "4.p1: " << p1 << ", p2: " << p2 << endl; 
    cout << "4.*p1: " << *p1 << ", *p2: " << *p2 << endl; 
    *p1 = 20;   
    cout << "5.p1: " << p1 << ", p2: " << p2 << endl; 
    cout << "5.*p1: " << *p1 << ", *p2: " << *p2 << endl; 
    cout << "firstvalue is " << firstvalue << endl; 
    cout << "secondvalue is " << secondvalue << endl; 
    cout << "firstvalue is " << &firstvalue << endl; 
    cout << "secondvalue is " << &secondvalue << endl; 

    getch(); 
    return 0; 
} 

而這裏的輸出:

1.p1: 0041FB40, p2: 0041FB34 
1.*p1: 5, *p2: 15 
2.p1: 0041FB40, p2: 0041FB34 
2.*p1: 10, *p2: 15 
3.p1: 0041FB40, p2: 0041FB34 
3.*p1: 10, *p2: 10 
4.p1: 0041FB34, p2: 0041FB34 
4.*p1: 10, *p2: 10 
5.p1: 0041FB34, p2: 0041FB34 
5.*p1: 20, *p2: 20 
firstvalue is 10 
secondvalue is 20 
firstvalue is 0041FB40 
secondvalue is 0041FB34 

什麼是該行 「P1 = P2」 複製? p1是否成爲p2的參考,還是以不同的方式工作?

回答

2

你剛纔說的內存地址:「現在p1應在相同的內存塊點作爲p2做」。

因此,他們開始指向相同的內存塊(到同一地址),因此,共享相同的值。

1

內存地址 P1發生在P2(0041FB34)

+0

那麼沒有參考魔法呢?謝謝:) – terence6 2010-06-07 21:38:49

+1

除了使用'cout'和'<<'外,你的示例是簡單的C.和C,幾乎是按照定義,並不是魔術。 – Javier 2010-06-07 21:44:16

0

作業完成後,p1將包含與p2相同的存儲地址。這兩個指針將指向相同的變量,因此*p1*p2指向相同的內存。

除此之外,p1p2之間沒有特別的聯繫。例如,像p1 = &firstvalue這樣的後續任務不會改變有關p2指針變量的任何內容,並且p1p2將再次指向不同的內存位置。

1

由於p2包含secondvaluep1=p2;副本secondvaluep2地址爲p1地址。如果你可以幫忙的話,我建議不要將它稱爲引用 - 引用是指與引起混淆的指針相似的東西,因此將指針稱爲引用(或者甚至將其作爲參考)是可能是一個可憐的主意

0

=(賦值運算符)只是將一個變量(p2)的值複製到另一個(p1)中。因此,在分配之後,p1和p2是同義詞,因爲它們引用相同的地址 - 取消引用它們會得到與您的打印輸出中相同的值。

有關更多信息,請嘗試使用article指針。