admin管理员组文章数量:1794759
自定义类型:联合体和枚举
1. 联合体
1.1 联合体类型的声明
像结构体一样,联合体也是由一个或多个成员构成,这些成员可以是不同类型。
但是编译器只为最大的成员分配足够的内存空间。联合体特点是所有成员共用同一块内存空间。所以联合体也叫共同体。
给成员其中一个赋值,其他成员的值也跟着变化。
#include<stdio.h> //联合类型的声明 union UN { char ch; int i; }; int main() { //联合变量定义 union UN un = { 0 }; un.i = 1; printf("%zd", sizeof(un)); return 0; }
1.2联合体的特点
联合的成员是共用同一块内存空间,联合体的大小至少是最大成员的大小。
1.3 相同成员的结构体和联合体对比
1.4 联合体大小的计算
-> 联合体的大小至少是最大成员的大小。
->当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
代码语言:javascript代码运行次数:0运行复制union Un
{
char a[5];
int i;
};
union Un1
{
short a[7];
int i;
};
int main()
{
union Un un = { 0 };
union Un1 un1 = { 0 };
printf("%zd\n", sizeof(un));
printf("%zd\n", sizeof(un1));
return 0;
}
结果:
1.5 联合一个练习
使用联合体写程序,判断当前机器属于大端还是小端?(百度试题)
代码语言:javascript代码运行次数:0运行复制int main()
{
union Un
{
char c;
int i;
};
union Un un = { 0 };
un.i = 1;
if (un.c == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
举一反三: 不使用联合体判断机器属于大小端字节序列?
代码语言:javascript代码运行次数:0运行复制int main()
{
int a = 1;
if (*((char*)&a)== 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
4.枚举类型的声明
关键字:enum。
//枚举日期 enum Day { Mon, Tues, Wed, Thur, Fri, Sat, Sun, };
//枚举性别 enum Sex { MALE, FEMALE, SECRET, };
//枚举三原色 enum Color { RED, GREEN, BLUE, };
这些枚举的值默认从0开始,依次递增1,也可以对枚举类型赋初值。
如:
//枚举三原色 enum Color { RED=3, GREEN=7, BLUE=8, };
5. 枚举类型的优点
我们也可以使用#define定义常量,为什么还有枚举?
枚举的优点: 1. 增加代码的可读性和可维护性。 2. 和#define定义的标识符比较枚举有类型检查,更加严谨。 3. 便于调试,预处理阶段会删除 #define 定义的符号。 4. 使用方便,一次可以定义多个变量。 5. 枚举变量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用。
6 枚举类型的使用
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-11-20,如有侵权请联系 cloudcommunity@tencent 删除变量编译器程序函数intenum Color { RED=3, GREEN=7, BLUE=8, }; enum Color cls = GREEN;//使用枚举常量为枚举变量赋值
本文标签: 自定义类型联合体和枚举
版权声明:本文标题:自定义类型:联合体和枚举 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754216855a1699934.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论