**引言:數據經常以成組的形式存在。在C中,使用結構可以把不同類型的值存放在一起。**
**結構的聲明有兩種**
1、struct SIMPLE{
int a;
char b;
float c;
};然后用標簽SIMPLE去聲明結構體變量。
2、typedef struct{
int a;
char b;
float c;
}Simple;然后用Simple去聲明結構體變量。此時Simple是個類型名,而不像上面的SIMPLE是個標簽。
結構成員可以是標量、數組、指針甚至是其他結構。
結構成員的直接訪問用點操作符(.)訪問。例如Simple a;a.a或a.b或a.c。
結構成員的間接訪問用->操作符訪問,它是針對結構指針使用的。例如Simple *a;a->a或a->b或a->c。
結構的自引用是結構的成員里包含結構本身,但這種包含不能是直接包含,而應該包含的是指向該結構的指針。
結構作為函數參數時,一般使用指向結構的指針。向函數傳遞指針的缺陷在于函數現在可以對調用程序的結構變量進行修改。如果不希望如此,可以在函數使用const關鍵字來防止這類修改。而且,傳遞結構指針比傳遞結構本身更有效率。
**總結:**
1、具有相同成員列表的結構聲明產生不同類型的變量。
2、使用typedef為一個子引用的結構定義名字時應該小心。
3、向函數傳遞結構參數是低效的。
4、把結構標簽聲明和結構的typedef聲明放在頭文件中,當源文件需要這些聲明時可以通過#include指令包含。
5、結構成員的最佳排列形式并不一定就是考慮邊界對齊而浪費內存空間最少的那種排列形式。
- 前言
- (四)回調函數
- (一)while(1)死循環與for(;;)死循環的區別
- (二)static關鍵字
- (三)函數
- (四)可變參數函數
- (五)setjmp和longjmp
- (六)指針
- (七)回調函數
- (八)字符串
- (九)動態內存分配
- (十)結構體
- (十一)深入理解指針
- (十二)命令行參數
- (十三)printf、fprintf、sprintf和snprintf函數
- (十四)const關鍵字詳解
- (十五)字符串輸入函數fgets、gets和scanf
- (十六)字符串輸出函數puts、fputs和printf
- (十七)字符/字符串輸出函數fputc、fputs、putc、putchar和puts
- (十八)字符/字符串輸入函數fgetc、fgets、getc、getchar和gets
- (十九)restrict關鍵詞
- (二十)scanf函數詳解
- (二一)內聯函數
- (二二)位操作
- (二三)errno變量
- (二四)內存分配