自己做网站哪家好,建筑公司简介范文大全,网站做描本好处,手机微网站注册登录源码#x1f4dd;前言#xff1a; 在前面两篇文章#xff1a;C语言——结构体类型#xff08;一#xff09;和C语言——结构体#xff08;二#xff09;中#xff0c;我们讲述了C语言中重要的数据类型之一#xff1a;结构体类型#xff0c;今天我们来介绍一下C语言中的另…前言 在前面两篇文章C语言——结构体类型一和C语言——结构体二中我们讲述了C语言中重要的数据类型之一结构体类型今天我们来介绍一下C语言中的另一种数据类型联合体类型 我会从以下几个方面进行讲解 1什么是联合体 2联合体的声明 3联合体的特点 4联合体大小 个人简介努力学习ing 个人专栏C语言入门基础 CSDN主页 愚润求学 每日鸡汤但凡不能杀死你的最终都会使你更强大 文章目录 一什么是联合体二联合体的声明1联合体类型的声明2联合体变量的创建 三联合体的特点1联合体与结构体的对比2对联合体成员进行改变 四联合体的大小 一什么是联合体
联合体也称共用体 像结构体一样联合体也是由一个或者多个成员构成这些成员的类型可以不同。但是与结构体不同的是联合体的所有成员共用一块内存空间。即给联合体其中的一个成员赋值其他成员的值也会跟着被改变
二联合体的声明
1联合体类型的声明 C语言中联合体类型的定义形式 union 联合体名 { 成员项表列 } 例如 我们定义一个同时由char和int型构成的联合体
union Un
{char c;int i;
}; (注意分号不能丢)2联合体变量的创建
同结构体变量的创建类似我们可以在声明联合体类型的同时创建变量也可以在声明后再创建变量 如 1先声明联合体类型再创建变量
#includestdio.h
union Un
{char c;int i;
};
union Un u1;2在声明联合体类型的同时创建变量
union Un
{char c;int i;
}u1;对联合体成员的引用也与对结构体成员的引用相同
三联合体的特点
1联合体与结构体的对比
联合体的大部分与结构体相似其独特之处就是所有成员共用一块内存空间 例如我们看拥有相同成员的结构体和联合体对比
对于s1 和 u1的内存分配情况应该是 我们可以用sizeof算一算看看结果 运行下面代码
int main()
{printf(%d\n, sizeof(s1));printf(%d\n, sizeof(u1));return 0;
}输出 可以发现和我们上面的分析一样 2对联合体成员进行改变
下面我们就对联合体u1中的成员c进行赋值然后再打印成员i
#includestdio.h
union Un
{char c;int i;
}u1;
int main()
{u1.c 1;printf(%d, u1.i);return 0;
}运行结果 可见尽管没有给成员i赋值但是随着成员c被修改成员i的值也发生了变化 四联合体的大小
上面提到的联合体u1的大小是4刚好是当中最大的int类型的大小难道联合体的大小就是其中最大成员的大小吗 答案是错误的 因为联合体的大小也要满足是最大对齐数的整数倍
⭐换句话来说联合体的大小要满足以下两个条件 1大于或等于最大的成员至少要能装下最大的成员 2同时是最大对齐数的整数倍
对于上面的u1 最大成员int类型的大小是4 而int的最大对齐数也是4所以联合体u1的大小是4
再看下面的代码多加一个字符数组
#includestdio.h
union Un
{char c;int i;char arr[6];
}u1;
int main()
{u1.c 1;printf(%d,sizeof(u1));return 0;
}运行结果 这是因为 1最大成员char arr[6]的大小是6 2最大对齐数是4 6不是4的倍数所以扩宽到8所以联合体的大小是8 我的分享也就到此结束啦 要是我的分享也能对你的学习起到帮助那简直是太酷啦 若有不足还请大家多多指正我们一起学习交流 公主王子点赞→收藏⭐→关注 感谢大家的观看和支持祝大家都能得偿所愿天天开心