欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 初学c语言19(自定义类型:联合和枚举)

初学c语言19(自定义类型:联合和枚举)

2025/11/11 1:45:11 来源:https://blog.csdn.net/s060618/article/details/148149381  浏览:    关键词:初学c语言19(自定义类型:联合和枚举)

一.联合体类型的声明

和结构体一样,由一个或多个成员组成,可以由不同类型组成

关键字union

形式:

特点编译器只为最大的成员的分配足够的空间,使所有成员可共用同一片空间,所以联合体也叫做共用体

举例:

代码1:

#include <stdio.h>
union Un
{int a;char c;
};
int main()
{union Un un = { 0 };un.a = 0x11223344;un.c = 0x55;printf("%x", un.a);return 0;
}

代码2:

#include <stdio.h>
union Un
{int a;char c;
};
int main()
{union Un un = { 0 };printf("%p\n", &un);printf("%p\n", &(un.a));printf("%p\n", &(un.c));return 0;
}

图像:

结构体的枚举的对比:

二.计算联合体的大小

规则:

1.联合体的大小为至少为最大成员的大小

2.当最大成员大小不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍

举例:

代码:

#include <stdio.h>   
union Un
{int a;char c[5];};
int main()
{printf("%zu", sizeof(union Un));return 0;
}

结果和解释:

练习:

大小端字节序的判断利用联合体公共一片空间的特点

代码:

 #include <stdio.h>   
union Un
{int a;char c;
};
void check_sys()
{union Un  un = { 0 };un.a = 1;if (un.c == 1)printf("小端");elseprintf("大端");
}
int main()
{check_sys();return 0;
}

匿名联合体形式:

#include <stdio.h>   void check_sys()
{union{int a;char c;}un;un.a = 1;if (un.c == 1)printf("小端");elseprintf("大端");
}
int main()
{check_sys();return 0;
}

‘结果:

联合体可以节省空间例子如下:

写成结构体一般如下:

 struct gift_list{//公共属性int stock_number;//库存量double price; //定价int item_type;//商品类型//特殊属性char title[20];//书名char author[20];//作者int num_pages;//⻚数char design[30];/设计int colors;//颜⾊int sizes;//尺⼨};

优化:

三.枚举

枚举类型的声明

将可能值一一例举

形式:

这些可能取值是有值的,默认是从零开始,依次递增1,也可以赋值

优点:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词