當前位置:才華齋>計算機>C語言>

C語言基礎知識彙總

C語言 閱讀(2.97W)

C語言具有簡潔緊湊,靈活方便,運算子豐富,資料型別豐富,表達方式靈活實用等特點,所以C語言程式設計更主動、靈活。很多人從C語言入門程式設計,下面整理了一些C語言基礎知識,希望對大家有所幫助!

C語言基礎知識彙總

1.C語言中,變數必須先聲明後使用,即一個程式塊(花括號對)中所有臨時變數必須在第一條可執行語句之前全部宣告,而不能像C++那樣隨用隨宣告;

2.C語言中引數傳值傳遞形參,即為引數的拷貝,此與C++/JAVA相同,同時值得注意,ANSI C不支援引用,此與C++/JAVA有區別,那麼要對引數進行修改只能使用指標方式(指標傳值指標本身仍是形參,要修改指標本身那必須使用雙重指標);

3.C語言預設型別為int,即引數無型別或函式無返回值型別宣告,則認為是int(貌似一些編譯器不支援),同時不建議使用該特性;

4.無引數的函式宣告應當使用void表明,否則C語言按照老式宣告方法忽略引數型別檢查;

5.全域性變數建議全大寫,區域性變數建議全小寫,內部變數31個字元有效,外部變數不區分大小寫,僅6個字元有效,所以必須保持唯一性;

C是按照多位元組實現的,UNICODE是後來發展的,所以有char/WCHAR,與中char直接是雙位元組有區別,在C#中匯入dll時值得注意;

7.C語言支援列舉,並且列舉和int直接強制型別轉換即可,比方便;

8.#define宣告巨集定義直接在編譯時替換,不進行型別檢查,const宣告常量則可以進行型別檢查;

9.運算子的優先順序記憶比較麻煩,還是()可靠;

並不是一無是處,在不考慮程式可讀性的情況下可能獲得更高的效率;

11.函式實際也可以與特殊的型別相對應,那樣對於理解函式指標比較方便,函式為外部型別;

ic用於全域性變數和函式則限定該變數和函式的使用範圍僅為該原始檔(從而無需考慮與其他原始檔不得重名),用於函式內部變數則該變數的記憶體分配和回收不再同於普通臨時變數(呼叫函式生成,函式返回銷燬),而是一直存在於靜態變數區,從而可以儲存一些狀態;

13.標頭檔案的作用體現在呼叫其他原始檔時不需要再次寫函式定義,所以實現函式是不需要標頭檔案的,呼叫時才需要,可以採用富標頭檔案定義一大組介面,然後使用多個原始檔分別實現;

14.暫存器變數使用register宣告,僅適用於使用頻率高的區域性變數(含形參)(受限於底層硬體,不一定會被分配到暫存器,但是這麼寫不影響效率);

15.全域性變數和靜態變數預設初始化為全零且僅初始化一次,區域性變數預設初始化為未定義且每次都會重新初始化;

16.遞迴呼叫的方法一般比較緊湊,但是每次呼叫會單獨維護呼叫的堆疊,所以效率不是最高;

17.#include的作用體現於將一些內容避免重新寫一遍(主要是型別、函式和外部變數定義),所以實際上不一定為h檔案;

18.表示一行尚未結束,對於定義長的字串和define比較有用;

19.函式呼叫的.執行順序不確定,所以對於a()+b()這樣函式中使用相同變數並且改變其值的需要藉助臨時變數處理,防止不同實現的呼叫順序不一致;

20.##用於巨集定義中連線前後兩個部分,如cat(a, b)   a ## b;

21.指標是C/C++的重要內容,當然也是雙面刃,用好了很方便而且高效,用不好那就造成程式不穩定;

22.使用va_list, va_start, va_arg, va_end來定義可變引數的函式,通過va_start函式中的第一個不變引數將va_list指向引數列表(函式呼叫的棧中),然後通過va_arg獲取每個引數並將va_list移動指定型別的長度,最後則通過va_end完成必要的回收工作,需要指出的是va_arg沒有結束邊界,所以比較有效的方式有兩種,一種對於引數型別一致,則可以第一個引數指出後續引數的總數,然後依次獲取,另一種對於不同型別的引數混用,則可以通過型別標識+引數配對的方式進行使用(第一個引數依然可以指定數量,當然也可以檢查標識),從而避免最後讀取無效的引數,對於可變引數僅支援int和double兩種型別(引數未限定型別,故按照舊式宣告理解)以及指標型別;

23.函式指標是用來在C語言中實現動態呼叫的比較有效的方式

24.結構體用作引數依然是拷貝為形參傳遞,這點與JAVA中全部物件都是類有區別(類的物件通過引用傳值,C#支援struct),所以對於大的結構體事宜使用指標傳遞,而對於小的結構體拷貝傳值效率並不低;

25.程式碼中字元陣列為靜態常量,對其操作無效,程式塊中陣列的宣告是可以自動回收的,通過malloc/calloc分配的記憶體為堆記憶體,需要自行通過free回收;