數(shù)據(jù)類(lèi)型就像盒子一樣存儲(chǔ)物體,數(shù)據(jù)的類(lèi)型決定了數(shù)據(jù)的存儲(chǔ)大小。在C語(yǔ)言中,概括起來(lái)主要有如下四類(lèi)數(shù)據(jù)類(lèi)型:
基本數(shù)據(jù)類(lèi)型(Basic types):主要是整數(shù)類(lèi)型和浮點(diǎn)數(shù)類(lèi)型。
枚舉數(shù)據(jù)類(lèi)型(Enumerated types):主要是被定義成離散型的整數(shù)值。
空類(lèi)型(Void types):表明沒(méi)有可用的值。
派生類(lèi)型(Derived types):主要是指針類(lèi)型、數(shù)據(jù)類(lèi)型、結(jié)構(gòu)體類(lèi)型、共用體類(lèi)型和函數(shù)類(lèi)型。
但是根據(jù)不同的系統(tǒng)位數(shù),數(shù)據(jù)存儲(chǔ)大小會(huì)存在一些區(qū)別,具體平臺(tái)可以參考下表:
如果要準(zhǔn)確得到某個(gè)平臺(tái)準(zhǔn)確的數(shù)據(jù)存儲(chǔ)大小,可以使用sizeof(type)獲取,具體參考下面的程序。
#include <stdio.h>
int main()
{
printf("data size : n");
printf("char: %dn", sizeof(char));
printf("short: %dn", sizeof(short));
printf("int: %dn", sizeof(int));
printf("unsigned int: %dn", sizeof(unsigned int));
printf("long: %dn", sizeof(long));
printf("unsigned long: %dn", sizeof(unsigned long));
printf("long long: %dn", sizeof(long long));
printf("float: %dn", sizeof(float));
printf("double: %dn", sizeof(double));
printf("char*: %dn", sizeof(char*));
return 0;
}
在C語(yǔ)言中我們還可以給標(biāo)準(zhǔn)的數(shù)據(jù)類(lèi)型取個(gè)別名,這里可以使用typedef關(guān)鍵字來(lái)定義一個(gè)新的類(lèi)型。typedef關(guān)鍵字使用規(guī)則如下:
typedef 原始數(shù)據(jù)類(lèi)型名 新定義數(shù)據(jù)類(lèi)型名
對(duì)于不同的整數(shù)類(lèi)型可能大小不同,如果我們通過(guò)如下定義,就可以很直觀(guān)的知道相應(yīng)的類(lèi)型大小,還有結(jié)構(gòu)體類(lèi)型也常使用此關(guān)鍵字。
typedef int int32
typedef short int16
有兩點(diǎn)需要特別注意:
- typedef可以聲明各種類(lèi)型名,但不能用來(lái)定義變量;
- typedef只是對(duì)已經(jīng)存在的類(lèi)型增加一個(gè)類(lèi)型名,而沒(méi)有創(chuàng)造新的類(lèi)型;