c語言的資料型別分為基本資料型別、構造型別、指標型別、列舉型別和空型別等幾種。
一、基本資料型別
1.1 整型int
1>short int、short: 佔2個位元組,佔位符:%d %i
2>long int、long: 佔8個位元組,佔位符:%ld
3>signed int、signed: 佔4個位元組,佔位符:%d %i
4>unsigned int、unsigned: 佔4個位元組,佔位符:%zd
1.2 浮點型float\double
1>float: 佔4個位元組,佔位符:%f
2>double 佔8個位元組,佔位符:%f
3>double型別的精度要比float精度要高
4>佔位符%f預設保留小數點後6位。當要保留精確位數的小數時,可以在%和f中間用.位數表示,如要保留小數點後兩位,佔位符可用%.2f表示。
5>為了跟double區分開來,float 型資料都是以f結尾的,比如5.43f、-2.3f、0.0f。需要注意的是,絕對不能有10f這樣格式的,編譯器會直接報錯,只有小數才允許加上f。
1.3字元char
1>char 佔1個位元組,佔位符:%c
2>char型別儲存在記憶體中的是它的ascii值,如『a』儲存在記憶體中的值是65,當輸出佔位符用%c表示時,輸出a。當輸出佔位符用%d表示時,輸出65。
二、構造型別
2.1 陣列
1>只能由同一種型別的資料組成
2>定義:資料型別 陣列名[元素個數]
3>宣告並初始化的幾種方式
int ages[5]=; // 全部元素初始化
int ages[5]=; //部分元素初始化,其餘的元素預設初始化為0
int ages[5]=; //指定下標元素初始化,其餘的元素預設初始化為0
int ages=; //省略元素個數進行初始化,陣列會根據賦值過去的元素動態分配個數和記憶體給陣列
4>陣列可以作為函式引數進行傳遞,作為引數時可以省略元素個數,並且傳遞的是整個陣列的位址,修改函式形引數組元素的值,會影響到外面的實參陣列
5>陣列當做函式引數傳遞時,會當做指標變數來使用,指標變數在64bit編譯器環境下,佔據8個位元組。因此在c語言中通過形參是獲取不到陣列的實際長度的,需要傳參的時候把陣列長度通過形參的形式傳遞到函式內部。
/*
設計乙個函式,找出整型陣列元素的最大值
*/#include int maxofarray(int array, int length)
}return max;
}int main()
; //sizeof(ages)/sizeof(int)獲取到的是陣列的元素個數
int max = maxofarray(ages, sizeof(ages)/sizeof(int));
printf("%d\n", max);
return 0;
}
2.2 結構體struct
1>可以由不同型別的資料組成
2>先定義型別,再利用型別定義變數
// 1.定義結構體型別
struct person
;// 2.根據結構體型別,定義結構體變數
struct person p = ;
p.age = 30;
p.name = "rose";
struct person p2 = ;//初始化時指定成員進行初始化
printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height);
3>定義結構體型別時並不會分配儲存空間,當定義結構體變數時才真正分配儲存空間。結構體所占用的儲存空間,必須是最大成員位元組數的倍數
4>結構體型別的作用域:定義在函式外面時,全域性有效。即定義型別的那行開始,一直到檔案結尾。定義在函式(**塊)內部時,區域性有效,即從定義型別的那行開始,一直到函式(**塊)結束。
5>結構體型別不能重複定義
三、指標型別
2>指標變數的定義:變數型別 *變數名
int *p; //指標變數p前面的int,指明指標變數p只能指向int型別的資料
3>間接操作變數的值
int *p;
int a=10;
p=&a;
*p=20; //*的作用:訪問指向變數p指向的儲存空間
4>指標變數可以作為方法的形參,在方法內對指標形參指向變數的修改,會影響到外面的實參
#include void change(int *n);
int main()
void change(int *n)
5>清空指標:清空指標後,不能再間接訪問其他儲存空間
p=0;
p= null;
6>指標的其中乙個應用情景:當乙個引數需要返回多個值時,就可以用到指標。比如乙個想在乙個函式裡面返回兩個數的和跟差,可以通過把和作為返回值返回,把差的指標作為形參傳進函式中,對差的值進行操作。
#include int sumandminus(int n1, int n2, int *n3);
int main()
// 返回值是
int sumandminus(int n1, int n2, int *n3)
7>指標和字串
定義字串的2種方式:
7.1> 利用陣列
char name = "itcast";
* 特點:字串裡面的字元是可以修改的
* 使用場合:字串的內容需要經常修改
7.2> 利用指標
char *name = "itcast";
* 特點:字串其實是乙個常量字串,裡面的字元是不能修改
* 使用場合:字串的內容不需要修改,而且這個字串經常使用
四、列舉型別
1 >使用場合:當乙個變數只允許有幾個固定取值時
2 >先定義型別,再利用型別定義變數
enum season
;// 2.定義列舉變數
enum season ssummer;
//enum season s = 100000; //c語言是弱語法,即使賦的值不是列舉中的值,也不報錯。所以賦值的時候需要注意該列舉是怎樣定義的。
五、空型別
1>void 表示函式沒有返回值
C 知識總結 P01 型別系統
程式語言的型別系統有靜態型別與動態型別之分。靜態型別的程式語言在編譯期間會進行型別檢查,如果編譯期間發現型別不匹配或型別未知,編譯器就會報出對應的語法錯誤 動態型別的程式語言在執行期間才會確定常量變數型別,因而更加靈活。靜態型別與動態型別各有優勢。靜態型別的程式語言要求程式設計人員為每乙個變數指定型...
c語言回顧4 型別轉換
1.強制型別轉換 long l 800 int i int l 1 語法 type name 2 轉化的結果 目標型別能夠容納目標值 結果不變 short轉化為int,兩個位元組轉為四個位元組 目標型別不能容納目標值 結果產生截斷 int轉為char,四個位元組轉乙個位元組,把int的高三個位元組扔...
01分數規劃三型別總結
一 生成樹型 給定乙個帶權無向圖,每條邊有兩個權值a i b i 求圖的乙個生成樹,使得sigam a i sigam b i 最小.解析 我們假設已經找到了乙個解k,乙個新的解比k更優 那麼sigam a i sigam b i k 即sigam a i k sigam b i 0 sigam a...