最容易忽略的C語言知識點細節,編程大牛進階之路!

當你選擇了一種語言,意味着你還選擇了一組技術、一個社區。——Joshua Bloch

一條長語句需要換行寫,可以在行的末尾加入反斜槓 \ 表示;宏都是單行定義,如果多行定義,也是用反斜槓 \ 表示。

例如:

    #define  LONG_MACRO  \

            "...........很長的字符串哈........."     

    int i,j,k  \

        x,y,z;


變量有全局變量、局部變量,全局變量系統默認初始化,局部變量不會自動初始化,建議所有變量使用前,手工初始化。

基本數值類型轉換有兩種,一種隱式,一種顯式,建議在需要類型轉換的情況下,一律使用強制轉換運算符 (類型)變量名 顯式轉換,轉換的原則是從取值範圍較小的類型轉到取值範圍較大的類型,結果值不會損失,反之結果值則損失部分值。

數組分配的內存空間是連續的,從低地址到高地址,數組第1個元素的地址就是內存空間的首地址。

數組的下標是從0開始,長度爲n的數組,最大下標是n-1,數組下標超出範圍,越界訪問是嚴重的錯誤。

數組可以作爲參數(指針或數組形式)傳遞給函數,但是不能作爲函數返回值,可以返回指向數組的指針。

例如:

sizeof(int)是求類型長度的運算符,不是函數。

 

函數聲明中的參數名稱可以省略,也可以和函數定義不一樣。

例如:以下三種都是聲明相同的函數func,第三種聲明且定義了函數。

    int func(int,int);

    int func(int a, int b);

    int func(int c, int d)

    {

    }

main函數可以不帶參數,也可以帶兩個參數,帶參數時,執行程序時可以實現命令行參數功能。

例如:

    編譯以後程序名稱爲 test.exe

函數類型是由函數返回值類型、函數名稱、參數類型列表標識,只要三者相同則爲同一個函數類型,參數名稱不是。

 

C語言函數允許遞歸調用,在函數中調用自身,函數遞歸是將大問題化解相似的小問題去解決,函數必須設置遞歸調用的結束條件,一般是當化解成的小問題可以直接解決時,遞歸返回值。例如計算階乘值,例如10的階乘,化解成10*9的階乘,9的階乘可以進一步化解成9*8的階乘,每次求階乘的方式一樣,只是問題大小不一樣,當求最小問題1的階乘時,就可以直接返回1。

例如:

C語言函數支持變長參數,參數個數可以不確定,通過<stdarg.h>標準庫提供支持。

 

位段類型空間分配規則,當一個int型無法容納全部位段信息,就會再次分配另一個int類型,空間只會以int的整數倍分配;當int型剩餘的位數無法滿足當前位段成員要求,則該成員的值會直接存儲到下一個int型的空間,不會跨兩個int型空間存儲。

參數化宏實現函數功能時,更加強大和靈活,因爲沒有類型限制。

例如:

    #define  MAX(a,b) ((a) > (b) ? (a) : (b))

    返回a,b中值比較大的,a,b只要能比較大小就可以,不限定類型。


       如果你想要獲取更多C語言、C++、Window以及QT的知識!筆者推薦一個C語言/C++編程零基礎入門學習交流俱樂部(點擊進入,有編程學習文件(源碼,項目實戰教學視頻以及給小白的零基礎教程),歡迎初學者和正在進階中的小夥伴們!