二、列舉
三、聯合
1.結構體型別建立
struct stu//定義乙個學生結構體
;//分號不能丟
特殊的宣告:在宣告結構的時候,可以不完全的宣告
比如:匿名結構體型別
struct
x;struct
a[20],*p;
//p=&x;**非法,編譯器會把上面的兩個宣告當成完全不同的兩個型別
結構的不完整宣告
struct b;//不完整宣告
struct a
;struct b
;
2.結構成員的訪問
結構體變數訪問成員
結構體變數的成員是通過點操作符(.)。點操作符接受兩個運算元。例如:
;struct stu s;//定義結構體變數
strcpy(s.name, "zhangsan");//使用.訪問name成員
s.age = 18;//使用.訪問age成員
結構體訪問指向變數的成員
訪問指向乙個指向結構體變數的指標
struct s
s;void print(struct s *ps)
3.結構的自引用struct node
;
注意:型別重新命名用typedef
typedef
struct node
node;
4.結構體變數的定義和初始化struct point
p1; //宣告型別的同時定義變數p1
struct point p2; //定義結構圖變數p2
//初始化:定義變數的同時賦值
struct point p3 = ;
struct stu//型別宣告
;struct stu s = ;//初始化
struct node
n1 = , null};//結構體巢狀初始化
struct node n2 = , null };//結構體巢狀初始化
5.結構體內存對齊
為什麼存在記憶體對齊?
(1)平台原因(移植原因)
不是所有的硬體平台都能訪問任意位址上的任意資料的;某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常。
(2)效能原因(空間換取時間)
資料結構(尤其是棧)應該盡可能地在自然邊界上對齊;而對齊的記憶體訪問僅需要一次訪問。
總結:結構體的記憶體對齊是拿空間來換取時間的做法。
姐狗提的對齊規則:
(1)第乙個成員在與結構體變數偏移量為0的位址處。
(2)其它成員變數要對齊盜對齊數的整數倍的位址處。
對齊數=編譯器預設的乙個對齊數與該成員大小的較小值。vs的預設值為8,linux的預設值為4。
例如:
6.結構體傳參
struct s
;struct s s =
void print1(struct s s) //結構體傳參
void print2(struct s* s) //結構體位址傳參
int main()
1.列舉型別的定義enum day //星期
;enum *** //性別
;enum color //顏色
;
{}中的內容是列舉型別的可能取值,也叫列舉常量。這些可能取值都是有值的,預設從0開始,一次遞增1,在定義的時候也可以賦初值。
如:
enum color // 顏色
;
2.列舉的使用enum color // 顏色
;enum color clr = green; //只能拿列舉常量給變數賦值,才不會出現型別的差異
clr = 5; //不可以
3.列舉的特點
(1)增加**的可讀性和可維護性
(2)和#define定義的識別符號比較列舉有型別檢查,更加嚴謹。
(3)防止了命名汙染(封裝)
(4)便於除錯
(5)使用方便,一次可以定義多個常量
1.聯合型別的定義
聯合型別定義的變數包含一系列的成員,特徵是這些成員公用同一塊空間(所以聯合也叫共用體)。
比如:
//聯合型別的宣告
union un
;union un un; //聯合變數的定義
int main()
2.聯合的特點
聯合的成員是共用一塊記憶體空間的,這樣乙個聯合變數的大小,至少是最大成員的打大小(因為聯合至少得有能力儲存最大的那個成員)
union un
;union un un;
int main()
面試題:判斷當前計算機的大小端儲存
//**1
intcheck()
//**2
intcheck()
un; un.i=1;
return un.c;
}int main()
else
return
0;}
3.聯合大小的計算
(1)聯合的大小至少是最大成員的大小
(2)當最大成員不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。
union un1
;union un2
;int main()
C語言 自定義型別 結構體,列舉,聯合
結構 結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。struct tag variable list 宣告定義後所定義的成員變數 描述乙個學生 struct student 結構體的自引用 結構正確的自引用方式 struct node 2 typedef struct ...
C語言 自定義型別 結構體,列舉,聯合
結構體的基礎知識 結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。結構體的宣告 例如描述乙個學生 struct stu s s為變數列表 typedef struct stu s,p s,p為型別在宣告結構的時候,可以不完全的宣告。匿名結構體型別 struct x str...
自定義型別 結構體 列舉 聯合
結構體 所謂結構體,就是將一大堆值放在一起,建立乙個新的型別,這些成員可以是不同型別的變數。struct tag variable list tag 要求 1.見名知意 2.可以省略 3.不建議省略 member list c語言中,不能為空 variable list 變數列表,可以省略,建議省略...