首页 > 其他分享 >联合union——《初学C语言第49天》

联合union——《初学C语言第49天》

时间:2024-01-05 21:00:48浏览次数:42  
标签:00 49 union C语言 int Un printf 对齐

//////————联合: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;//将村的地址改为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字节,对齐数5

// 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;

//}

标签:00,49,union,C语言,int,Un,printf,对齐
From: https://blog.51cto.com/KKhahaha/9118567

相关文章

  • qt c语言双三次线性插值
    用chatgpt生成的测试了比较卡for(inty=0;y<enlargedHeight;y++){for(intx=0;x<enlargedWidth;x++){//计算原始图像中对应的浮点坐标floatoriginalX=(float)x/(float)enlar......
  • C语言学习随笔-05 变量
    变量:其值在其作用域内可以改变的量交变量,变量在使用前必须定义,每一个变量都有地址。1、变量的命名    ● 变量名由大小写字母、数字和下划线组成,必须以大小写字母或下划线开头,不能以数字开头。    ● C中也允许定义各种其它类型的变量,如枚举、指针、数组、结构体......
  • C语言学习随笔-04 数据类型
    C中的数据类型:在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。常用的四中基本数据类型:int、char、float、double    ▶基本类型:它们是算术类型,如int、char、float、double。 ......
  • C语言逆波兰式算法
    1#include<stdio.h>23//数字模式识别4#defineIS_NUM(c)(((c)>='0')&&((c)<='9')||((c)=='.'))5//符号字符识别6#defineIS_OPERATOR(c)(((c)=='+')||((c)=='-')||((c)==&......
  • C语言学习随笔-03 基本语法
    c语言程序由函数构成,每个函数可以实现一个或多个功能。 一个正规程序可以有多个函数,但是有且只有一个主函数。 函数只有在被调用的时候才执行,主函数由系统调用执行。 函数的格式必须按照规范书写。 C语言程序文件的后缀为.c1、C的令牌(Token):C程序由各种令牌组成,令牌可......
  • 枚举——《初学C语言第48天》
    ////三.枚举////枚举:就是一一列举,把可能的取值一一列举。////比如生活中:////1.一周的星期一到星期日是有限的7天,可以一一列举。////2.性别有:男、女、保密,也可以一一列举。////2.月份有12个月,也可以一一列举////这就可以使用枚举了。////————1.枚举类型的定义//enum......
  • macOS Monterey 12.2 (21D49) 正式版 ISO、IPSW、PKG 下载
    本站下载的macOSMonterey软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。2022年1月27日,macOSMonterey12.2正式版于今天凌晨推送,大版本升级建议全新安装。本站提供可启动的ISO镜像下载,可以用于全新安装或者升级,也......
  • macOS Monterey 12.2 (21D49) Boot ISO 原版可引导镜像
    作者主页:www.sysin.org下载地址更新这里列出ISO启动镜像下载链接,更多格式请访问以下地址:macOSMonterey12.2(21D49)正式版ISO、IPSW、PKG下载应用场景macOSMonterey12可启动ISO镜像,基于Apple原版App制作,可以用于虚机安装,可以拖拽到Applications(应用程序)下直接双击......
  • 通讯录(静态)——《初学C语言第47天》
    cotact.h#define_CRT_SECURE_NO_WARNINGS1#define MAX100#define MAXname20#define MAXsex10#define MAXtre12#define MAXaddr30#include<stdio.h>#include<string.h>#include<assert.h>#include<stdlib.h>//类型声明//人的信息typedefstructp{......
  • 结构体:修改默认对齐数、结构体传参——《初学C语言第45天》
    //////——————7.修改默认对齐数////#pragma:预处理指令,可以改变我们的默认对齐数。//#include<stdio.h>//#pragmapack(8)//设置默认对齐数为8//设置的开始//structS1//{//  charc1;//  inti;//  charc2;//};//#pragmapack()//取消设置的默认对齐......