第二章,數(shù)據(jù)類(lèi)型
C 中的類(lèi)型可分為以下幾種:
1惧笛,基本類(lèi)型:它們是算術(shù)類(lèi)型从媚,包括兩種類(lèi)型:整數(shù)類(lèi)型和浮點(diǎn)類(lèi)型。
2患整,枚舉類(lèi)型:它們也是算術(shù)類(lèi)型拜效,被用來(lái)定義在程序中只能賦予其一定的離散整數(shù)值的變量。
3各谚,void 類(lèi)型:類(lèi)型說(shuō)明符?void?表明沒(méi)有可用的值紧憾。
4,派生類(lèi)型:它們包括:指針類(lèi)型昌渤、數(shù)組類(lèi)型赴穗、結(jié)構(gòu)類(lèi)型、共用體類(lèi)型和函數(shù)類(lèi)型膀息。
整數(shù)類(lèi)型
下表列出了關(guān)于標(biāo)準(zhǔn)整數(shù)類(lèi)型的存儲(chǔ)大小和值范圍的細(xì)節(jié):
類(lèi)型存儲(chǔ) ? ? ? ? ? ? ? ? ? 大小 ? ? ? ? ? ? ? ? ? ? ? 值范圍
char ? ? ? ? ? ? ? ? ? ? ? ? ? 1字節(jié) ? ? ? ? ? ? ? ? ? ? ?-128 到 127 或 0 到 255
unsigned char ? ? ? ? ? 1 字節(jié) ? ? ? ? ? ? ? ? ? ?0 到 255
signed ? ?char ? ? ? ? ? ? 1 字節(jié) ? ? ? ? ? ? ? ? ? ?-128 到 127
int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2 或 4 字節(jié) ? ? ? ? ? ?-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned ? ?int ? ? ? ? ? ?2 或 4 字節(jié) ? ? ? ? ? ? 0 到 65,535 或 0 到 4,294,967,295
short ? ? ? ? ? ? ? ? ? ? ? ? ? 2 字節(jié) ? ? ? ? ? ? ? ? ? ? -32,768 到 32,767
unsigned ? ?short ? ? ? 2 字節(jié) ? ? ? ? ? ? ? ? ? ? 0 到 65,535
long ? ? ? ? ? ? ? ? ? ? ? ? ? ?4 字節(jié) ? ? ? ? ? ? ? ? ? ? -2,147,483,648 到 2,147,483,647
unsigned long ? ? ? ? ? 4 字節(jié) ? ? ? ? ? ? ? ? ? ? ?0 到 4,294,967,295
為了得到某個(gè)類(lèi)型或某個(gè)變量在特定平臺(tái)上的準(zhǔn)確大小般眉,您可以使用?sizeof?運(yùn)算符。表達(dá)式?sizeof(type)?得到對(duì)象或類(lèi)型的存儲(chǔ)字節(jié)大小潜支。下面的實(shí)例演示了獲取 int 類(lèi)型的大械樵摺:
#include <stdio.h>
#include <limits.h>
?int main(){
?printf("int 存儲(chǔ)大小 : %lu \n", sizeof(int));
? return 0;
}
當(dāng)您在 Linux 上編譯并執(zhí)行上面的程序時(shí),它會(huì)產(chǎn)生下列結(jié)果:
int 存儲(chǔ)大小 : 4
浮點(diǎn)類(lèi)型
下表列出了關(guān)于標(biāo)準(zhǔn)浮點(diǎn)類(lèi)型的存儲(chǔ)大小冗酿、值范圍和精度的細(xì)節(jié):
類(lèi)型存儲(chǔ) ? ? ? ? ? ? ? ? ? ? ? ? ? ?大小 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?值范圍 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 精度
float ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4 字節(jié) ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.2E-38 到 3.4E+38 ? ? ? ? ? ? 6 位小數(shù)
double ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?8 字節(jié) ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.3E-308 到 1.7E+308 ? ? ? ?15 位小數(shù)
long double ? ? ? ? ? ? ? ? ? ? ? ?16 字節(jié) ? ? ? ? ? ? ? ? ? ? ? ? 3.4E-4932 到 1.1E+4932 ? ?19 位小數(shù)
頭文件 float.h 定義了宏埠对,在程序中可以使用這些值和其他有關(guān)實(shí)數(shù)二進(jìn)制表示的細(xì)節(jié)。下面的實(shí)例將輸出浮點(diǎn)類(lèi)型占用的存儲(chǔ)空間以及它的范圍值:
#include <stdio.h>
#include <float.h>?
int main(){
?printf("float 存儲(chǔ)最大字節(jié)數(shù) : %d \n", sizeof(float));
? printf("float 最小值: %E\n", FLT_MIN );
? printf("float 最大值: %E\n", FLT_MAX );
? printf("精度值: %d\n", FLT_DIG );
? return 0;
}
當(dāng)您在 Linux 上編譯并執(zhí)行上面的程序時(shí)裁替,它會(huì)產(chǎn)生下列結(jié)果:
float 存儲(chǔ)最大字節(jié)數(shù) : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
void 類(lèi)型
void 類(lèi)型指定沒(méi)有可用的值项玛。它通常用于以下三種情況下:
1,函數(shù)返回為空:C 中有各種函數(shù)都不返回值弱判,或者您可以說(shuō)它們返回空稍计。不返回值的函數(shù)的返回類(lèi)型為空。例如?void exit (int status);
2裕循,函數(shù)參數(shù)為空:C 中有各種函數(shù)不接受任何參數(shù)。不帶參數(shù)的函數(shù)可以接受一個(gè) void净刮。例如?int rand(void);
3剥哑,指針指向 void:類(lèi)型為 void * 的指針代表對(duì)象的地址,而不是類(lèi)型淹父。例如株婴,內(nèi)存分配函數(shù)?void *malloc( size_t size );?返回指向 void 的指針,可以轉(zhuǎn)換為任何數(shù)據(jù)類(lèi)型。
如果現(xiàn)在您還是無(wú)法完全理解 void 類(lèi)型困介,不用太擔(dān)心大审,在后續(xù)的章節(jié)中我們將會(huì)詳細(xì)講解這些概念
常用基本數(shù)據(jù)類(lèi)型占用空間(64位機(jī)器為例)
char : 1個(gè)字節(jié)
int :4個(gè)字節(jié)
float:4個(gè)字節(jié)
double:8個(gè)字節(jié)
基本類(lèi)型書(shū)寫(xiě)
整數(shù)
a,默認(rèn)為10進(jìn)制 座哩,10 徒扶,20。
b根穷,以0開(kāi)頭為8進(jìn)制姜骡,045,021屿良。
c.圈澈,以0b開(kāi)頭為2進(jìn)制,0b11101101尘惧。
d康栈,以0x開(kāi)頭為16進(jìn)制,0x21458adf喷橙。
小數(shù)
單精度常量:2.3f 啥么。
雙精度常量:2.3,默認(rèn)為雙精度重慢。
字符型常量
用英文單引號(hào)括起來(lái)饥臂,只保存一個(gè)字符'a'、'b' 似踱、'*' 隅熙,還有轉(zhuǎn)義字符 '\n' 、'\t'核芽。
字符串常量
用英文的雙引號(hào)引起來(lái) 可以保存多個(gè)字符:"abc"囚戚。
???Justforyou
??104***9108@a.com
2年前 (2017-09-01)
???zsz311
??zsz***@163.com
1、數(shù)據(jù)類(lèi)型轉(zhuǎn)換:C 語(yǔ)言中如果一個(gè)表達(dá)式中含有不同類(lèi)型的常量和變量轧简,在計(jì)算時(shí)驰坊,會(huì)將它們自動(dòng)轉(zhuǎn)換為同一種類(lèi)型;在 C 語(yǔ)言中也可以對(duì)數(shù)據(jù)類(lèi)型進(jìn)行強(qiáng)制轉(zhuǎn)換哮独;
2拳芙、自動(dòng)轉(zhuǎn)換規(guī)則:
a)浮點(diǎn)數(shù)賦給整型,該浮點(diǎn)數(shù)小數(shù)被舍去皮璧;
b)整數(shù)賦給浮點(diǎn)型舟扎,數(shù)值不變,但是被存儲(chǔ)到相應(yīng)的浮點(diǎn)型變量中悴务;
3睹限、強(qiáng)制類(lèi)型轉(zhuǎn)換形式:?(類(lèi)型說(shuō)明符)(表達(dá)式)
實(shí)例程序:
#include<stdio.h>
int main()
{
????float f,x=3.6,y=5.2;
????int i=4,a,b;
????a=x+y;
????b=(int)(x+y);
????f=10/i;
????printf("a=%d,b=%d,f=%f,x=%f\n",a,b,f,x);
}
例中先計(jì)算 x+y 值為 8.8,然后賦值給 a,因?yàn)閍為整型羡疗,所以自取整數(shù)部分8染服,a=8;
接下來(lái) b 把 x+y 強(qiáng)制轉(zhuǎn)換為整型;
最后 10/i 是兩個(gè)整數(shù)相除,結(jié)果仍為整數(shù) 2叨恨,把 2 賦給浮點(diǎn)數(shù) f;
x 為浮點(diǎn)型直接輸出柳刮。