一、舉例說明
上圖對應函式呼叫為int printf(const char *fmt, ...)
,fmt為char *指標型別,所以共佔了32位位元組,但是*fmt執行的是乙個位元組,*fmt++執行的是下乙個位元組,&fmt得到乙個32位位址,(char *)&fmt得到是乙個執行位元組的指標,(
char *)&fmt+
4後正好執行了var3,因為fmt占用4個位元組。(int *)(
(char *)&fmt+
4),又將其轉換為執行4個位元組的指標,此時*((int *)((char *)&fmt+4)),那麼取出來的數字變是32位的資料,也就是var3。
總結:強制轉換為char *,那麼指標++後移動乙個位元組,*指標得到乙個位元組。強制轉換為int *,那麼指標++後移動4個位元組。同時*指標得到4個位元組。
無論什麼型別的指標變數,相減後得到的都是相差的個數。
二、什麼時候需要強制型別轉換
#include #include int main()
此時得到的結果為-64,因為*b只指向乙個位元組。 C語言指標強制型別轉換
概要 c語言中,任何乙個變數都必須占有乙個位址,而這個位址空間內的0 1 就是這個變數的值。不同的資料型別占有的空間大小不一,但是他們都必須有個位址,而這個位址就是硬體訪問的依據,而名字只是提供給程式設計師的一種記住這個位址的方便一點的方法。但是,不同的變數在機器中都是0 1 所以,我們不能簡單的通...
C語言指標強制型別轉換
概要 c語言中,任何乙個變數都必須占有乙個位址,而這個位址空間內的0 1 就是這個變數的值。不同的資料型別占有的空間大小不一,但是他們都必須有個位址,而這個位址就是硬體訪問的依據,而名字只是提供給程式設計師的一種記住這個位址的方便一點的方法。但是,不同的變數在機器中都是0 1 所以,我們不能簡單的通...
C語言指標強制型別轉換
一 舉例說明 上圖對應函式呼叫為int printf const char fmt,fmt為char 指標型別,所以共佔了32位位元組,但是 fmt執行的是乙個位元組,fmt 執行的是下乙個位元組,fmt得到乙個32位位址,char fmt得到是乙個執行位元組的指標,char fmt 4後正好執行了...