這是本主題的第二篇文章,主要就結構體,列舉、聯合體做一些解釋現代c語言程式設計 結構化的基石,diy時代的最好代言人,是物件導向程式設計中類的老祖宗。
我們很容易定義乙個結構體,比如學生:
struct student
;
在使用該結構體的地方都可以使用stu_st 代替:
struct student stultz;
---> stu_st stultz
以下是一些需要注意的位置:
結構體長度計算 sizeof(sts)/sizeof(sts[0])//sts為乙個結構體陣列
這是個很尬尷的存在,可能是我做的工作比較低端,我使用聯合很少,最多是在判斷大小端時使用了聯合的。但是,我知道,在嵌入式領域,對於空間敏感的地方會使用較多的聯合,但是現在手機都快8g運存了,哎!
以下是書中歸納的聯合與結構體的區別:
聯合本質上是乙個成員相互重疊的結構,某一時刻 你只能使用乙個成員(也可以從乙個成員寫入,然後從另乙個成員讀出,來檢查某種型別的二進位制模式,或者用不同的方法解釋他們,但很明顯,這樣跟機器緊密相關)。聯合的大小是他的最大成員的大小,二結構的大小是成員大小之和。
列舉和#define 只有很小的區別,c標準表明列舉是整形,列舉常量是int型的,因此他們都可以和其他整型類別自由混合而不會出錯,
列舉的優點 :自動賦值。
#include #include struct student;
struct action;
typedef void (*action_pf)();//函式指標型別宣告
typedef struct student //學生結構體
stu_st;
//列舉學生行為
typedef enum actioncode;
//行為列舉與行為函式的對應結構體
typedef struct type_2_action
typeaction_st;
//行為函式
void do_exam(stu_st* su)
void do_study(stu_st* su )
//關聯結構體初始化
typeaction_st ac = ,
};int main()
;//乙個學生結構體的初始化
int i = 0;
//當行為型別為doexam時,執行該函式
for (;i < sizeof(ac)/sizeof(ac[0]);++i)
return 0;
}
輸出結果:the no.1 student stultz lee is examing
說明:以上** 很刻意地使用了文中提到的所有內容,僅供參考。實際編碼比這段**要精煉些。有機會會列出來。
《你必須知道的495個C語言問題》一導讀
你必須知道的495個c語言問題 你可能在酒吧或聚會上有這樣的經歷,有人跟你打賭讓你做一些看似簡單,但最後卻限於人體特質或物理規律而根本無法完成的事情。跟你打賭的人知道,他挑戰的人越多,他持續獲勝的可能性就越大,因為這些特質或規律雖然十分隱晦,卻是相當穩定 可以 的。同樣,如果你讓很多人來完成乙個複雜...
《你必須知道的495個C語言問題》知識筆記及補充
它可以用作一種格式上的提示表明函式的定義可能在另乙個原始檔中,但在 extern int f 和 int f 之間並沒有實質的區別。補充 extern可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。此外extern也可用來進行鏈結指定...
你必須知道的495個C語言問題,學習體會一
c語言作為一門古老的語言,其靈活性和容易出錯都讓人 又愛又恨,書籍 你必須知道的495個c語言問題 使用問答的形式,告訴讀者 c語言使用的各個方面的知識,包括一些冷知識等。以下,我要摘錄和整理些 我認為比較重要的知識進行分享。1.關於int與long,眾所周知,c語言標準沒有規定標準型別的大小,特別...