IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【C语言笔记初级篇】第七章:结构体相关 -> 正文阅读

[数据结构与算法]【C语言笔记初级篇】第七章:结构体相关

目录

(1)结构体的声明,定义,初始化和成员访问

A:什么是结构体

B:结构体声明和定义

C:结构体的初始化

D:成员访问

(2)结构体传参

(3)结构体自引用

(4)内存对齐

(5)结构体传参

(6)位段


(1)结构体的声明,定义,初始化和成员访问

A:什么是结构体

世界上物体的性质是复杂多样的,就拿人而言,人绝对不能用一个整形数据(比如说身高),或者说字符串(比如说姓名)而单独囊括的,于是我们在描述一个复杂对象的时候,就要使用的结构体,结构体是一些值的集合,这些值称为成员变量,每个成员变量可以是不同的类型

B:结构体声明和定义

比如这里我们要描述一个学生,一个学生的信息主要包括姓名,年龄和学号组成

上述我们在main函数中通过,定义的struct Student 创建了一个结构体变量S,这样的创建方式属于局部变量

我们还可以直接在参数列表处直接定义,这样定义的就是全局变量

还有我们经常在数据结构中见到的一种写法,它其实相等于就是重新命了一个名字

C:结构体的初始化

第一点:普通初始化

第二点:嵌套初始化

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

D:成员访问

上述循环嵌套的访问方式如下

(2)结构体传参

结构体不能直接使用printf函数打印,需要打印时可以自己封装print函数,而这就涉及到了传参和传递地址的问题,结合前面第五章讲到的结构体指针的相关知识,就有以下两种打印方式

由于结构体的数据比较多,所以我们以后在操作时要传结构体的地址,如果传结构体的值那么对于内存的开销就比较大,如果传入地址,则只需使用一个很小的指针就能操作

(3)结构体自引用

这里以单链表结点定义为例。一个结构体有两个部分,一个部分是数据域,一个部分是指针域,在创造结点也就是建立结构体成员时,每个成员除了有一个数据域用来存放数据外还有一个指针域,在指针域里面存放的是一个地址,这个地址指向下一个结点也就是下一个结构体成员的内存地址

(4)内存对齐

具体参见:C语言重难点:内存对齐和位段_快乐江湖的博客-CSDN博客一:结构体内存对齐(1)为什么要存在内存对齐平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些平台只能在某些地址处取得某些特定类型的数据,否则抛出硬件异常。比如,当一个平台要取一个整型数据时只能在地址为4的倍数的位置取得,那么这时就需要内存对齐,否则无法访问到该整型数据。性能原因:数据结构(尤其是栈)应该尽可能的在自然边界上对齐。原因在于,为了访问未对齐内存,处理器需要作两次内存访问;而对齐的内存访问仅需一次。核心思想就是:以空间换取时间(2)结构体对齐规则https://blog.csdn.net/qq_39183034/article/details/116457144

(5)结构体传参

和前面说过的交换两个变量的经典例子一样,对结构体内的变量进行修改时需要传入地址,用结构体指针来接受,如果只是去使用结构体变量的值的话,就只传入值即可

(6)位段

具体参见

C语言重难点:内存对齐和位段_快乐江湖的博客-CSDN博客一:结构体内存对齐(1)为什么要存在内存对齐平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些平台只能在某些地址处取得某些特定类型的数据,否则抛出硬件异常。比如,当一个平台要取一个整型数据时只能在地址为4的倍数的位置取得,那么这时就需要内存对齐,否则无法访问到该整型数据。性能原因:数据结构(尤其是栈)应该尽可能的在自然边界上对齐。原因在于,为了访问未对齐内存,处理器需要作两次内存访问;而对齐的内存访问仅需一次。核心思想就是:以空间换取时间(2)结构体对齐规则https://blog.csdn.net/qq_39183034/article/details/116457144

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:30:49  更:2021-12-06 15:31:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:27:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码