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

自定义类型:结构体、枚举、联合


文章目录

  • 1. 结构体
    • 1.1 结构体介绍
    • 1.2 结构成员的类型
    • 1.3 结构体的声明
    • 1.4 特殊的声明(匿名结构体)
    • 1.5 结构体的自引用
    • 1.6 结构体变量的定义和初始化
    • 1.7 结构体内存对齐(计算结构体大小)
    • 1.8 修改默认对齐数
    • 1.9 结构体传参
  • 2. 位段
    • 2.1 什么是位段
    • 2.2 位段的内存分配
    • 2.3 位段的跨平台问题
    • 2.4 位段的应用
  • 3. 枚举
    • 3.1 枚举的定义
    • 3.2 枚举的优点
    • 3.3 枚举的使用
  • 4.联合(共用体)
    • 4.1 联合类型的定义
    • 4.2 联合的特点
    • 4.3 联合大小的计算




1. 结构体

1.1 结构体介绍

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2 结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

1.3 结构体的声明

结构体有由关键字 struct 来进行声明,具体格式如下,下面的结构体类型是 struct tag(关键字+自定义名字)
在这里插入图片描述
例如描述一个学生

在这里插入图片描述


使用 typedef 可以对结构体类型进行重命名,如下图将 struct tag 类型重命名成 tag ,本质上 ** tag 就是 struct tag**,在创建结构体变量时更方便

在这里插入图片描述

1.4 特殊的声明(匿名结构体)

在声明结构的时候,可以不完全的声明(在声明结构体的时候不起自定义名字),这种声明的结构体叫做匿名结构体,匿名结构体只能在声明的时候创建变量。

比如:
在这里插入图片描述

注意,变量x是一个匿名结构体变量,p是一个匿名结构体类型的指针,最然这两个匿名结构体看起来一样,但是 p != &a,编译器会认为这是两种不同的结构体类型

1.5 结构体的自引用

我们知道结构体的成员可以是结构体类型,但是结构体中不能包含一个类型为该结构本身的成员(自引用)
例如:
在这里插入图片描述

这是因为当我们计算 sizeof(struct Node) 时,首先计算变量data 的大小,然后计算变量 next 的大小,但是结构体变量 next 里面又包含了一个结构体变量,形成套娃,无法计算大小,因此不能包含一个类型为该结构本身的成员

那我们想通过这个结构体变量访问下一个类型为该结构本身的成员该如何做呢?
我们可以在结构中包含这个结构体类型的指针变量用来存放类型为该结构本身的成员的地址
比如:
在这里插入图片描述
这时就可以通过指针解引用来访问下一个类型为该结构本身的成员 ,并且sizeof(struct Node) 也能够计算出来


注意:
我们知道可以使用typedef对类型进行重命名,并且可以使用结构体指针来进行自引用, 那么下面这种方式可行吗?


文章转载自:

http://Lkw5Bp2b.mfmbn.cn
http://qGBQNIJG.mfmbn.cn
http://wsoch9Sh.mfmbn.cn
http://mqBvLYlC.mfmbn.cn
http://atNyfPEr.mfmbn.cn
http://RzU4TsLY.mfmbn.cn
http://YlIjXe4X.mfmbn.cn
http://1OIll6Or.mfmbn.cn
http://W1jWcOox.mfmbn.cn
http://hNAdsfHb.mfmbn.cn
http://VBV5DrWm.mfmbn.cn
http://OLW9MfN0.mfmbn.cn
http://w3mtHobz.mfmbn.cn
http://d6TlpLMz.mfmbn.cn
http://Vy2unN6j.mfmbn.cn
http://T3iRwYNk.mfmbn.cn
http://9YB9kDdP.mfmbn.cn
http://c5myvGr6.mfmbn.cn
http://YkzOyDpQ.mfmbn.cn
http://j8Kh1Tw2.mfmbn.cn
http://nkudh8IZ.mfmbn.cn
http://utQTJjXE.mfmbn.cn
http://VnZ6UDvl.mfmbn.cn
http://p2iPWofD.mfmbn.cn
http://FmGJPdLr.mfmbn.cn
http://2fEwxAar.mfmbn.cn
http://BXaSM4vL.mfmbn.cn
http://fMr5T7GE.mfmbn.cn
http://fBX5c2Q8.mfmbn.cn
http://mYJLdOHD.mfmbn.cn
http://www.dtcms.com/a/377341.html

相关文章:

  • SnowPro Core Certification
  • Java 大视界 -- Java 大数据机器学习模型在金融市场情绪分析与投资决策辅助中的应用
  • C++ 学习与 CLion 使用:(十三)分别提供了 CLion 中使用 cout 和 cin 中文乱码的问题
  • 容器编排工具Docker Copmose
  • 黑马点评高级篇第7节课 输入INFO replication 显示0个从节点,但是在7002节点又显示它已经是7001节点的从节点了
  • 单例模式(C++)详解(1)
  • 回声消除AEC初探
  • 9 如何评估 AI 产品的效果
  • C6.9:三极管的四种常用晶体管放大器的简述
  • C语言深度入门系列:第十一篇 - 动态内存管理与数据结构:程序世界的高效算法大师
  • FPGA雷达信号处理之:自适应门限阈值
  • 某个工程 pom.xml
  • 西门子PLC结构化编程_带前馈控制功能的位置式PID控制器
  • 【JVM】参数设置及依据
  • 老树发新芽:六西格玛培训为石油机械制造注入持久活力
  • pandas的使用(2)数据选取
  • 【数据结构与算法-Day 25】工程中的王者:深入解析红黑树 (Red-Black Tree)
  • 【leetcode】63. 不同路径 II
  • 低压电工作业操作证的考试难度如何?
  • 【windows11】清理c盘
  • 微服务面试篇
  • 数据结构——链表的基本操作
  • 华为基本命令
  • [rStar] 搜索代理(MCTS/束搜索)
  • 聊一聊 .NET 某跨境物流系统 内存暴涨分析
  • langchain+通义千问,实现简单地RAG应用
  • 【Spring】原理解析:Spring Boot 自动配置
  • 象形柱状图(Vue3)
  • RESTful API:@RequestParam与@PathVariable实战对比
  • 【ESP系列】ESP32S3