c 語言標準定義的32 個關鍵字
1、auto 宣告自動變數,預設時編譯器一般預設為auto
2、int 宣告整型變數
3、double 宣告雙精度變數:雙精度浮點型
4、long 宣告長整型變數
5、char 宣告字元型變數
6、float 宣告浮點型變數:單精度浮點型
6.1 float的有效位通常有6位,指的是小數點後面有6位數,四捨五入。
6.2 通常不將float與乙個具體值進行比較,因為float在系統中只是儲存乙個相接近的值。
6.3 float儲存的是接近值,所以只能在某個精度內比較。如if((ftestval >= -epsinon) && (ftestval <= epsinon))
7、short 宣告短整型變數
8、signed 宣告有符號型別變數
8.1、如果沒有寫符號型別,則系統預設為有符號型。最高位代表符號位,0代表正,1代表負。
8.2、符號位參與運算,如果最高位有進製或者借位,則改變最高位
8.3、如果一數字數超出了型別表示範圍,只取型別儲存位數後幾位。
例如 char a= -129;
系統中負數用補碼表示。負數的補碼 = 正數絕對值按位取反+1
129在系統中二進位制表示: 0 1000 0001
按位取反:1 0111 1110
+1:1 0111 1111
因為129超出了char的表示範圍,只取型別對應的位(截斷)。
因此,a = 0111 1111 =0x7f
9、unsigned 宣告無符號型別變數
10、struct 宣告結構體變數
10.1 空結構體占用1位元組(系統最小單位1位元組,生活中無法造出0大小的模子。同理malloc無法返回0位元組)
10.2 結構體大小不包含柔性陣列。柔性陣列只能算是陣列的特殊成員。
struct a;
sizeof(a) = sizeof(i)=4;
(a*) p = (a*)malloc(sizeof(a)+100*sizeof(int));即array指向100的陣列起始單元
11、union 宣告聯合資料型別
union開闢足夠的空間來儲存多個資料成員中的乙個。
所有成員公用乙個儲存空間,同乙個時間只能儲存(操作)其中乙個
unionu;
u.array[0]=0x38;
u.array[1]=0x39;
u.i =0x3938;
利用union判斷系統的大小端(乙個資料(非結構體)高低位元組與儲存位置高低位元組)
unionu;
u.i=1;
if
小端
else
大端
12、enum 宣告列舉型別
12.1enum變數型別可以給字元常量賦值,如果不賦值系統自動從被賦初值的那個常量開始依次加1,如果都沒賦值從0開始依次加1.
sizeof(enum) = sizeof(int),enum代表乙個列舉常量,代表乙個整數
12.2列舉與巨集定義區別
1列舉是乙個集合代表一類值,巨集定義不是
2列舉可以自增1,這樣不用每個值都定義,而巨集必須每個值都定義
13、static 宣告靜態變數
14 、switch 用於開關語句
case 後面的值必須為整型值(int,字元常量,字串常量,
const修飾的變數不行被當做變數處理)
default 開關語句中的「其他」分支
15、break 跳出當前迴圈
16、register 宣告暫存器變數
16.1 高速系統盡量將變數存放在暫存器中,暫存器數量有限,不一定所有宣告的變數都放在暫存器中
16.2 因為變數有可能放在暫存器中,而非記憶體裡,所以記憶體定址&不一定可以找得到
16.3 register變數必須是乙個可被接受的變數(意味著結構體可能失敗),長度小於等於整型。
16.4 通常乙個變數使用頻率很高,編譯器會自動將該變數儲存在暫存器上,加快響應速度。(volatile用法)
17、const 宣告唯讀變數:const int max_length = 100,int array[max_length]; //錯誤,max
不是常量,而是乙個唯讀變數
const定義的變數儲存在靜態區,整個系統只有乙個拷貝。而define定義的則有若干個拷貝。
18、volatile 表明該變數容易被編譯器未知的因素改變比如硬體、其他執行緒等,要求編譯器訪問該變數時不要進行優化。(register修飾)
19、typedef 用以給資料型別取別名(當然還有其他作用)
19.1 stu_pst const stu,const stu_pst stu都表示stu指向的物件不能被改變,這裡stu_pst代表資料型別,看作一整體,固忽略資料型別
19.2 typedef作語法分析時作儲存型別判斷
儲存型別指示符:extern\static\auto\register,因此typedef不能與這幾個儲存型別連用。每個變數只能有一種儲存型別
所以typedef static int int 錯誤
19.3 typedef不支援型別擴充套件,比如unsigned int j 錯誤。
19.4 typedef宣告的是一種資料型別別名,#define只是做巨集展開。
typedef int * int_p
int_p a,b; 定義ab都是int型
#define int* int_p;
int_p a,b;展開成int *a,b;表示a是乙個指標變數,但b是乙個整型變數
20、extern 宣告變數是在其他檔案正宣告(也可以看做是引用變數)
21、return 子程式返回語句(可以帶引數,也可不帶引數)
22、void 宣告函式無返回值或無引數,宣告空型別指標
23、continue 結束當前迴圈,開始下一輪迴圈
24、do 迴圈語句的迴圈體
while 迴圈語句的迴圈條件
25、if 條件語句
else 條件語句否定分支(與if 連用)
if空語句
if(條件) ; = if(條件)
nop; //空語句
26、for 一種迴圈語句(可意會不可言傳)
27、goto 無條件跳轉語句
28、sizeof 計算物件型別所佔記憶體空間大小。sizeof(型別名)、sizeof 變數 = sizeof(變數)。
28.1 對不同的變數求記憶體大小都是轉化為物件型別的大小。
28.2 對表示式求大小是對表示式結果型別求大小。並不會計算表示式
28.3 sizeof 返回unsigned int。故if(-1
short int a=1,b=1,c;
printf("%d\n",sizeof(c=a+b));//求c型別大小,結果2
printf("%d\n",sizeof(a+b));//a,b被提公升到int型別,結果4
29、bool與0值比較
if(btest),if(!btest) 正確 btest非0代表真
if(btest == true ) //錯誤,因為不同系統對true定義不同1,-1都有
30、float與0值比較
由於float只是乙個近似值,不能直接和0進行比較。只能在某個精度範圍內比較
31、指標與0比較
if(!p),if(p==0) //將p作int判斷,錯誤
if(p),if(!p) //將p做bool型判斷,錯誤
if(null==p),if(null!=p) //正確
C語言關鍵字
c語言關鍵字 在檔案範圍的教訓和關鍵字,你知道靜態變數保持他們的價值觀,甚至不在他們超出範圍的破壞。比如說呢。int generateid int main this program prints 01 2 請注意,s nid一直保持它的價值的跨多個函式呼叫。static關鍵字有另一種意思當應用到全...
C語言關鍵字
關鍵字就是已被c語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變數名 函式名等 由ansi標準定義的c語言關鍵字共32個 auto double int struct break else long switch case enum register typedef char extern...
C語言關鍵字
microsoft 買補 收特 eles 否則 鴨思 error 錯誤 a帽?一 c語言的關鍵字共有32個,根據關鍵字的作用,可分其為資料型別關鍵字 控制語句關鍵字 儲存型別關鍵字和其它關鍵字四類。1 資料型別關鍵字 12個 1 char 宣告字元型變數或函式 查爾 2 double 宣告雙精度變數...