C語言基本數(shù)據(jù)類型

1.概述

C 語言包含的數(shù)據(jù)類型如下圖所示:

2.各種數(shù)據(jù)類型介紹

2.1整型

整形包括短整型、整形和長整形。

2.1.1短整形

short a=1;

2.1.2整形

一般占4個字節(jié)(32位),最高位代表符號,0表示正數(shù),1表示負(fù)數(shù),取值范圍是-2147483648~2147483647,在內(nèi)存中的存儲順序是地位在前、高位在后,例如0x12345678在內(nèi)存中的存儲如下:

地址:0x0012ff78  0x0012ff79  0x0012ff7a  0x0012ff7b

數(shù)據(jù):  78      56        34      12

定義:用int關(guān)鍵字,舉例如下:

int a=6;

2.1.3長整形

long a=10;

2.2浮點(diǎn)型

浮點(diǎn)型包括單精度型和雙精度型。

2.2.1單精度型

浮點(diǎn)型,又稱實型,也稱單精度。一般占4個字節(jié)(32位),

float a=4.5;

地址:0x0012ff78  0x0012ff79  0x0012ff7a  0x0012ff7b

數(shù)據(jù):  00      00        90      40

2.2.2雙精度型

一般占8個字節(jié)(64位)

double?a=4.5;

地址:0x0012ff78  0x0012ff79  0x0012ff7a  0x0012ff7b  0x0012ff7c  0x0012ff7d  0x0012ff7e  0x0012ff7f

數(shù)據(jù):  00      00        00      00      00        00      12      40

2.3字符類型

在各種不同系統(tǒng)中,字符類型都占一個字節(jié)(8位)。定義如下:

char c='a';

也可以用字符對應(yīng)的ASCII碼賦值,如下:

char c=97;

3.數(shù)據(jù)類型與“模子”

short、int、long、char、float、double 這六個關(guān)鍵字代表C 語言里的六種基本數(shù)據(jù)類型。

怎么去理解它們呢? 舉個例子:見過藕煤球的那個東西吧?(沒見過?煤球總見過吧)。那個東西叫藕煤器,拿著它在和好的煤堆里這么一咔,一個煤球出來了。半徑12cm,12 個孔。不同型號的藕煤器咔出來的煤球大小不一樣,孔數(shù)也不一樣。這個藕煤器其實就是個模子。

現(xiàn)在我們聯(lián)想一下,short、int、long、char、float、double 這六個東東是不是很像不同類型的藕煤器???拿著它們在內(nèi)存上咔咔咔,不同大小的內(nèi)存就分配好了,當(dāng)然別忘了給它們?nèi)€好聽的名字。

在32 位的系統(tǒng)上short 咔出來的內(nèi)存大小是2 個byte;

int 咔出來的內(nèi)存大小是4 個byte;

long 咔出來的內(nèi)存大小是4 個byte;

float 咔出來的內(nèi)存大小是4 個byte;

double 咔出來的內(nèi)存大小是8 個byte;

char 咔出來的內(nèi)存大小是1 個byte。

(注意這里指一般情況,可能不同的平臺還會有所不同,具體平臺可以用sizeof 關(guān)鍵字測試一下)

很簡單吧?咔咔咔很爽吧?是很簡單,也確實很爽,但問題就是你咔出來這么多內(nèi)存塊,你總不能給他取名字叫做x1,x2,x3,x4,x5…或者長江1 號,長江2 號…吧。它們長得這么像(不是你家的老大,老二,老三…),過一陣子你就會忘了到底哪個名字和哪個內(nèi)存塊匹配了(到底誰嫁給誰了???^_^)。所以呢,給他們?nèi)∫粋€好的名字絕對重要。下面我們就來研究研究取什么樣的名字好。

4.變量的命名規(guī)則

1)命名應(yīng)當(dāng)直觀且可以拼讀,可望文知意,便于記憶和閱讀。

標(biāo)識符最好采用英文單詞或其組合,不允許使用拼音。程序中的英文單詞一般不要太復(fù)雜,用詞應(yīng)當(dāng)準(zhǔn)確。

2)命名的長度應(yīng)當(dāng)符合“min-length && max-information”原則。

C 是一種簡潔的語言, 命名也應(yīng)該是簡潔的。例如變量名MaxVal 就比MaxValueUntilOverflow 好用。標(biāo)識符的長度一般不要過長,較長的單詞可通過去掉“元音”形成縮寫。

另外,英文詞盡量不縮寫,特別是非常用專業(yè)名詞,如果有縮寫,在同一系統(tǒng)中對同一單詞必須使用相同的表示法,并且注明其意思。

3)當(dāng)標(biāo)識符由多個詞組成時,每個詞的第一個字母大寫,其余全部小寫。比如:

int CurrentVal;

這樣的名字看起來比較清晰,遠(yuǎn)比一長串字符好得多。

4)盡量避免名字中出現(xiàn)數(shù)字編號,如Value1,Value2 等,除非邏輯上的確需要編號。比如驅(qū)動開發(fā)時為管腳命名,非編號名字反而不好。

初學(xué)者總是喜歡用帶編號的變量名或函數(shù)名,這樣子看上去很簡單方便,但其實是一顆顆定時炸彈。這個習(xí)慣初學(xué)者一定要改過來。

5)對在多個文件之間共同使用的全局變量或函數(shù)要加范圍限定符(建議使用模塊名(縮寫)作為范圍限定符)。

(GUI_ ,etc)標(biāo)識符的命名規(guī)則:

6)標(biāo)識符名分為兩部分:規(guī)范標(biāo)識符前綴(后綴) + 含義標(biāo)識。非全局變量可以不用使用范圍限定符前綴。

7)作用域前綴命名規(guī)則。

8)數(shù)據(jù)類型前綴命名規(guī)則。

9)含義標(biāo)識命名規(guī)則,變量命名使用名詞性詞組,函數(shù)命名使用動詞性詞組。例如:

變量含義標(biāo)識符構(gòu)成:目標(biāo)詞+ 動詞(的過去分詞)+ [狀語] + [目的地];

函數(shù)含義標(biāo)識符構(gòu)成:動詞(一般現(xiàn)時)+目標(biāo)詞+[狀語]+[目的地];

10)程序中不得出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識符。例如:

int x, X; 變量x 與X 容易混淆

void foo(int x); 函數(shù)foo 與FOO 容易混淆

void FOO(float x);

這里還有一個要特別注意的就是1(數(shù)字1)和l(小寫字母l)之間,0(數(shù)字0)和o(小寫字母o)之間的區(qū)別。這兩對真是很難區(qū)分的,我曾經(jīng)的一個同事就被這個問題折騰了一次。

11)一個函數(shù)名禁止被用于其它之處。例如:

#include "c_standards.h"

void foo(int p_1)

{

int x = p_1;

}

void static_p(void)

{

int foo = 1u;

}

12)所有宏定義、枚舉常數(shù)、只讀變量全用大寫字母命名,用下劃線分割單詞。例如:

const int MAX_LENGTH = 100; //這不是常量,而是一個只讀變量,具體請往后看

#define FILE_PATH “/usr/tmp”

13)考慮到習(xí)慣性問題,局部變量中可采用通用的命名方式,僅限于n、i、j 等作為循環(huán)變量使用。

一定不要寫出如下這樣的代碼:

int p;

char i;

int c;

char * a;

一般來說習(xí)慣上用n,m,i,j,k 等表示int 類型的變量;c,ch 等表示字符類型變量;a 等表示數(shù)組;p 等表示指針。當(dāng)然這僅僅是一般習(xí)慣,除了i,j,k 等可以用來表示循環(huán)變量外,別的字符變量名盡量不要使用。

14)定義變量的同時千萬千萬別忘了初始化。定義變量時編譯器并不一定清空了這塊內(nèi)存,它的值可能是無效的數(shù)據(jù)。這個問題在內(nèi)存管理那章有非常詳細(xì)的討論,請參看。

15)不同類型數(shù)據(jù)之間的運(yùn)算要注意精度擴(kuò)展問題,一般低精度數(shù)據(jù)將向高精度數(shù)據(jù)擴(kuò)展。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容