指標強制轉換

2022-09-12 16:06:23 字數 724 閱讀 9042

指標強制轉換在指令變數賦值上,只是編譯器的乙個善意的提醒,在組合語言中,和不加強制轉換的指令時一樣的,並沒有多產生指令。強制轉換後的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問記憶體時體現到了指令中。

例子: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...