c語言數據類型
本文來源:vcok.com
所謂數據類型是按被說明量的性質,表示形式,佔據存儲空間的多少,構造特色來劃分的。
在C語言中,數據類型可分爲:基本數據類型,構造數據類型,指針類型,空類型四大類。
1.基本數據類型
基本數據類型最主要的特色是,其值不能夠再分解爲其它類型。也就是說,基本數據類型是自我說明的。
對於基本數據類型量,按其取值是否可改變又分爲常量和變量兩種。在程序執行過程當中,其值不發生改變的量稱爲常量,取值可變的量稱爲變量。它們可與數據類型結合起來分類。例如,可分爲整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是能夠不經說明而直接引用的,而變量則必須先說明後使用。
整型量 整型量包括整型常量、整型變量。
整型常量 整型常量就是整常數。在C語言中,使用的整常數有八進制、十六進制和十進制三種。
1.八進制整常數 八進制整常數必須以0開頭,即以0做爲八進制數的前綴。數碼取值爲0~7。八進制數一般是無符號數。
如下各數是合法的八進制數: 015(十進制爲13) 0101(十進制爲65) 0177777(十進制爲65535)
如下各數不是合法的八進制數: 256(無前綴0) 03A2(包含了非八進制數碼) -0127(出現了負號)
2.十六進制整常數 十六進制整常數的前綴爲0X或0x。其數碼取值爲0~9,A~F或a~f。
如下各數是合法的十六進制整常數: 0X2A(十進制爲42) 0XA0 (十進制爲160) 0XFFFF (十進制爲65535)
如下各數不是合法的十六進制整常數: 5A (無前綴0X) 0X3H (含有非十六進制數碼)
3.十進制整常數 十進制整常數沒有前綴。其數碼爲0~9。
如下各數是合法的十進制整常數: 237 -568 65535 1627
如下各數不是合法的十進制整常數: 023 (不能有前導0) 23D (含有非十進制數碼) 在程序中是根據前綴來區分各類進制數的。所以在書寫常數時不要把前綴弄錯形成結果不正確。
4.整型常數的後綴在16位字長的機器上,基本整型的長度也爲16位,所以表示的數的範圍也是有限定的。
十進制無符號整常數的範圍爲0~65535,有符號數爲-32768~+32767。
八進制無符號數的表示範圍爲0~0177777。
十六進制無符號數的表示範圍爲0X0~0XFFFF或0x0~0xFFFF。
若是使用的數超過了上述範圍,就必須用長整型數來表示。長整型數是用後綴「L」或「l」來表示的。
例如:
十進制長整常數 158L (十進制爲158) 358000L (十進制爲-358000)
八進制長整常數 012L (十進制爲10) 077L (十進制爲63) 0200000L (十進制爲65536)
十六進制長整常數 0X15L (十進制爲21) 0XA5L (十進制爲165) 0X10000L (十進制爲65536) 長整數158L和基本整常數158 在數值上並沒有區別。但對158L,由於是長整型量,C編譯系統將爲它分配4個字節存儲空間。而對158,由於是基本整型,只分配2 個字節的存儲空間。所以在運算和輸出格式上要予以注意,避免出錯。無符號數也可用後綴表示,整型常數的無符號數的後綴爲「U」或「u」。
例如: 358u,0x38Au,235Lu 均爲無符號數。前綴,後綴可同時使用以表示各類類型的數。如0XA5Lu表示十六進制無符號長整數A5,其十進制爲165。
整型變量 整型變量可分爲如下幾類:
1.基本型 類型說明符爲int,在內存中佔2個字節,其取值爲基本整常數。
2.短整量 類型說明符爲short int或short'C110F1。所佔字節和取值範圍均與基本型相同。
3.長整型 類型說明符爲long int或long ,在內存中佔4個字節,其取值爲長整常數。
4.無符號型 類型說明符爲unsigned。
無符號型又可與上述三種類型匹配而構成: (1)無符號基本型 類型說明符爲unsigned int或unsigned。 (2)無符號短整型 類型說明符爲unsigned short (3)無符號長整型 類型說明符爲unsigned long 各類無符號類型量所佔的內存空間字節數與相應的有符號類型量相同。但因爲省去了符號位,故不能表示負數。
在書寫變量說明時,應注意如下幾點:
1.容許在一個類型說明符後,說明多個相同類型的變量。各變量名之間用逗號間隔。類型說明符與變量名之間至少用一個空格間隔。
2.最後一個變量名以後必須以「;」號結尾。
3.變量說明必須放在變量使用以前。通常放在函數體的開頭部分。
實型量 包括實型常量和實型變量。
實型常量 實型常量也稱爲實數或者浮點數。在C語言中,實數只採用十進制。它有二種形式: 十進制數形式指數形式
1.十進制數形式由數碼0~ 9和小數點組成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均爲合法的實數。
2.指數形式由十進制數,加階碼標誌「e」或「E」以及階碼(只能爲整數,能夠帶符號)組成。其通常形式爲a E n (a爲十進制數,n爲十進制整數)其值爲 a*10,n 如: 2.1E5 (等於2.1*10,5), 3.7E-2 (等於3.7*10,)-2*) 0.5E7 (等於0.5*10,7), -2.8E-2 (等於-2.8*10,)-2*)如下不是合法的實數 345 (無小數點) E7 (階碼標誌E以前無數字) -5 (無階碼標誌) 53.-E3 (負號位置不對) 2.7E (無階碼) 標準C容許浮點數使用後綴。後綴爲「f」或「F」即表示該數爲浮點數。如356f和356.是等價的。下例說明了這種狀況:
void main()
{
printf("%f\n%f\n",356.,356f);
}
void 指明main不返回任何值 利用printf顯示結果 結束
實型變量 實型變量分爲兩類:單精度型和雙精度型.
其類型說明符爲float 單精度說明符,double 雙精度說明符。在Turbo C中單精度型佔4個字節(32位)內存空間,其數值範圍爲3.4E-38~3.4E+38,只能提供七位有效數字。雙精度型佔8 個字節(64位)內存空間,其數值範圍爲1.7E-308~1.7E+308,可提供16位有效數字。實型變量說明的格式和書寫規則與整型相同。
例如: float x,y; (x,y爲單精度實型量)
double a,b,c; (a,b,c爲雙精度實型量) 實型常數不分單、雙精度,都按雙精度double型處理。
字符型量 字符型量包括字符常量和字符變量。
字符常量 字符常量是用單引號括起來的一個字符。例如'a','b','=','+','?'都是合法字符常量。在C語言中,字符常量有如下特色:
1.字符常量只能用單引號括起來,不能用雙引號或其它括號。
2.字符常量只能是單個字符,不能是字符串。
3.字符能夠是字符集中任意字符。但數字被定義爲字符型以後就不能參與數值運算。如'5'和5 是不一樣的。'5'是字符常量,不能參與運算。
轉義字符 轉義字符也是一種特殊的字符常量。轉義字符以反斜線"\"開頭,後跟一個或幾個字符。轉義字符具備特定的含義,不一樣於字符原有的意義,故稱「轉義」字符。例如,在前面各例題printf函數的格式串中用到的「\n」就是一個轉義字符,其意義是「回車換行」。轉義字符主要用來表示那些用通常字符不便於表示的控制代碼。經常使用的轉義字符及其含義
\n 回車換行
\t 橫向跳到下一製表位置
\v 豎向跳格
\b 退格
\r 回車
\f 走紙換頁
\\ 反斜線符"\"
\' 單引號符
\a 鳴鈴
\ddd 1~3位八進制數所表明的字符
\xhh 1~2位十六進制數所表明的字符
廣義地講,C語言字符集中的任何一個字符都可用轉義字符來表示。
字符變量 字符變量的取值是字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型說明的格式和書寫規則都與整型變量相同。
字符串常量是由一對雙引號括起的字符序列。例如: "CHINA" ,"C program: , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不一樣的量。它們之間主要有如下區別:
1.字符常量由單引號括起來,字符串常量由雙引號括起來。
2.字符常量只能是單個字符,字符串常量則能夠含一個或多個字符。
3.能夠把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在C語言中沒有相應的字符串變量。這是與BASIC 語言不一樣的。可是能夠用一個字符數組來存放一個字符串常量。在數組一章內予以介紹。
4.字符常量佔一個字節的內存空間。字符串常量佔的內存字節數等於字符串中字節數加1。增長的一個字節中存放字符"\0"(ASCII碼爲0)。這是字符串結束的標誌。例如,字符串 "C program"在內存中所佔的字節爲:C program\0。字符常量'a'和字符串常量"a"雖然都只有一個字符,但在內存中的狀況是不一樣的。
'a'在內存中佔一個字節,可表示爲:a
"a"在內存中佔二個字節,可表示爲:a\0符號常量
符號常量 在C語言中,能夠用一個標識符來表示一個常量,稱之爲符號常量。
符號常量在使用以前必須先定義,其通常形式爲:
#define 標識符 常量 其中#define也是一條預處理命令(預處理命令都?quot;#"開頭),稱爲宏定義命令(在第九章預處理程序中將進一步介紹),其功能是把該標識符定義爲其後的常量值。一經定義,之後在程序中全部出現該標識符的地方均代之以該常量值。習慣上符號常量的標識符用大寫字母,變量標識符用小寫字母,以示區別。
#define PI 3.14159
void main(){
float s,r;
r=5;
s=PI*r*r;
printf("s=%f\n",s);
}
由宏定義命令定義PI 爲3.14159 s,r定義爲實數 5->r PI*r*r->s
顯示程序結果 float s,r; r=5; s=PI*r*r; 本程序在主函數以前由宏定義命令定義PI 爲3.14159,在程序中即以該值代替PI 。s=PI*r*r等效於s=3.14159*r*r。應該注意的是,符號常量不是變量,它所表明的值在整個做用域內不能再改變。也就是說,在程序中,不能再用賦值語句對它從新賦值。
2.構造數據類型 是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型的值能夠分解成若干個「成員」或「元素」。每一個「成員」都是一個基本數據類型或又是一個構造類型。在C語言中,構造類型有如下幾種:
·數組類型
·結構類型
·聯合類型
3.指針類型 指針是一種特殊的,同時又是具備重要做用的數據類型。其值用來表示某個量在內存儲器中的地址。雖然指針變量的取值相似於整型量,但這是兩個類型徹底不一樣的量,所以不能混爲一談。
4.空類型 在調用函數值時,一般應向調用者返回一個函數值。這個返回的函數值是具備必定的數據類型的,應在函數定義及函數說明中給以說明,可是,也有一類函數,調用後並不須要向調用者返回函數值, 這種函數能夠定義爲「空類型」。其類型說明符爲void。