1. 程式人生 > 實用技巧 >【老九學堂】【初識C語言】C語言基本資料型別

【老九學堂】【初識C語言】C語言基本資料型別

1.概述

 C 語言包含的資料型別如下圖所示:

C語言中的基本資料型別有整形、字元型、浮點型:單精度型、雙精度型;列舉型別、陣列等。

1、整形

整形分為整形常量和整形變數,常量就是我們平時所看到的準確的數字,例如:1、20、333、、、等等,變數則按我的理解是我像記憶體去申請一個儲存空間,告訴記憶體空間我申請了這個地方用來存放一個整形的資料,但是什麼時候放並沒有直接確定。一般佔4個位元組(32位),最高位代表符號,0表示正數,1表示負數,取值範圍是-2147483648~2147483647,在記憶體中的儲存順序是地位在前、高位在後,例如0x12345678在記憶體中的儲存如下。

定義:用int關鍵字,舉例如下: 

在C語言中基本的整形變數識別符號是int,在32位機器中一個int型資料使用32位也就是4個位元組進行儲存。

2、字元型

字元型在其本質上就是整形,我們在C語言中使用char表示一個字元型,他佔用一個字元的儲存空間,字元型在儲存時其內部儲存的依舊是二進位制資料,當我們讀出時將會得到一個整形資料,而我們輸出時會得到一個字元是因為我們人為的定義了一個對照表,這個表規定字元a的數值就是97,所以當我們遇到97時我們有兩種讀出方式,第一種以整數形式讀出就是97,另一種就是以字元型讀出,使用%c指定讀出形式,則對照表則為a。

3、浮點型

除了整形還有另一類很重要的基本資料型別,那就是實型。我們在學習數學時不僅使用整數,更多的時候則是使用小數,那麼浮點數在記憶體中飯的儲存與整數在記憶體中的儲存有什麼不一樣的地方嗎?其實,單從資料儲存上看,都是2進位制並沒有任何不同,但不同的是我們加在其上的表示規則與讀取規則。無論單精度還是雙精度的浮點數在記憶體中我們對於一個浮點數都分為三個部分:

1、符號位:0代表正 1代表負;

2、指數位:用於儲存科學技術法中的指數;

3、尾數位:儲存尾數部分

3.1 單精度

float:系統的基本浮點型別。至少能精確表示6位有效數字。

我們在C語言中使用一個float型別表示一個單精度的浮點型別,一個float型別佔用4個位元組的儲存位,其中最高位為符號位,緊接著8位為指數位,剩下的23位為尾數位,我們使用%f作為其格式說明符,而且float一般精確到小數位後6位,即保證6位有效。

3.2 雙精度

double:範圍(可能)更大的浮點型別。能表示比float型別更多的有效數字以及更大的指數。

long double:範圍(可能)更大的浮點型別。能表示比double型別更多的有效數字以及更大的指數。

我們在C語言中使用一個double型別表示一個雙精度的浮點型別,一個double型別佔用8個位元組的儲存位, 最高位為符號位,緊接著8位為指數位,剩下的52位為尾數位,我們使用%lf作為其格式說明符,而且double型別一般精確到小數位後12位,即保證12位有效。

4 指標

指標?什麼是指標?從根本上看,指標是一個值為記憶體地址的變數(或資料物件)。正如char型別變數的值是字元,int型別的變數的值是整數,指標變數的值地址。在C語言中,指標有許多用法。

假設一個指標變數名是ptr,可以編寫如下語句:

對於這條語句,我們就可以說ptr“指向”pooh。ptr和&pooh的區別是ptr是變數,而&pooh是常量。或者,ptr是可修改的左值,而&pooh是右值。還可以把ptr指向別處:

ptr = &bah; //把ptr指向bah,而不是pooh

現在ptr的值是bah的地址。

要建立指標變數,先要宣告指標變數的型別。

5 陣列

陣列是按照順序儲存的一系列型別相同的值,如10個char型別的字元或15個int型別的值。整個陣列有一個數組名,通過整數下標訪問陣列中單獨的項或元素。例如:以下宣告:

float debts[20];

宣告debts是一個內容20個元素的陣列,每個元素都可以儲存float型別的值。陣列的第一個元素是debts[0],第2個元素是debts[1],以此類推,直到debts[19]。注意,陣列元素的編號從0開始,不是從1開始。可以給每個元素賦float型別的值。例如,可以這樣寫:

debts[5] = 32.54;

debts[6] = 1.2e + 21;

實際上,使用陣列元素和使用同類型的變數一樣。例如,可以這樣把值讀入指定的元素中:

scanf("%f",&debts[4]);//把一個值讀入陣列的第5個元素

這裡要注意一個潛在的陷阱:考慮到影響執行的速度,C編譯器不會檢查陣列的下標是否正確。下面的程式碼,其實都不正確:

debts[20] = 88.32;//該陣列元素不存在!

debts[33] = 828.12;//該陣列元素不存在!

編譯器不會查詢這樣的錯誤。當執行程式時,這會導致資料被放置在已被其他資料佔用的地方,可能會破壞程式的結果甚至導致程式異常中斷。

6 複數和虛數型別(因為用的不多,所以這裡幾乎省略)

注意:

char型別肯定是1位元組,因為C把char型別的長度定義為1個位元組。所以在char型別長為16位,double型別長為64位的系統中,sizeof將報告double型別有4位元組長。

好了,簡單的資料型別介紹我們就到這裡了,希望能幫助大家理解、入門。筆記只是輔助,更多的還是需要大家跟著徐老溼一起學習,互動交流。最後預祝小夥伴們學業有成!

徐老師線下全棧就業班開始報名啦~

零基礎開講,8個月,Java全棧學習,終身推薦就業