一、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 長形...