指標強制轉換在指令變數賦值上,只是編譯器的乙個善意的提醒,在組合語言中,和不加強制轉換的指令時一樣的,並沒有多產生指令。強制轉換後的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問記憶體時體現到了指令中。
例子:6: int i; //globle variable
7: int *pi; //globle variable
8: short *ps; //globle variable
9: char *pc; //globle variable
10:11: int _tmain(int argc, _tchar* ar**)
12:
14.15.16這三行是對指標變數的賦值語句,我們通過反彙編**可以看到只是單純的將變數i的位址賦值給了pi,ps, pc這三個指標變數,並沒有涉及到指標型別。
再看17.18.19這三行,表面上看起來和強制轉化無關的賦值語句。這三句是對同一位址(即i的位址)以三種不同身份進行的賦值操作,我們看到mov指令後面分別跟的是dword,word,byte,說明三種mov指令分別向記憶體中寫4位元組,2位元組,1位元組。此時可知強制轉換型別發生了作用。
強制轉換的安全問題
如果轉換後指標指向的資料型別大小小於原資料型別大小,那麼用轉換後的指標訪問時安全的,否則是危險,要越界。
通俗的來說就強制轉化只能從大往小轉,轉換後你只能吃虧,要是轉換後能多訪問了幾個位元組,那編譯器就會告訴你這是不可以的。
指標強制轉換
c 和 c 的指標強制轉換時不太一樣的,c 提供了4中型別,用於更加精細化控制指標的強制轉換。1 指標轉換原理 討論指標的強制轉換之前,我們先要理解清楚指標的根本含義。最通俗的解釋,指標即是位址,但是,指標絕不僅僅只是位址。1 指標存著所指物件位址 2 指標存著所指物件的型別和型別大小 試想我們定義...
指標的強制轉換
前面曾經講過,如果指標變數指向的變數型別相同,兩個指標變數可以互相賦值。如果指向的變數型別不同,可以先對指標進行型別強制轉換。下面用乙個具體的例子說明 main 程式執行的結果為 pl aaaabbbb pn bbbb pn aaaa 如圖所示,long型變數num在記憶體占用4個位元組,假設首位址...
指標強制型別轉換
當我們初始化乙個指標或給乙個指標賦值時,賦值號的左邊是乙個指標,賦值號的右邊是乙個指標表示式。在我們前面所舉的例子中,絕大多數情況下,指標的型別和指標表示式的型別是一樣的,指標所指向的型別和指標表示式所指向的型別是一樣的。例十四 1。float f 12.3 2。float fptr f 3。int...