枚举类型
直接看代码解释
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
enum Sex {
MALE,
FEMALE,
SECRET
};
int main() {
enum Sex s = MALE;
s = FEMALE;
printf("%d\n",sizeof(s));
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
getchar();
return 0;
}
枚举变量s大小为4个字节。 在Sex中的 MALE,FEMALE, SECRET 三个值没有被赋值的情况下其值分别为0,1,2。可以在enum中对其进行修改,修改的值不会受前面值的影响,所修改的下一个值默认在修改值的基础上加1。 在main函数中FAMALE就作为常量存在,不能对其进行修改。 s = 3中,3是int类型,而s是Sex类型,所以不能只接赋值。
联合(共用体)
联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间。 用代码说明一下
#include<stdio.h>
union Un {
char c;
int i;
};
int main() {
union Un u;
printf("%d\n", sizeof(u));
printf("u的地址为:%p\n", &u);
printf("c的地址为:%p\n", &(u.c));
printf("i的地址为:%p\n", &(u.i));
getchar();
return 0;
}
u的大小为4哥字节,u和u.c和u.i占的空间是相同的,所以不能同时修改c和i。
判断大小端储存结构
int cheak_sys() {
int a = 1;
return *(char*)(&a);
}
int main() {
int ret = 0;
if (1 == ret) {
printf("小端储存");
}
else {
printf("大端储存");
}
getchar();
return 0;
}
利用共用体结构实现大小端判断
int cheak_sys() {
union Un {
char c;
int i;
}u;
u.i= 1;
return u.c;
}
int main() {
int ret = 0;
if (1 == ret) {
printf("小端储存");
}
else {
printf("大端储存");
}
getchar();
return 0;
}
联合大小的计算
- 联合大小至少是最大成员的大小
- 当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
union Un {
char arr[5];
int i;
};
int main() {
union Un u;
printf("%d\n", sizeof(u));
getchar();
return 0;
}
int i 大小为4,默认对齐数是8,对齐数为4 char arr[5] 大小为5,数组元素类型为1,默认对齐数为8,对齐数为1 5不是4的整数倍,所以对齐到4的整数倍,大小为8。
|