和結構體一同出現的一般還會有共用體和列舉型別,這三者的語法格式相同,不同的只是使用的情境不同。
共用體能夠將不同型別的變數存放到同一段記憶體單元,這也就是 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 整體空間是占用空間最大成員 ...