C語言關鍵字 (一),c語言關鍵字
0.定義和聲明的區別
1、什麼是定義?
所謂的定義就是編譯器建立一個對象,為這個對象分配一塊記憶體並給它取上一個名字,這個名字就是我們經常所說的變數名或對象名。這個名字一旦和這塊記憶體匹配起來,他們就同生共死,不離不棄,並且這塊記憶體的位置也不能被改變。一個變數或對象在一定的地區內只能被定義一次。
2、什麼事聲明?
聲明就是告訴編譯器,這個名字已經匹配到一塊記憶體上了,聲明可以出現多次。同時也告訴編譯器,這個名字已被定義了,別的地方再也不能用它來作為變數名或對象名。
3、聲明和定義的區別?
定義建立了對象別為這個對象分配了記憶體,聲明沒有分配記憶體。
1. 最寬宏大量的關鍵字 ----auto
auto: 在預設情況下,編譯器預設所有變數都是auto的。
2. 最快的關鍵字 ---- registr
register: 這個關鍵字請求編譯器儘可能地將變數儲存在CPU內部寄存器中,而不是通過記憶體定址訪問以提高效率。注意 是儘可能,不是絕對。
注意: 1、register變數必須是能被CPU寄存器接受的類型,這意味著 register 變數必須是一個單個的值,並且其長度應小於或等於整型的長度。
2、不能用取址符"&"來擷取 register變數的地址。
3. 最名不副實的關鍵字 ---- static
1、修飾變數
1> 靜態全域變數
範圍僅限於變數被定義的檔案中,其他檔案即使使用 extern 聲明也沒法使用它。
準確的說:範圍是從定義之處開始,到檔案結尾處結束,在定義之處前面的代碼也不能使用它,想要使用就在前面再加 extern ***
2> 靜態局部變數
在函數體內定義的,就只能在這個函數裡用,同一個文檔中其他函數也無法使用。
由於被 static 修飾的變數總是存在記憶體的靜態區,所以即使這個函數運行結束,這個靜態變數的值也不會被銷毀,函數下次使用時仍然能用到這個值
2、修飾函數
作用: 函數前加 static 使得函數稱為靜態函數。但此處 "static" 的含義不是指儲存方式,而是指對函數的範圍僅局限於本檔案。
好處: 不同的人編寫不同的函數時,不用擔心自己定義的函數是否會與其他檔案中的函數同名。
4. 基礎資料型別 (Elementary Data Type) ---- short, int, long, char, float, double
1、變數的命名規則
***
5. 最冤枉的關鍵字 ---- sizeof
1、sizeof 是關鍵字不是函數。
2、sizeof 在計算變數所佔空間大小時,括弧可以省略,而計算類型 大小時不能省略。
6. signed, unsigned 關鍵字
基礎資料型別 (Elementary Data Type)的自高位用來儲存符號位: 最高位如果是1,表明這個數是負數,其值為除最高位以外的剩餘位的值添上"-"
如果最高位是 0 ,表明這個數是正數,其值為除最高位以外的剩餘位的值。
7. if,else 組合
1、else 到底與哪個is匹配?
else 始終與同一括弧內最賤的末匹配的if語句結合。
程式中的分界符 "{" 和 "}" 對齊。
2、if語句後面的分號
if 語句後加分號 不會出現錯誤,但會與出現不同的結果,應注意。
3、使用 if 語句的其他質疑事項
1> 先處理正常情況,再處理異常情況。
2> 確保 if 和 else 子句沒有弄反。
8. switch, case 組合
使用 switch,case 組合可以提高效率。
1、每個 case 語句的結尾絕對不要忘記了加 break; ,否則將導致多個分支重疊。
2、最後必須使用 default 分支,即使程式不要要也應使用: default : break;
9. do, while, for 關鍵字
1、3種迴圈
1> while 迴圈
while(1) 表示死迴圈
也可以寫成: while(true), while(1 == 1), while((bool)1)等
先判斷 while 後面括弧裡的值,如果為真則執行其後面的代碼,否則不執行。
2> do - while迴圈
先執行 do 後面的代碼,然後再判斷 while 後括弧裡的值
如果為真,迴圈開始; 否則,迴圈不開始。
3> for 迴圈
for 迴圈可以很容易地控制次數,很多用於事Crowdsourced Security Testing道迴圈次數的情況下。
2、break 與 continue 的區別
break: 表示終止本層迴圈。
continue: 表示終止本次迴圈。當執行到 continue時,本輪迴圈終止,進入下一輪迴圈。
3、迴圈語句的注意點
1> 在多重迴圈中,如果有可能,應當將最長的迴圈放在最內層,最短的迴圈放在最外層,以減少CPU跨切迴圈層次數。
2> 建議 for 語句的迴圈控制變數的取值採用"半開半閉區間"寫法,更直觀。
3> 迴圈要儘可能段,要使代碼清晰,一目瞭然。
4> 把迴圈嵌套控制在 3層以內。