C語言的 強制型別轉換 以及 字元字面值

2022-09-01 15:12:16 字數 657 閱讀 3987

c語言的顯式/隱式型別轉換,都有乙個中間變數的存在,原資料的型別、內容都不變。

以下**,都用gcc編譯。

1 #include2

3int

main()

4

之前以為單引號多字元,比如'123'會報錯,測試了一下才發現只會警告(gcc,**裡給出警告資訊),能編譯通過:

1 #include 2

3int

main()

4

以上分別輸出1~9個數字組成的字元字面值,輸出型別為int型,中間有個隱式型別轉換的過程。

第一行輸出'1'的ascii碼值49;

第二行則將'1'和'2'的ascii碼值分別賦予int型中間變數的低位2個位元組,即0x3132,所以輸出為12594 = (49 << 8) + 50;警告資訊提示為多字元字面值;

第三四行的結果原理同上;

第五行以下的,原理同上,但是只取低4位,例如第9行,只取'6789',即0x36373839;警告資訊提示字元字面值超出int型別的位元組數。

c語言強制型別轉換

例子 include輸出結果 the char is p the short is 4464 the int is 70000 the float is 70000.000000 問題 為什麼float 型別的70000 轉成char型變成了 p 首先資料型別本質是什麼?底層硬體最小的儲存單元只有開...

C語言指標強制型別轉換

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

C語言指標強制型別轉換

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