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

C语言联合体和枚举

C语言联合体和枚举

文章目录

  • C语言联合体和枚举
    • 一、联合体
      • ①联合体简介
      • ②联合体大小的计算
    • 二、枚举

一、联合体

①联合体简介

union Un
{char c;int i;
};

像结构体一样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同⼀块内存空间。所以联合体也叫:共用体。

给联合体一个成员赋值,其他成员的值也会因此改变。

下面的两个例子可以很明显的展示出联合体所有成员共用一块内存空间:

//代码1
#include <stdio.h>
//联合类型的声明
union Un
{char c;int i;
};
int main()
{union Un un = {0};printf("%p\n", &(un.i));printf("%p\n", &(un.c));printf("%p\n", &un);return 0;
}

在这里插入图片描述

//代码2
union Un
{char c;int i;
};
int main()
{union Un un = { 0 };un.i = 0X11223344;//共用这四个字节的空间,所以不能同时使用un.c = 0X55;printf("%#X\n", un.i);//0X11223355printf("%zd\n", sizeof(union Un));//4return 0;
}

在这里插入图片描述
在这里插入图片描述

②联合体大小的计算

联合体的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

#include <stdio.h>
union Un1
{char c[5];//5,对齐数是1int i;//4,对齐数是4
};
union Un2
{short c[7];//14,对齐数2int i;//4,对齐数4
};
int main()
{//下⾯输出的结果是什么?printf("%d\n", sizeof(union Un1));//8printf("%d\n", sizeof(union Un2));//16return 0;
}

注意,这种数组求对齐数的时候,用数组里的元素的数据类型的大小和默认对齐数比较,例如char类型数组,对齐数是1和8的较小值,所以是1。

二、枚举

enum Day
{Mon,Tues,Wed,Thur,Sat,Sun
};
enum Sex
{male = 4,female,secret
};
enum Color
{RED,GREEN,BLUE
};

以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。
{}中的内容是枚举类型的可能取值,也叫枚举常量 。
这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

enum Day
{Mon,Tues,Wed,Thur,Sat,Sun
};int main()
{printf("%d %d %d", Mon, Tues, Wed);//0,1,2enum Day day = Sun;//枚举变量//Mon = 2;error//enum Day day = 1;errorreturn 0;
}enum Sex
{male = 4,female,secret
};int main()
{printf("%d %d %d ", male, female, secret);//4 5 6enum Sex s = male;printf("%zd\n", sizeof(s));//枚举变量只存储这一个return 0;
}enum Day
{Mon,Tues,Wed,Thur = 7,Fri,Sat,Sun
};int main()
{printf("%d %d", Mon, Fri);//0 8return 0;
}
http://www.lryc.cn/news/192938.html

相关文章:

  • Ubuntu 上传项目到 GitHub
  • CSS 复杂卡片/导航栏特效运用目录
  • QT: 一种精确定时器类的实现与使用
  • SQLite4Unity3d安卓 在手机上创建sqlite失败解决
  • 跨站请求伪造:揭秘攻击与防御
  • matlab 图像均值滤波
  • P1433 吃奶酪
  • c++string类的赋值问题
  • 服务器中了mkp勒索病毒怎么办?mkp勒索病毒特点,解密数据恢复
  • 深入探析网络代理与网络安全
  • 如何开始使用 Kubernetes RBAC
  • 8.简易无线通信
  • 渗透测试漏洞挖掘技巧
  • Nginx - 反向代理与负载均衡
  • Linux网络编程系列之UDP组播
  • 设计模式~状态模式(state)-23
  • linux环境下使用lighthouse与selenium
  • NeuroImage | 右侧颞上回在语义规则学习中的作用:来自强化学习模型的证据
  • uni-app编程checkbox-group获取选中的每个checkbox的value值
  • 数组——螺旋矩阵II
  • 反范式化设计
  • CCF CSP认证 历年题目自练Day31
  • PCL点云处理之从两片点云中获取具有匹配关系的同名点对 (二百一十八)
  • MySQL Row size too large (> 8126)
  • HUAWEI(26)——防火墙双机热备
  • 【ArcGIS】NDVI估算植被覆盖度FVC
  • vscode用密钥文件连接ssh:如果一直要输密码怎么办
  • 【AI视野·今日Robot 机器人论文速览 第五十三期】Thu, 12 Oct 2023
  • 【LeetCode第115场双周赛】100029. 和带限制的子多重集合的数目 | 前缀和背包 | 中等
  • ArcGIS笔记5_生成栅格文件时保存报错怎么办