当前位置: 首页 > news >正文

联合union

//————联合:union
1.联合的定义
联合也是一种特殊的自定义类型
#include<stdio.h>
union Un//Un为联合标签
{
    int a;
    char c;
};
struct St
{
    int a;
    int b;
};
int main()
{
    union Un u;
    printf("%d\n",sizeof(u));//4
    printf("%p\n",&u);
    printf("%p\n",&(u.a));
    printf("%p\n",&(u.c));//三个打印地址的结果相同
    return 0;
}
2.联合体的特点
联合体的成员是共用一块内存空间的,这样一个联合文件的大小,至少是最大成员的大小(因为至少要有能力保护最大的那个成员)
//union Un
//{
//    int a;
//    char c;
//};
//int main()
//{
//    union Un u;
//    u.a = 0x11223344;
//    u.c = 0x00;//将c的地址改为0,也就等同于把最高位地址改为0,由于a和c共用一块1字节大小的地址,即c的改动也会同时影响a,即a的地址变为0x11223300
//    return 0;
//}
——————通过枚举判断计算机大小端储存方式
//#include<stdio.h>
//int check_p()
//{
    int a = 1;
    return *(char*)&a;//&a为取出a的地址01 00 00 00,强制类型转换后为char,1字节,所以为01.返回此值,进行判断
    //a的地址:
    //低->高
    //01 00 00 00——小端排序
    //00 00 00 01——大端排序
        替换为
    //union //Un//此类型创建在了函数内部(此类型只是为函数准备的,用一次之后就不再使用),因此联合标签Un可以省略,从而为:匿名联合(共用体)类型
    //{
    //    char c;
    //    int i ;
    //}u;
    //u.i = 1;//此处i的地址为01 00 00 00(小端),而i与c同时占用第一字节大小的地址。所以c的地址就成了01
    //return u.c;//返回1为小端,返回0为大端
//}
//int main()
//{
//    int ret = check_p();
//    if (ret == 1)
//        printf("小端\n");
//    else
//        printf("大端\n");
//    return 0;
//}
————3 .联合大小的计算
//联合的大小至少是最大成员的大小。
//当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
//#include<stdio.h>
//union Un1
//{
// char c[5];//5字节,对齐数1
// int i;//4字节,对齐数4
//};
//union Un2
//{
// short a[7];//14字节,对齐数2
// int b;
//};
//int main()
//{
//    printf("%d\n", sizeof(union Un1));
//    //Un1中,最大对齐数为4,最大成员大小为5,所以对齐到最大对齐数的整数倍,为8
//    printf("%d\n", sizeof(union Un2));
//    //Un2中,最大对齐数为4,最大成员大小为14,所以对齐到最大对齐数的整数倍,为16
//    return 0;
//}

http://www.lryc.cn/news/276392.html

相关文章:

  • 如何在 Umi /Umi 4.0 中配置自动删除 console.log 语句?
  • (生物信息学)R语言绘图初-中-高级——3-10分文章必备——饼图(初级)
  • AI ppt生成器 Tome
  • Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
  • 图解JVM (及一些垃圾回收\GC相关面试题 持续更新)
  • linux 系统安全及应用
  • 如何查看崩溃日志
  • 使用HttpSession和过滤器实现一个简单的用户登录认证的功能
  • SEO全自动发布外链工具源码系统:自动增加权重 附带完整的搭建安装教程
  • Qt隐式共享浅析
  • 2023年我国网络安全法律法规一览
  • Qt/QML编程学习之心得:一个音频播放器的实现(29)
  • 【数据结构】数据结构中应用题大全(完结)
  • WPF常用控件-Window
  • 计算机网络——实验七
  • 数据分析基础之《pandas(1)—pandas介绍》
  • LLM_InterLM-Demo学习
  • 倍思科技红海突围要义:紧随新趋势,“实用而美”理念从一而终
  • 十、HTML 样式- CSS
  • Spring的mybatis整合
  • React 入门 - 01
  • Windows Server 2019 Standard 和 Datacenter 版本差异比较
  • 计算机网络的交通灯:停止-等待协议
  • 命令行模式的rancher如何安装?
  • 苍穹外卖Day01——总结1
  • Java 基础(二)
  • BERT 模型是什么
  • Elasticsearch中object类型与nested类型以及数组之间的区别
  • 办公文档,私人专用
  • linux 使用log4cpp记录项目日志