前面曾經講過,如果指標變數指向的變數型別相同,兩個指標變數可以互相賦值。如果指向的變數型別不同,可以先對指標進行型別強制轉換。下面用乙個具體的例子說明:
main()
程式執行的結果為:
pl=aaaabbbb
pn=bbbb
pn=aaaa
如圖所示,long型變數num在記憶體占用4個位元組,假設首位址為ffc0。因為整型資料在記憶體中存放的原則是低位元組在前,高位元組在後(參見組合語言),所以ffc0開始的2個位元組實際存放的是bbbb,ffc2開始的兩個位元組存放的是aaaa。初始化後,指標變數pl存放變數num的首位址,*pl的值就是變數num的值。
語句pn=(int *)pl;的作用是:將指標變數pl的型別進行強制轉換,並將位址值賦給指標變數pn,賦值結束後,指標變數pn的值為pl儲存的位址值ffc0。指標變數pn被定義為指向int型變數,因此系統取*pn的值時,讀取從位址ffc0開始的2個位元組,因此這時*pn的值為bbbb。
語句pn++;將指標變數pn自加1,根據指標加法的規則,pn被重新賦值為位址值ffc2,因此*pn的值為位址ffc2開始的2個位元組的記憶體單元值,即aaaa。
指標強制轉換
c 和 c 的指標強制轉換時不太一樣的,c 提供了4中型別,用於更加精細化控制指標的強制轉換。1 指標轉換原理 討論指標的強制轉換之前,我們先要理解清楚指標的根本含義。最通俗的解釋,指標即是位址,但是,指標絕不僅僅只是位址。1 指標存著所指物件位址 2 指標存著所指物件的型別和型別大小 試想我們定義...
指標強制轉換
指標強制轉換在指令變數賦值上,只是編譯器的乙個善意的提醒,在組合語言中,和不加強制轉換的指令時一樣的,並沒有多產生指令。強制轉換後的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問記憶體時體現到了指令中。例子 6 int i globle variable 7 int pi globle var...
類指標的強制轉換
動態轉換dynamic cast 只能從上轉換至下 eg 從父類指標轉換成子類的指標 否則報錯 class bvirtual b classd public b void test intmain d dp dynamic cast bp if dp null else return0 靜態轉換st...