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

C语言自定义数据类型

一、构造数据类型

构造数据类型:用户自己建立的数据类型(自定义数据类型)

C语言中的自定义数据类型有:数组类型、结构体类型、共用体类型和枚举类型。

1.1. 结构体

C语言允许用户根据需要自己建立的由不同类型数据组成的组合型的数据类型,我们把它称之为结构体(struct)。结构体能根据用户需要来更方便的存储各种各样的信息。

用法: struct 结构体名{ 结构成员;}

定义一个Student结构体

struct Student{

int ID;

char name[10];

float score;

}

给结构体赋值,按照顺序赋值给结构体成员,是一一对应的。不能用a.ID=1;这种方式赋值,但是在strcpy函数中可以用实例.成员的方式赋值,比如strcpy(a.name,"张三");

Student a={1,"张三",60.1}; 

访问结构体里的成员:用实例.成员名引用

a.ID

1.2 给类型取别名

(必须是类型,可以给构造数据类型也可以给基本数据类型取别名)

如:typedef int 整型;         //相当于宏,本质是替换 。把int类型替换为“整型”类型

typedef struct Hero {}hero;   //给构造数据类型 Hero取别名叫hero;

//定义结构体的时候如果没写结构名,那么用typedef给这个结构体取别名

typedef struct{ int a;int b;}STT;  //别名叫STT

//定义结构体的时候没写结构名,也没有用typedef,但是要在}后写标识符,那么标识符就是我们定义的该结构的变量。

struct {int a; int b;}s1,s2,s3[10];

1.3 结构体的内存计算方法

结构体:内存对齐标准:以该结构体中最大的基本数据类型所占的内存进行对齐。比如

struct One{int a;int b;char c};   //应该是9个字节,但是因为最大的数据类型为4个字节,所以实际为12字节。

struct  Two{int a;char b[10];float c};         //分配的是20个字节(4+(4+4+4)+4)

struct Three{double a;int b;char c[10]};   //分配的是24个字节(b的后面4个字节会给c的前4个字节用,只需要分配3个8字节)

struct Four{int a;char b[10];char c;double d};//分配的是24个字节(最长的是8,a分配8个,b前4个放在a后面,再给b一个8放6个,剩2个,c放在b剩的后面,d再分配8个存。)

struct Five{char a;int b;char c[10];double d;}; //分配的是24个字节

2. 共同体
2.1  什么是共用体?

共用体关键字:union

有时候想用同一段内存单元存放不同类型的变量。如:把一个整型变量、浮点型变量和字符型变量放在同一个内存单元中,它们在内存中所占字节数不同,但是共用同一段内存地址,也就是共用体了。也就是所有数据成员共用同一段内存的数据类型称为共用体,也称其为联合体。

共用体和结构体的声明、定义和成员变量引用的语法是类似的,只不过关键字不一样,以及所占内存大小有区别而已。

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

相关文章:

  • SoftwareTest5 - 你就只知道功能测试吗 ?
  • Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式
  • 基于nodejs+vue网上鲜花销售系统
  • stm32 ETH
  • 【深度学习基础】Pytorch框架CV开发(2)实战篇
  • C语言--输出1-100以内同时能被3和5整除的数
  • Linux--jdk、tomcat、环境配置,mysql安装、后端项目搭建
  • NOIP2023模拟10联测31 迷路
  • React Query + Redux toolkit 封装异步请求
  • CSS基础知识点速览
  • Windows 时间服务配置和配置工具
  • cmake find_package、引用GDAL 初步学习
  • 紫光同创FPGA编写的8画面分割器演示
  • openLayers--绘制多边形、获取视图的中心点、获取当前地图等级、设置地图等级
  • CSP-31补题日记--梯度求解
  • MySQL 8.0.32 union 语句中文查不到数据
  • FlinkCDC系列:通过skipped.operations参数选择性处理新增、更新、删除数据
  • 高压检测设备
  • Vue3问题:如何实现组件拖拽实时预览功能?
  • 基于jsp的采购管理系统的分析与实现
  • react配置二级路由
  • C++ 模板特化
  • Spring-createBean部分源码
  • 2015年亚太杯APMCM数学建模大赛C题识别网络中的错误连接求解全过程文档及程序
  • js:可选链运算符(?.)和空值合并运算符(??)
  • 【Java 进阶篇】Java ServletContext功能:获取文件服务器路径
  • Android startActivity流程
  • Qt实验室
  • diffusers-Load adapters
  • CVI 串口调试助手