• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言共用体

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
//共用体  union
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

// union  共用体,构造数据类型,也叫联合体,用途:十几个不同类型的变量共占一段内存(相互覆盖)

//共用体在类型定义的时候并不分配内存,定义共用体变量的时候才分配内存
union data{
    char c;
    int a[10];
}udat1;

union stu{
    int a;//内部变量无法初始化,因为类型定义不会分配内存
    char name[10];
}fisr, *fisr1, fisr2[10];//共用体定义形式①
//注意:在定义共用体变量的时候初始化也只能初始化第一个成员变量,无法对其他成员变量初始化

//匿名公共体--匿名共用体无法定义变量,只能在初始化的时候定义变量
//这样就限定了共用体变量的个数,一般用于给某些特殊权限的人使用的变量
union {
    char c;
    int a[10];
}lastp;


struct tes{
    int num;
    char name[40];
}tes1 = {4,"feiyu"},tes2;

//共用体变量占据的内存单元的个数应大于或者等于是其内部最大数据成员占据内存单元数。
//结构体,共用体在内存中存储,字节对齐
//data是共用体,共用体大小必须至少包含最大的成员数据,所以其原始大小是sizeof(int)*10 = 40字节,
//union {
//    char c; 
//    int a[10];
//};
//因为data其原始大小正好是最宽基本类型成员int的倍数,不用填充字节
//所以共用体data的大小是40

//stu是共用体,stu的原始大小是sizeof(char)*10字节,根据字节对齐原则,最宽基本类型成员是int,需要填充字节
//所以共用体stu的大小是12

//总结:共用体大小必须至少包含最大的成员数据,并且可以整除最宽基本类型成员--详情见结构体
void main(){
    //验证共用体的字节对齐原则
    printf("验证共用体的字节对齐原则--%d\n", sizeof(udat1));
    printf("验证共用体的字节对齐原则--%d\n", sizeof(fisr));
    //定义共用体
    union stu stuinfo;//共用体定义形式②
    //共用体的赋值
    stuinfo.a = 40;
    //共用体变量任何时候只有一个成员存在,当存在一个成员,却给给其他成员赋值的时候,后面会覆盖前面
    //因为共用体是共占一段内存,不会给每个成员变量都分配一块内存
    strcpy(stuinfo.name, "联想");
    printf("共用体成员变量a=%d;name=%s\n", stuinfo.a, stuinfo.name);
    //结果发现成员变量a被覆盖了
    union stu stuinfo2 = stuinfo;//共用体变量可以直接赋值
    printf("共用体成员变量a=%d;name=%s\n", stuinfo2.a, stuinfo2.name);
    tes2 = tes1;//结构体变量可以直接赋值
    printf("结构体成员变量num=%d,name=%s\n", tes2.num, tes2.name);
    system("pause");
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何使用VisualC#加密和解密文件发布时间:2022-07-13
下一篇:
背包问题c++动态规划方式发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap