int y=1;
int k=2;
int *p1;
int *p2;
p1=&y;
p2=&k;
p1=p2;
*p1=3;
*p2=4;
printf("%d",y);
我得到的輸出爲1,有人可以解釋我爲什麼!我期待它是4C中的指針分配
int y=1;
int k=2;
int *p1;
int *p2;
p1=&y;
p2=&k;
p1=p2;
*p1=3;
*p2=4;
printf("%d",y);
我得到的輸出爲1,有人可以解釋我爲什麼!我期待它是4C中的指針分配
下面的註釋說明了這是如何工作:
int y=1;
int k=2;
int *p1;
int *p2;
p1=&y; //pointer p1 holds the address of y
p2=&k; //pointer p2 holds the address of k
p1=p2; //pointer p1 now holds the address which p2 holds, which is the address of k
*p1=3; //the value which p1 points to is now 3 (so k equals 3 as well)
*p2=4; //the value which p2 points to is now 4 (so k equals 4 as well)
printf("%d",y); //y is still 1
但是如果你沒有printf("%d",k);
值4將被打印
+1更好解釋:) – 0decimal0
當你這樣做:
p1=p2;
你基本上是從P2複製變量k的地址爲P1。所以在這個步驟之後,兩個指針都指向變量k,所以如果你取消引用p1或p2,你實際上會改變變量k的值而不是y。
當你這樣做:
*p1 = 3;
您assiging 3至變量k。然後當你這樣做時:
*p2 = 4;
你正在給變量k再次分配4。這就是爲什麼y保持不變,當你打印它給你1.
當然,雖然我很想聽聽你是如何到達4. p1被賦予地址(即指向y),但後來2行被k的地址取代。因此,p1和p2都不指向y,所以y不會改變。
爲了保持這個簡單,我們假設&y=3
和&k=4
。
int y=1;
int k=2;
int *p1;
int *p2;
p1=&y; // p1=3
p2=&k; // p2=4
p1=p2; // p1=4
*p1=3; // p1=4 so k becomes 3
*p2=4; // p2=4 so k becomes 4
printf("%d",y); // we get 1 because y was never changed
聲明p1=p2;
套p1
指向變量k
。因此,無論以下分配:
*p1=3;
*p2=4;
隻影響變量k
,所以y
保持爲1
**爲什麼**你是否期待?如果您不包含源代碼,我們無法調試您的大腦... –
在* p1 = p2行的上方放置'* p1 = 2' *並查看它的作用 - 爲什麼輸出現在是2 ,但仍然不是4(或3)。 – Paul