C语言——结构体和共用体

A1.结构体类型的定义方式

“struct”是关键字,用于表明这是在定义结构体。结构体名用于标识该结构体。成员列表则具体规定了结构体包含的各个成员及其数据类型。通过三种方式定义结构体类型变量,分别为先声明结构体类型再定义、声明类型同时定义变量、不指定类型名直接定义结构体类型变量,这些方式提供了灵活的定义方式以满足不同的编程需求。

  1. strct 结构体名
  • {成员表列}
  • 关键字struct和结构体二者组合
  1. 3钟方式定义结 构体类型变量
    • 先声明结构体类型再定义类型变量名
      • strct student student1,student2;
    • 声明类型的同事定义变量
        • struct 结构体名
        • {成员列表}变量名表列
          • 例如
            • struct student
            • {成员表列
            • }student1,student2;
    • 不指定类型名直接定义结构体类型变量
      • struct
      • {成员表列
      • }变量名表列

A2.结构体类型变量的引用

通过“.”运算符可以方便地访问结构体变量中的各个成员。如果成员本身又是结构体类型,就需要多级“.”运算符来逐步访问到最底层的成员。结构体变量的成员可以像普通变量一样进行运算,并且同类结构体变量之间可以互相赋值。但不能直接对结构体变量进行整体输出。同时,可以引用结构体变量成员和结构体变量的地址。

  1. 引用结构体变量中成员的值
  • 结构体变量名.成员名
    • "."是成员(分量)运算符,所有运算符中优先级最高,
  1. 成员要是本身属于一个结构体类型,则要用多个成员运算符,一级一级找到最低一级的成员,且只能对最低级的成员进行赋值,存储,运算
    • 例如
      • student1.birthday.month
  1. 对结构体变量的成员可以像普通变量一样进行各种运算
  2. 同类的结构体变量可以互相赋值
    • 例如
      • stduent1=student2;
    • 不能将一个结构体变量进行整体输出
  1. 可以引用结构体变量成员和结构体变量的地址

A3.结构体数组

当需要处理多个结构体数据时,结构体数组就派上用场了。定义结构体数组时明确结构体名、成员列表以及数组长度。可以先声明结构体类型,然后再定义结构体数组。还可以在定义数组时进行初始化,方便设置初始值。

  • 一个结构体变量可以存放一组数据,多个数组需要参与运算,则需要用到数组,这就是结构体数组
  1. 定义结构体数组一般形式
    • struct 结构体名
    • {成员表列}数组名【数组长度】;
  • 声明一个结构体类型,再用此类型定义结构体数组
    • 结构体类型 数组名【数组长度】;
  1. 在定义数组的后面加上:={初值别列} (对结构化数组初始化)

A4.结构体指针

结构体指针指向结构体或结构体数组元素。通过“结构体变量.成员名”“(*p).成员名”“p->成员名”这三种方式都可以访问结构体指针所指向的结构体变量的成员。使用指针可以更灵活地操作结构体数据,并且可以利用动态内存分配函数“malloc”和释放函数“free”来管理内存。

  • 指向结构体数组的指针,结构变量的起始地址就是结构体变量的指针
  • 指针变量可以指向结构体变量,结构体数组元素(指针变量的基类型必须与结构体变量类型相同)
    • 例如
      • struct student pt;
      • pt可以指向struct student类型数据
  • C允许把(*p).num改成p->num,表示p所指向的结构体变量num成员
  • p指向一个结构体变量3钟方式
    • 结构体比变量.成员名
    • (*p).成员名
    • p->成员名

A5.指针实现动态内存分配

“malloc”函数根据指定的字节数分配内存空间并返回首地址。通过指针接收这个地址后,就可以操作这块分配的内存。而“free”函数用于释放由“malloc”分配的内存,避免内存泄漏。

  1. malloc(m)函数
  • 分配m字节长度的地址空间,并返回这段空间的首地址
    • int *p;
    • p=malloc(10*sizeof(int));
  1. free(p)函数
  • 释放指针p所指变量的存储空间,彻底删除一个变量

A6.用指针处理链表

链表是一种动态的数据结构,由头指针和各个节点组成。节点包含实际数据和指向下一个节点的指针。通过指针可以方便地操作链表,进行添加、删除等操作。

  1. 线型链表是动态地进行存储分配的一种数据结构
  • 链表的组成
    • 头指针:存放一个地址,该地址指向一个元素
    • 结点:用户需要的实际数据和链接节点的指针

A7.共用体类型

  1. 使几个不同的变量共占同一段内存的结构称为“共用体”类型
  2. 定义共用体类型变量的一般形式:
    • union 共用体名
    • {
    • 成员表列
    • }变量表列;
  1. 共用体和结构体的比较
  • 结构体变量所占内存长度是各成员站的内存长度之和。每个成员分别占其自己的内存单元
  • 共用体变量所占的内存长度等于最长的成员长度

A8.枚举类型

共用体让不同的变量共享同一段内存,与结构体不同的是,共用体变量所占内存长度是最长成员的长度,而不是各成员内存长度之和。共用体和结构体在内存使用和数据存储方式上有明显区别。

  • 一个变量只能几种可能的值,则可以定义为枚举类型。
  • 声明枚举类型用enum
    • 例如
      • enum weekday{sun,mon,tue,----xx}
  • 定义变量
    • enum weekday workday;
    • enum{sun,mon,tue,wed,thu,fri,sat}workday;
  • 枚举值是常量,不是变量,不能被赋值
  • 只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量
    • workday=sat y
    • workday=6 x

A9.类型定义符typedef

它为已有的数据类型取一个新的别名,方便代码编写和理解。可以使用“typedef”为各种数据类型包括基本类型、结构体类型等定义新名字,使代码更具可读性和可维护性

  • 类型定义符typedef用来为数据类型取“别名”
  • 一般形式
    • typedef 原类型名 新类型名
      • 例如
        • typedef int INTERGER;
        • INTERGER a,b;
        • 等价于:int a,b;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/712947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WNR最便捷美观的开源桌面计时器工具

华丽外观,功能全面。工作和休息的完美计时器。跨平台支持,无论是Windows、Mac还是Linux,WNR都能轻松驾驭。 超强全屏专注模式 对于寻找高效工作/休息管理工具却屡屡受挫的用户,WNR的“全屏专注模式”无疑是终极解决方案。它确保在…

Android 蓝牙配对Settings应用里面的简要流程记录

Android 蓝牙配对Settings应用里面的简要流程记录 文章目录 Android 蓝牙配对Settings应用里面的简要流程记录一、前言二、Settings蓝牙配对的关键代码1、接收蓝牙请求的地方 AndroidManifest.xml2、BluetoothPairingRequest3、BluetoothPairingService4、BluetoothPairingDial…

利用机器学习重构视频中的人脸

引言 中国与英国的研究团队携手合作,开创了一种创新的视频面孔重塑技术。这项技术能够以极高的一致性对视频中的面部结构进行逼真的放大和缩小,且避免了常见伪影的产生。 从研究人员选取的YouTube视频样例中可见,经过处理后,女演…

LC1020:飞地的数量

题目 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。 返回网格中 无法 在任意次数的移动…

在ubuntu中启动docker的mysql8镜像

首先查看docker是否启动: docker ps #出现信息就是启动成功 启动命令: sudo systemctl start docker 设置开机自启: sudo systemctl enable docker 查询下载好的mysql8的镜像文件: docker images 在启动查询好的镜像文件&#…

Oracle--19C在Centos7上的静默安装(rpm版)

一、Oracle 19c Linux安装(Centos 7) 1.查看磁盘可用空间及配置ip地址 [rootlocalhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G …

【Pytorch】一文向您详细介绍 model.eval() 的作用和用法

【Pytorch】一文向您详细介绍 model.eval() 的作用和用法 下滑查看解决方法 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕…

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群 第一步 安装 Docker, Windows 上可以使用 Docker Desktop 下载地址:https://www.docker.com/products/docker-desktop/ 安装过程自行谷歌 安装好的标志:打开终端 运行docker p…

论文阅读:基于谱分析的全新早停策略

来自JMLR的一篇论文,https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型,并在此基础上提出了一种用于早停的频谱标准。 1,分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…

ERP、CRM、MRP、PLM、APS、MES、WMS、SRM系统介绍

一、ERP系统 ERP系统,即企业资源计划(Enterprise Resource Planning)系统,是一种集成管理软件系统,旨在帮助企业实现资源的有效管理和优化。以下是对ERP系统的详细介绍: 1、定义与功能 ERP是企业资源计划…

1832javaERP管理系统之车间计划管理Myeclipse开发mysql数据库servlet结构java编程计算机网页项目

一、源码特点 java erp管理系统之车间计划管理是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了serlvet设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

PCIe总线-RK3588 PCIe子系统简介(八)

1.PCIe子系统 RK3588 PCIe子系统如下图所示。总共拥有5个PCIe控制器。PCIe30X4(4L)支持RC和EP模式,其他4个仅支持RC模式。ITS port 1连接PCIe30X4(4L)和PCIe30X2(2L)控制器,PCIe30X4(4L)和PCIe30X2(2L)控制器使用PCIe3.0 PIPE PHY。ITS port 0连接PCIe3…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 游戏表演赛分队(100分) 🌍 评测功能需要订阅专栏后私信联系…

uniapp使用css实现瀑布流

页面 <template><view><gj v-if"likeList.length 0"></gj><view v-else class"list"><view class"pbl" v-for"(item,index) in likeList" :key"index"><view class"image&quo…

Github 2024-06-15Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型:M…

Windows10 MySQL(8.0.37)安装与配置

一、MySQL8.0.37下载 官网下载链接&#xff1a; https://dev.mysql.com/downloads/ 解压文件&#xff0c;解压到你想要的位置 二、新建MySQL配置文件 右键新建文本文档 新建my.txt文件 编辑my.txt文件&#xff0c;输入以下内容 [mysqld] # 设置 3306 端口 port3306 # 设…

Agilent 安捷伦 N9342C 手持式频谱分析仪

Agilent 安捷伦 N9342C 手持式频谱分析仪 N9342C 手持式7GHz频谱分析仪专为现场测试而设计&#xff0c;无论是安装和维护射频系统&#xff0c;现场进行故障诊断&#xff0c;监测射频环境还是分析干扰&#xff0c;都可以为您提供快速、精确的测量。它具有同类最佳的显示平均噪声…

【面试干货】Integer 和 int 的区别

【面试干货】Integer 和 int 的区别 1、基本类型与包装类型2、内存占用3、自动装箱与拆箱4、null 值5、常量池6、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Integer 和 int 是两种不同类型的变量&#xff0c;…

<Linux>进程

进程 文章目录 进程PCBpid与ppidfork系统调用进程状态孤儿进程状态优先级环境变量进程地址空间虚拟地址 最直观的表示&#xff1a;启动一个软件&#xff0c;本质就是启动一个进程 PCB PCB是Process Control Block的简称&#xff0c;是用来描述进程状态信息的数据结构。 进程运…

STM32学习记录(五)————外部中断EXTI

文章目录 前言一、外部中断EXTI基础知识1.外部中断介绍2.外部中断框架2.1AFIO2. 2.STM32外部中断机制框架 总结 前言 一个学习STM32的小白~ 有问题私信或评论区指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、外部中断EXTI基础知识 1.外部中…