計算機進行算術運算時,通常要求運算元具有相同的位數、相同的儲存方式。而c語言支援在表示式中混合使用基本資料型別,因此需要在不同的資料型別之間進行轉換。在c語言中存在兩種型別的轉換,一種是隱式轉換,由編譯器自動處理轉換而無需程式開發人員介入,另一種是強制型別轉換(顯式轉換),需要程式開發人員使用強制轉換運算子顯式地表明轉換。
隱式轉換主要發生在以下情況:
當賦值運算子右側表示式的型別和左側變數的型別不同時,總把賦值表示式右邊的表示式值轉換為左邊變數型別的值。
當函式呼叫時使用的實際引數和形式引數型別不同時
當return語句中表示式的型別和函式宣告的返回值型別不一致時。
c語言中提供了強制型別轉換,顯式地對進行型別轉換,其表示式格式為:
(型別名) 表示式
型別名為表示式的值應該轉換的型別。c語言將強制轉換中的(型別名)
看作是一元運算子,其優先順序高於二元運算子。
/**************************************
* conversion.c *
* *
* c語言中的型別轉換 *
**************************************/
#include
int main()
除了用巨集來定義型別外,可以利用型別定義來定義新的型別,其格式為:
typedef 原型別名 新型別名;
與巨集不同的是,編譯器會把將新型別名作為乙個型別名加入到型別列表中,而不是再預處理過程中被替換。
型別定義可以有力支援程式的可移植性。c語言自身就用typedef為那些可能因c語言的不同實現而不同的型別定義型別名,這些型別名以_t
結尾,例如size_t
,wchar_t
等。
sizeof
運算子用於計算指定型別值所需空間的大小,其格式為:
sizeof(型別名)
返回值為無符號整型,說明儲存型別名的值需要的位元組數。sizeof
除了用以型別名,也可以用以常量、變數和表示式。sizeof
是一元運算子,優先順序高於二元運算子。
由於sizeof
表示式的型別由實現定義,在顯式sizeof
值時建議將其轉換為unsigned long
型,使用轉換宣告"%lu"
。
/****************************************
* using_sizeof_typedef.c *
* *
* c語言中的sizeof運算子及typedef *
****************************************/
#include
int main()
k.n. king 著,呂秀峰 譯. c語言程式設計-現代方法. 人民郵電出版社 C語言中的型別轉換!
自動轉換發生在不同資料型別運算時,在編譯的時候自動完成 自動轉換遵循的規則就好比小盒子可以放進大盒子裡面一樣,下圖表示了型別自動轉換的規則。縮寫 ascii 英文全稱 american standard code for information interchange 美國資訊交換標準 是一種用於資...
C語言中的型別轉換
c語言中的型別轉換可以分為兩種 隱式轉換中的規則有 窄的向寬的轉變 unsigned 同型別無符號比有符號寬 同型別的轉換例如 int a 10 unsigned int b 10 if a b printf a b else printf a不同型別的轉換例如 int c 10 unsigned ...
C語言中的型別轉換
資料型別 窄 寬 char,short,int,long,float,long long,double 規定 同型別的資料無符號比有符號寬。一 隱式 預設 轉換 1 窄型別轉寬型別,左邊補符號位,無符號數左邊補零 寬窄型別依據的是位元組數長短 2 強制將寬型別轉成窄型別,保留低資料 二 顯式 強制 ...