C語言的資料型別

2021-07-14 17:57:16 字數 3489 閱讀 8374

一、c的資料型別

1.什麼是資料型別

2.各資料型別的位元組長度和指標變數的位元組長度

3.變數及變數的特點

4.右左法則及舉例

5.sizeof()和strlen()

一.c的資料型別

1.什麼是資料型別

資料型別就是資料集合的劃分,不同的資料型別對cpu具有不一樣的意義,所以一定要注意相應變數資料型別的定義和轉換。          資料型別又劃分為兩大類:基本資料型別和復合資料型別。

●復合資料型別包括 陣列,結構,聯合,列舉,指標

●基本資料型別包括 空型別,字元型,數值型

●而數值型又包括實型(單精度實型,雙精度實型),整型(短整型,整型,長整型)

2.各資料型別的位元組長度和指標變數的位元組長度

2.1.在不同的編譯系統中,編譯系統對各資料型別分配位元組數可能不同,對此我們在編寫程式前必須對所用的編譯系統有相關的了解。例如在gcc編譯中各資料型別位元組長度為:

int:4個位元組;short:2個位元組;long:4個位元組:char:1個位元組;float:4個位元組

2.2指標的位元組長度:通常指標的位元組長度都是固定的,且長度有作業系統所決定。指標中存放的元素為位址,而不同的作業系統有其固定的位址長度,因而指標的位元組長度也就固定。例如:

3.變數及變數的特點

3.1什麼是變數

在其值的作用域內可以改變的量稱為變數。乙個變數應該有乙個名字,在記憶體佔據一定的儲存空間。

3.2變數的三大特點:

●變數的資料型別:主要說明變數占用記憶體空間的大小如int型。

●變數的作用域:變數的有效性的範圍。

●變數的儲存型別:變數在記憶體中的儲存方式。不同的儲存方式影響變數在記憶體的生存週期。

3.3變數的宣告和定義

定義:建立乙個變數,為其分配記憶體空間,並為它取變數名,乙個變數只能定義一次。

宣告:告知編譯器這個變數名已經匹配在一塊記憶體上了,但是並未為其分配記憶體。

3.4變數宣告和定義的兩種情況:

●定義性宣告:需要建立儲存空間。例如:int a在宣告時就已經建立了儲存空間。

●引用性宣告:不需要建立儲存空間。例如:extern int a其中變數a是在別的檔案中定義的。

3.5變數的儲存區域的劃分

①棧空間:區域性變數,函式形參,自動變數

②堆空間:malloc ralloc calloc 分配空間

③ 資料段分為bbs,rodata,data。 

●bss:儲存未初始化的全域性變數

●rodata:常量

●data(靜態資料區):全域性變數,static修飾變數

④資料段**段 即資料區

棧空間特點:先進後出,管理許可權:系統

堆空間特點:先進先出,管理許可權:使用者

3.6●全域性變數與區域性變數的區別

①存放位置     

區域性變數存放於棧空間,全域性變數存放在 資料段的data(靜態資料區)區域

②賦值當我們定義變數時,如果定義為全域性變數,系統會自動把變數初始化為預設值(內建型別初始化為系統預設值,自定義型別呼叫相應的初始化函式進行初始化),而定義為區域性變數時,系統不會自動初始化變數,我們必須手動對變數進行初始化(無論是內建型別還是自定義型別),否則得到的結果可能和我們預期的不一致,甚至導致程式出錯

③何時釋放

全域性變數:在編譯時分配,在main結束時釋放;

區域性變數、形參:在函式呼叫時分配,在函式返回時釋放

④作用域

●全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字再次宣告這個全域性變數。

●靜態區域性變數具有區域性作用域。它只被初始化一次,自從第一次初始化直到程式與你新內閣結束都一直存在,他和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

●區域性變數也只有區域性作用域,他是自動物件,他在程式執行期間不是一直存在,而是只在函式執行期間存在,函式的一次呼叫結束後,變數就被撤銷,其所占用的記憶體也被收回。  

●靜態全域性變數也具有全域性作用域,他與全域性變數的區別在於如果程式包含多個檔案的話,他作用於定義它的文裡,不能作用到其他檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同的靜態全域性變數,他們也是不同的變數。

4.右左法則及舉例

4.1.右左法則:從最內部的括號(變數)開始閱讀宣告,先向右看,再向左看,碰到乙個括號時調轉閱讀方向,括號內的內容閱讀完畢則跳出括號。直到全部閱讀結束為止。例如:  

(1)int a;            a 整型變數

(2)int *a;            p 整型指標變數

(3)int **a;           p指標變數p,p指向另一指標,另一指標指向整型數

(4)int *a[10];         a是有十個元素的陣列,裡面存放著指標變數,這些指標指向整型(整型指標陣列)

(5)char (*a)(int);      a是乙個指標變數,它指向乙個形參為int型,返回值為char型的函式(char型函式指標變數)

(6)int (*a[10])(int);    a是乙個指標陣列,該指標指向乙個形參為int型,返回值為int型的函式

(7)int *(* (*fp) (int))[10];fp是乙個函式指標變數,該函式是乙個形參為int型,返回值為陣列指標的函式,該陣列指標指                       向整型指標

(8)void *(*c)(char ,int (*)());c是乙個函式指標變數。該函式是乙個形參為char,另一形參為形參為空返回值為int型的函                        數指標變數且返回值為void的函式。

5.sizeof()和strlen()

5.1.sizeof(): sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。切記sizeof()是乙個運算子而不是乙個函式。例如:

sizeof()在對變數的儲存大小進行計算時sizeof()可不加上括號,sizeof()在對資料型別的儲存大小進行計算時sizeof()不能省略括號。

5.2.strlen():從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含'\0'),實質上是乙個c函式。

c語言的資料型別

c 資料型別 基本資料型別 構造資料型別 指標型別 空型別。其中,構造資料型別包括 陣列,列舉型別,結構體,聯合體。基本資料型別有 整形,浮點型,字元型。常用的整型常量有 十六進製制 0x開頭 八進位制 0開頭 十進位制。c語言變數遵守 先定義後使用 的規則。預設情況下,定義的變數是有符號的。int...

C語言的資料型別

識別符號採用如下兩種方式書寫 駝峰式,下劃線式。標準c函式有輸入輸出緩衝區,linux的函式無此。當使用scanf讀取,輸入非法時,使用scanf n scanf c 從而不影響對後面讀取資料的影響.特別注意執行時,scanf的輸入格式,空空格,打不打逗號。scanf.c include int m...

C語言的資料型別

今天學習的c語言的資料型別,看了資料型別的總覽圖,發現c語言的資料型別之多之龐大。c語言主要三大型別 構造型,基本型別,指標型和空型別 void 今天主要學習的就是其中的基本型別,基本型別又分為 字元型 char 數值型 和 列舉型 enum 數值型分為 整形 短整型 short 整形 int 長形...