C 語言中的共用體和列舉

2021-10-03 12:22:51 字數 1762 閱讀 1623

和結構體一同出現的一般還會有共用體和列舉型別,這三者的語法格式相同,不同的只是使用的情境不同。

共用體能夠將不同型別的變數存放到同一段記憶體單元,這也就是 union 的由來。

union unionname

;

先看下邊的程式:

#include typedef union student1

ustu;

typedef struct student2

sstu;

int main()

; sstu stu2 = ;

printf("sizeof(ustu) = %d\n",sizeof(ustu));

printf("&stu1.num = %p,stu1.num = %d\n",&stu1.num,stu1.num);

printf("&stu1.*** = %p,stu1.*** = %c\n",&stu1.***,stu1.***);

printf("&stu1.score = %p,stu1.score = %d\n",&stu1.score,stu1.score);

printf("sizeof(sstu) = %d\n",sizeof(sstu));

printf("&stu2.num = %p,stu2.num = %d\n",&stu2.num,stu2.num);

printf("&stu2.*** = %p,stu2.*** = %c\n",&stu2.***,stu2.***);

printf("&stu2.score = %p,stu2.score = %d\n",&stu2.score,stu2.score);

return 0;

}

結果為:

sizeof(ustu) = 4

&stu1.num = 0x7fffec657b40,stu1.num = 10

&stu1.*** = 0x7fffec657b40,stu1.*** =

&stu1.score = 0x7fffec657b40,stu1.score = 10

sizeof(sstu) = 8

&stu2.num = 0x7fffec657b50,stu2.num = 20

&stu2.*** = 0x7fffec657b52,stu2.*** = y

&stu2.score = 0x7fffec657b54,stu2.score = 90

從上面的結果來看:

利用共用體型別可以判斷計算機的大小端:

#include typedef union student1

ustu;

int main()

結果為:

stu.top = d

stu.num = 41424344

由結果可知,資料低位儲存在記憶體低位位址中,即為小端模式。

列舉型別可以定義一組整型常量,從而提高程式的可讀性。列舉型別有時候用在 switch 中,作為一種標籤使用。

enum enumname

;

#include typedef enum week

day;

int main()

結果為:

0,1,2,3,4,5,6

0

從上面的結果可以看出:

c語言的結構體 共用體 列舉

struct s var struct s var1 結構體本身的開頭和結尾位址都是4位元組的整數倍 var2 結構體本身的開頭和結尾位址都是4位元組的整數倍 var3 結構體本身的開頭和結尾位址都是4位元組的整數倍 由此可見,元素的安放順序非常講究 offsetof type,member typ...

C 結構體 共用體和列舉

結構體就不做多的介紹了,只說說他的位欄位 struct sct 共用體是一中資料格式,他能夠儲存不同的資料型別,但只能同時儲存其中的一種型別。include using namespace std union uno int main 列舉可以代替const,在預設情況下,列舉變數的列舉值為0,1,...

c 結構體 共用體和列舉

結構體型別 c 中的結構體成員既可以是資料,也可以是函式 c語言中定義結構體變數必須加struct 這也是很多時候和typedef 但是在c 裡面,可以不加 結構體和類的不同在於,結構體中的變數預設是public型別,而類則預設是private struct空間計算 1 整體空間是占用空間最大成員 ...