c語言指標的強制轉換

2021-06-20 23:00:00 字數 739 閱讀 1189

在c語言中經常看到以下類似的**:

int x = 1;

(char*)&x;

這樣的形式的**,這個裡面就涉及乙個型別轉換的問題。

以下是在vc6.0中除錯的結果

**:

int main(int argc, char* agrv)

輸出:

有些人可能會對printf("(char*)&num+1=%p \n", (char*)&num+1);輸出的結果感到不可理解。

分析:1,指標算術的規則

這個位址的大小=(此時p所在的位址)+(p指向的資料型別的位元組數*i)。

2,最開始num所在的位址上是乙個32位資料(num宣告為int型),在用(char*)對num所在的位址進行強制轉換的時候,將num所在的位址上儲存的資料由32位改變為8位,此時num所在位址的資料型別為char型。

所以在對(char*)&num+1的時候,就只是增加了乙個位元組的大小。

一般應用:

判斷機器的位元組順序(環境win7 32位,vc6.0)

int main(int argc, char* agrv)

else

return 0;

}

輸出:little

C語言指標強制型別轉換

一 舉例說明 上圖對應函式呼叫為int printf const char fmt,fmt為char 指標型別,所以共佔了32位位元組,但是 fmt執行的是乙個位元組,fmt 執行的是下乙個位元組,fmt得到乙個32位位址,char fmt得到是乙個執行位元組的指標,char fmt 4後正好執行了...

C語言指標強制型別轉換

概要 c語言中,任何乙個變數都必須占有乙個位址,而這個位址空間內的0 1 就是這個變數的值。不同的資料型別占有的空間大小不一,但是他們都必須有個位址,而這個位址就是硬體訪問的依據,而名字只是提供給程式設計師的一種記住這個位址的方便一點的方法。但是,不同的變數在機器中都是0 1 所以,我們不能簡單的通...

C語言指標強制型別轉換

概要 c語言中,任何乙個變數都必須占有乙個位址,而這個位址空間內的0 1 就是這個變數的值。不同的資料型別占有的空間大小不一,但是他們都必須有個位址,而這個位址就是硬體訪問的依據,而名字只是提供給程式設計師的一種記住這個位址的方便一點的方法。但是,不同的變數在機器中都是0 1 所以,我們不能簡單的通...