註冊登錄
伊莉討論區返回首頁

thelord2009的個人空間http://www56.eyny.com/?5788411[收藏][複製][分享][RSS]

日誌

指標與位址間的關係詳解

已有 981 次閱讀2022-12-30 03:40 PM

以下參考C++教學手冊第三版 洪維恩著 旗標出版股份有限公司
頁數9-7至9-14

假設我設了int指標變數*ptr,num=20
&符號可用來取得變數的位址
ptr=#
則*ptr有自己的位址&ptr
因為ptr=&num
所以ptr存放或指向&num的位址
所以輸出ptr是輸出&num的位址
但是因為*是依位址取值運算子
所以輸出*ptr是輸出&num的位址的值20

int a=5,b=10;
int *ptr1,*ptr2;
ptr1=&a;
ptr1存放a的位址,而且*ptr1依址取值也等於a的值5;而且由於ptr1存放a的位址,*ptr1依址取值也等於a的值,因此*ptr1的值改變也等於a的值改變
ptr2=&b;
ptr2存放b的位址,而且*ptr2依址取值也等於b的值10;而且由於ptr2存放b的位址,*ptr2依址取值也等於b的值,因此*ptr2的值改變也等於b的值改變
*ptr1=7;
*ptr1現在的值是7,所以因為ptr1存放a的位址,*ptr1依址取值也等於a的值,因此*ptr1的值變成7也等於a的值變成7
*ptr2=32;
*ptr2現在的值是32,所以因為ptr2存放b的位址,*ptr2依址取值也等於b的值,因此*ptr2的值變成32也等於b的值變成32
a=17;
因為ptr1存放a的位址,*ptr1依址取值也等於a的值,因此a的值變成17也等於*ptr1的值變成17
ptr1=ptr2;
由於ptr2存放b的位址,現在把ptr2指定給ptr1,代表ptr1也從參考a的位址變成參考到b的位址,所以*ptr1=b位址的值32,a的值依然沒變
*ptr1=9;
由於ptr1也從參考a的位址變成參考到b的位址,因此*ptr1=9代表b的值也變成9,而ptr2存放b的位址,*ptr2依址取值也等於b的值,所以*ptr2也變成9
ptr1=&a;
現在ptr1又改存放a的位址,參考a的位址,上述講到a的值依然沒變是17,因此*ptr1也=17
a=64;
因為ptr1存放a的位址,*ptr1依址取值也等於a的值,因此a的值變成64也等於*ptr1的值變成64
*ptr2=*ptr1+5;
*ptr1+5=64+5=69,因此*ptr2=69,由於ptr2存放b的位址,*ptr2依址取值也等於b的值,因此*ptr2的值變成69也等於b的值變成69
ptr2=&a;
ptr2又改存放a的位址,參考a的位址,由於a的值目前是64,因此*ptr2依址取值也等於a的值64,b的值一樣維持69

路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelistdoodle 塗鴉板

您需要登錄後才可以評論 登錄 | 註冊
驗證問答 換一個

Archiver|手機版|廣告|聯絡我們|廣告查詢|廠商合作|伊莉

GMT+8, 2024-5-23 10:25 PM

回頂部