一、結構體
struct 結構體名稱;
示例:
struct student;
說明:
(1)結構體型別並非只有一種,而是可以設計出多種結構體型別。
(2)結構體中可以包含其他結構體型別。
例如:
struct date
struct student;
方法一:
struct student;
int main()
方法二:
struct studentstu1,stu2,stu3; //stu1、stu2、stu3都是結構體型別變數
方法一:
struct student;
int main()
//定義了乙個結構體變數stu1,且對他進行初始化
printf("%s%d", stu1.name, stu1.score); //引用
}
方法二:
struct studentstu1= ; //定義了乙個結構體變數stu1,且對他進行初始化
int main()
注意:不能企圖通過輸出結構體變數名來達到輸出結構體變數所有成員的值例如:
printf("%s", stu1);
這是錯誤的
二、列舉
列舉就是把所有可能的值例舉出來
enum week //對星期的所有可能出現的情況進行列舉
weekday; //weekday是乙個列舉變數,注意和列舉常量區分
說明:
1、2、每乙個列舉元素都代表乙個整數,c語言編譯按照定義時的順序預設它們的值為0,1,2,3,4……。在上面的定義中,mon的值為0,tue的值為1,其他依次類推。
2、以上定義的enum week
就是列舉型別。{}中的內容就是列舉所有可能取得的值,也叫列舉常量。所以不能對其進行賦值。 例如:mon=1,tue=0;
這是錯誤的。但是卻可以在定義列舉型別時顯式的指出。例如:enum week ;
這是可以的,並且此時wed
的值為4,thu
的值為5。
3、列舉元素之間用的是逗號相隔。
三、聯合(共用體)
使幾個不同的變數共享同一段記憶體。
union un //宣告聯合型別
union un a; //定義聯合型別變數
a.c //引用聯合變數中的字元型變數c
a.i //引用聯合變數中的整型變數i
不能只引用聯合變數,列如:printf("%d",a);
這是錯誤的。應該寫成printf("%d",a.c);
#includeint main()
;
union un2
;printf("%d\n", sizeof(union un1));
printf("%d\n", sizeof(union un2));
}
程式執行結果:
解析:對齊數:編譯器預設的乙個對齊數與該成員大小的較小值。
windows預設的值為8
linux預設的值為4
對於第乙個聯合體來說,其中char
型別佔1個位元組,對齊數為1,int
型別佔4個位元組,對齊數為4,所以最大對齊數就是4。而最大成員char c[5]
佔5個位元組,根據第二條規則所說,當最大成員的大小不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。最大對齊數4的整數倍有8,故聯合un1的大小為8。
對於第二個聯合體來說,其中short
型別佔2個位元組,對齊數為2,int
型別佔4個位元組,對齊數為4,所以最大對齊數就是4。而最大成員shortr c[7]
佔14個位元組,根據第二條規則所說,當最大成員的大小不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。而最大對齊數4的整數倍有16,故聯合un1的大小為16。
自定義型別
typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...
自定義型別
下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...
自定義型別
列舉從字面意思理解就是將可能取的值一一枚舉出來,列舉型別沒有成員 可言,裡邊存放的是可能取值。列舉型別的定義 enum day enum color printf d n red printf d n green printf d n blue 執行結果 day和color都是定義的列舉型別,中的內...