目錄
3. 列舉
3.1 列舉型別的定義
3.2 列舉的優點
3.3 列舉的使用
3.4 列舉型別的大小
4. 聯合(共用體)
4.1 聯合型別的定義
4.2 聯合的特點
4.2.1 特點闡述
4.2.2 特點應用----判斷大小端
4.3 聯合大小的計算
3. 列舉
3.1 列舉型別的定義
#include<stdio.h> enum Day//星期 { Mon, Tues, Wed, }; int main() { printf("%d %d %d", Mon, Tues, Wed); return 0; }
運行截圖:
{}中的內容是列舉型別的可能取值,也叫 列舉常量 ,
這些可能取值都是有值的,默認從0開始,一次遞增1,當然在定義的時候也可以賦初值,
例如:
#include<stdio.h> enum Color//顏色 { RED = 1, GREEN, BLUE = 4 }; int main() { printf("%d %d %d",RED,GREEN,BLUE); return 0; }
運行截圖:
3.2 列舉的優點
1. 增加代碼的可讀性和可維護性
2. 和#define定義的識別符號比較列舉有型別檢查,更加嚴謹,
3. 防止了命名污染(封裝)
4. 便于除錯
5. 使用方便,一次可以定義多個常量
3.3 列舉的使用
enum Color//顏色 { RED = 1, GREEN = 2, BLUE = 4 }; enum Color clr = GREEN;//只能拿列舉常量給列舉變數賦值,才不會出現型別的差異, clr = 5;//ok?這樣是不可以的,因為左右型別不一致
3.4 列舉型別的大小
#include<stdio.h> enum sex { MALE, FEMALE, SECRET }; int main() { enum sex s = FEMALE; printf("%d\n", sizeof(enum sex)); printf("%d\n", sizeof(s)); return 0; }
運行截圖:
結論:無論是列舉型別的大小,還是列舉型別的變數的大小,在記憶體中都是占據4個位元組,
4. 聯合(共用體)
4.1 聯合型別的定義
聯合也是一種特殊的自定義型別 這種型別定義的變數也包含一系列的成員,特征是這些成員公用同一塊空間(所以聯合也叫共用體),
比如:
//聯合型別的宣告 union Un { char c; int i; }; //聯合變數的定義 union Un un; //計算連個變數的大小 printf("%d\n", sizeof(un)); printf("%p\n",&un); printf("%p\n",&un.c); printf("%p\n",&un.i);
運行截圖:
4.2 聯合的特點
4.2.1 特點闡述
聯合的成員是共用同一塊記憶體空間的,這樣一個聯合變數的大小,至少是最大成員的大小(因為聯 合至少得有能力保存最大的那個成員),
4.2.2 特點應用----判斷大小端
方法一:運用聯合的方式
#include<stdio.h> union S { int i; char ch; }; int check_sys() { union S s; s.i = 1; return s.ch; } int main() { union S s; s.i = 1; int ret = check_sys(); if (1 == ret) { printf("小端存盤\n"); } else { printf("大端存盤\n"); } return 0; }
方法二:運用非聯合的方式
#include<stdio.h> int check_sys() { int a = 1; return *(char*)&a; } int main() { int ret = check_sys(); if (1 == ret) { printf("小端存盤\n"); } else { printf("大端存盤\n"); } return 0; }
4.3 聯合大小的計算
(1)聯合的大小至少是最大成員的大小,
(2)當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍,
簡而言之就是大于成員變數最大空間數,且是最大對齊數的整數倍,
比如:
union un { int a;//對齊數為4,默認對齊數為8,取較小值,即4 char arr[5];//最大成員的大小為5,對齊數為1(拿char來算,而不是拿整個陣列所占的記憶體空間來算),默認對齊數為8,取較小值1 //所以聯合體的最大對齊數為4,所以union un的記憶體空間的大小必須是4的倍數,同時還必須大于5,所以空間大小為8個位元組 };
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/413512.html
標籤:其他
下一篇:初級遞回題決議




