结构体<C语言>
导言
结构体是C语言中的一种自定义类型,它的值(成员变量)可以是多个,且这些值可以为不同类型,这也是和数组的主要区别,下面将介绍它的一些基本用法,包括:结构体的创建、结构体变量的声明、初始化、结构体的访问、结构体的内存对齐等。
目录
导言
结构体的创建
结构体变量的声明
结构体成员的初始化、访问
结构体的内存对齐
结构体的创建
struct stu {//比如描述一个学生char name[10];//名字int age;//年龄int score;// 得分
};
结构体变量的声明
常用的有以下3种:
1.在结构体创建时同时声明结构体变量:
struct stu {//比如描述一个学生char name[10];//名字int age;//年龄int score;// 得分
}stu1,stu2;//声明了stu1和stu2
2.先创建结构体,后声明(包括在函数内部声明):
//2.先创建结构体,后初始化:
struct stu {//比如描述一个学生char name[10];//名字int age;//年龄int score;// 得分
};
struct stu stu1, stu2;
3.使用typedef先重命名,再声明:
//3.使用typedef先重命名,再声明:
typedef struct stu {//比如描述一个学生char name[10];//名字int age;//年龄int score;// 得分
}stu;//当前面使用typedef时,分号前不再是变量声明,而是重命名后的类型stu stu1, stu2;//声明了stu1和stu2
关于typedef重命名结构体,也可先创建结构体,再重命名:
struct stu{char name[10];//名字int age;//年龄int score;// 得分
};typedef struct stu stu;stu stu1, stu2;
结构体的特殊声明:匿名结构体:
结构体成员的初始化、访问
初始化:
按顺序初始化:
struct stu {//比如描述一个学生char name[10];//名字int age;//年龄int score;// 得分
};int main() {struct stu stu1 = { "mariiy",18,89 };//按顺序初始化return 0;
}
不按顺序初始化:
格式:.成员名=初始值
struct stu {//比如描述一个学生char name[10];//名字int age;//年龄int score;// 得分
};int main() {struct stu stu1 = { .age=19,.name="joke",.score=90};//不按顺序初始化return 0;
}
访问:
直接使用变量名(操作符“.”)
格式:变量名.成员名
使用指针(操作符“->”)
格式:结构体指针->成员名
结构体的内存对齐
结构体的内存对齐描述了结构体成员在内存中的存储位置,是决定结构体内存大小的重要因素。
因为结构体内存对齐的因素存在,两个存储着同等数量、类型的结构体,会因为成员在结构体内部顺序的不同,导致占用内存大小的不同。
如:
这时结构体大小为16字节。
我们变换一下顺序(将score移到第二位)
这时结构体大小为20字节。
两个结构体内的成员类型、个数完全一样,只是声明顺序不一样,导致结构体大小不一样。
对齐规则:
●结构体的第一个成员对齐到偏移量为0结构体变量的起始地址处。
●其他成员要对齐到对齐数的整数倍数处(偏移量的整数倍)
对齐数:编译器默认的对齐数与成员类型大小的较小值(数组类型大小为成员类型大小)
—vs上默认对齐数是8
—Linux没有默认对齐数,对齐数就是成员类型大小
●结构体的总大小为最大对齐数(所有成员的对齐数中最大的那个)的最小整数倍
●如果嵌套了结构体,结构体成员会对起到它的最大对齐数(不会再与编译器的默认对齐数比较)的整数倍数处
所以我们可以分析在上面的两个结构体中内存布局:
内存布局:
内存布局:
相关文章:
结构体<C语言>
导言 结构体是C语言中的一种自定义类型,它的值(成员变量)可以是多个,且这些值可以为不同类型,这也是和数组的主要区别,下面将介绍它的一些基本用法,包括:结构体的创建、结构体变量的…...
点云分割报告整理(未完成版-每天写一点)
体积占用网格表示对点进行体素化,然后使用3d卷积神经网络来学习体素级语义。由于点云的稀疏性,体素化效率低,为避免较高的计算成本而忽略了细节。此外,由于同一体素内的所有点都被赋予了相同的语义标签,因此精度受到限…...
python基础 002 - 1 基础语法
1 标识符(identifier),识别码,表明身份 身份证,ID 定义:在编程语言中标识符就是程序员自己规定的具有特定含义的词,比如类名称、属性名称、变量名等, 在Python 中,pyt…...
浅谈Web开发的三大主流框架:Angular、React和Vue.js
在现代Web开发领域,Angular、React和Vue.js作为三大主流前端框架,各自拥有独特的特点和优势,为开发者提供丰富的选择。让我们更深入地了解这三大框架,并通过一些小型样例来展示它们的特性。 Angular Angular是一个完整的前端框架…...
使用net.sf.mpxj读取project的.mpp文件
1、导入.mpp文件 public void importMppFile(String updateType, MultipartFile multipartFile) {try (InputStream inputStream multipartFile.getInputStream()) {// 读取文件的组件MPPReader mppReader new MPPReader();// 注意,如果在这一步出现了读取异常&a…...
ubuntu 22.04 升级到24.04
step1. sudo apt update sudo apt upgrade sudo apt dist-upgrade step2. sudo apt autoremove step3. sudo apt install update-manager-core step4. sudo vim /etc/update-manager/release-upgrades 将 Prompt 设置为 lts: Promptlts 保存并退出 step5. sudo do-r…...
FreeRTOS学习笔记-基于stm32(14)内存管理
一、FreeRTOS 内存管理简介 FreeRTOS有两种方法来创建任务,队列,信号量等,一种动态一种静态。静态方法需要手动定义任务堆栈。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。 我们在移植FreeRTOS时可…...
关于Lambert W函数
来源:R. M. Corless, G. H. Gonnet, D. E. G. Hare, D. J. Jeffrey, and D. E. Knuth, “On Lambert’s W function,” Adv. Comput. Math., vol. 5, pp. 329–359, May 1996, doi: 10.1007/BF02124750. 摘要 Lambert W函数被定义为函数 w ↦ w e w w \mapsto we^…...
【免杀】C2远控-APC注入-进程镂空
目录 进程镂空&傀儡进程(主要过内存扫描)代码 傀儡进程演示如何上线上线演示 APC注入&进程欺骗(主要过内存扫描)同步调用与异步调用代码演示 进程镂空&傀儡进程(主要过内存扫描) 进程镂空(Pro…...
20240611 讯飞JAVA工程师(研发经理岗)面试
1.线程安全的集合类 在Java中,一些线程安全的集合类有Stack、Vector、Properties、Hashtable等 2.线程池中execute和submit的区别 1)参数及返回值不同 excute只能提交Runnable,无返回值 submit既可以提交Runnable,返回值为null&am…...
【研发日记】Matlab/Simulink软件优化(三)——利用NaNFlag为数据处理算法降阶
文章目录 前言 背景介绍 初始算法 优化算法 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 见《【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法》 背景介绍 在一个嵌入式软件开发项目中,需要开…...
go语言接口之http.Handler接口
package httptype Handler interface {ServeHTTP(w ResponseWriter, r *Request) }func ListenAndServe(address string, h Handler) error ListenAndServe函数需要一个例如“localhost:8000”的服务器地址,和一个所有请求都可以分 派的Handler接口实例。它会一直运…...
R语言 | 使用最简单方法添加显著性ggpubr包
本期教程原文:使用最简单方法添加显著性ggsignif包 本期教程 获得本期教程代码和数据,在后台回复关键词:20240605 小杜的生信笔记,自2021年11月开始做的知识分享,主要内容是R语言绘图教程、转录组上游分析、转录组下游…...
【Linux】shell脚本变量——系统变量、环境变量和用户自定义变量
系统变量 系统变量是由系统预设的,它们通常在系统启动时被加载,并对所有用户和所有shell实例都有效。这些变量通常控制着系统的行为和配置,例如PATH(命令搜索路径)、HOME(用户主目录)等。系统变…...
QWidget 属性——windowTitle·windowIcon·qrc
🐌博主主页:🐌倔强的大蜗牛🐌 📚专栏分类:QT ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、windowTitle二、windowIcon三、qrc 一、windowTitle windowTitle 是一个通常用于表示窗口标题…...
深入理解rtmp(一)之开发环境搭建
深入理解rtmp(一)之开发环境搭建 手机直播在15年的时候突然火起来,随着花椒,映客等出现,直播一下就出现在了风口,各个公司针对直播的战斗迅速打响,战斗过程比较短暂,随着许多公司的退出和死去,手机直播行业趋于稳定,直播服务时长也被传统的CDN厂商牢牢占据,后面大家又把精力投…...
java常用面试基础题
&与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件…...
互联网摸鱼日报(2024-06-11)
互联网摸鱼日报(2024-06-11) 36氪新闻 雅诗兰黛,胆子也太大了 苹果WWDC终极前瞻:5大看点20大AI新功能,库克不能输的一战 瑞士清洁科技公司Enerdrape开发预制地热板,回收城市地下空间的浅层地热能和废热用于建筑物制热或制冷 | …...
中介子方程十二
X$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXα…...
SLT简介【简单介绍SLT】
SLT简介 在c的学习当中STL的学习是一个很重要的一环,但是STL又是一个庞大的章节,因此这里我们先简单介绍一下STL,有助于后面我们对STL的学习,这里就是做一个简单的介绍,并无干货。 1.什么是STL STL(standard templa…...
vue实现pdf下载——html2canvas
html2canvas 官方文档https://html2canvas.hertzen.com/getting-started html2canvas 的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者PDF文件。 1. 安装插件 npm install html2canvas jspdf --save 2.使用(页面已经…...
安装docker+mysql的一些坑
yum -y install docker 提示missing signature 参考这里 https://www.8a.hk/news/content/8235.html 卸载旧的docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装…...
React Native采集数据离线存储、网络状态监控、加密上传、鉴权
在无网络环境下进行数据采集并在有网络时上传至服务器,同时确保数据的鉴权和加密,这一需求需要考虑多方面的实现细节。无论您选择原生开发还是使用React Native(甚至Expo),以下是如何实现这一需求的具体步骤和建议。 …...
网络数据库后端相关面试题(其三)
18, 传输控制协议tcp和用户数据报协议udp有哪些区别 第一,tcp是面向字节流的,基本的传输单位是tcp报文段;而udp是面向报文的,基本传输单位是用户数据报。 第二, tcp注重安全可靠性,连接双方在…...
Hadoop之HDFS分布式文件系统
HDFS简介 Hadoop Distributed File System (HDFS): HDFS 是 Hadoop 的分布式文件系统,它设计用于存储大量数据,并提供 高吞吐率的数据访问,通过将数据分块存储在多个节点上,实现数据的冗余存储和容错。 HDFS重要概念 HDFS 通过统一的命名空间目录树来定位文件; 另外,它…...
插入删除单链表指定结点-偷天换日法
王道说下面的代码有BUG,比如当删除的结点p在最后一个元素时,p->nextNULL; So *q NULL; q->data就是错误的,我认为加个判断就行 加个判断即可 /*看着是删除q了,从结果上看就是把p删除了 偷天换日法*/ bool DeleteNode(LNod…...
MybatisPlus代码生成器使用案例
针对数据库中的实体类表,自动生成相关的pojo类,mapper,service等 1. Get-Started 基于mybatisplus,idea下载mybatisplus插件 sql文件 /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8 …...
数学公式编辑器(前端预研)
数学公式输入wangeditor: vue2使用wangeditor实现数学公式和富文本编辑器 mathjax文档:MathJax: 让前端支持数学公式 mathjax识别数学公式vue中使用mathjax识别latex数学公式 数学公式编辑器:(少) https://github.com…...
架构设计-如何安全地传输密码
java web 项目中经常会遇到登录或注册的场景,如果查看浏览器的 network 网络请求时,用户的密码以明文方式传输,会造成很多安全隐患,这就涉及到密码如何安全传输的问题。 数据加密的重要性不言而喻,通用的加密技术有 哈希散列、对称加密、非对称加密。 哈希散列 哈希散列是…...
【库】nprogress 顶部进度条
yarn add nprogress router文件 前置路由添加启动 后置路由添加关闭 router.beforeEach((to, from, next) > { NProgress.start() next() }) router.afterEach(() > { NProgress.done() }) App.vue 文件 引入样式 <script setup> import "nprogress/npro…...
wordpress知名博客主体/苏州seo公司
打开excel工作表的时候需要输入密码,这是对excel进行了加密,没有正确密码没办法打开文件,如果忘记了密码或者不知道密码,该如何打开文件呢?我们以奥凯丰 EXCEL解密大师为例,解决一下excel文件打开密码问题。…...
长沙做网站开发价格多少/seo搜索是什么
正数在内存的存储是以最高位为符号位,其余为数值的二进制序列,那么浮点数在内存中是怎么进行存储的呢,接下来我们一起看一看; 假设一个数为1154,那么用科学记数法可以表示为1.154*10^3,同理在计算机中也可…...
做视频网站收入/推广引流吸引人的标题
g的编译选项介绍: -WI的理解,gcc的-WI,xxx选项似乎是在 gcc 中使用 ld 链接选项时候的编译器选项 -L: “链接” 的时候,去找的链接库的目录 - rpath(或 - R ,这似乎是一个内容),意思是“运行…...
网站建设大作业选题/开发外包网站
这几天在学校呆着,大家遇到了一些网络问题。在这里集中写一下。 客户端打不开 学校的客户端打不开,症状是双击之后,没有反应。这种问题有两种方法:1.重启电脑。一般这方法可以奏效,万能的重启。2.卸掉客户端࿰…...
注册公司去哪个网站/今日刚刚发生的重大新闻
前言 众所周知,Xamarin应该是.net下的跨平台开发工具。2016年之前还处于收费状态,后被微软收购后开源。但似乎有个现象,开源后的Xamarin发展似乎有些停滞,而且维护Xamarin的团队又很固执不愿变通。社区多次建议UI层应该统一绘图引…...
低价做网站/佛山网站建设模板
写入文件操作 加载文件模块操作 const fs require(fs/promises);实现写文件操作 let msg Hello World, 你好世界!;调用 fs.writeFile() 进行文件写入 // fs.writeFile(file, data[, options], callback) fs.writeFile(./hello.txt, msg, utf8, function(err) {// console.log…...