c语言中数据结构
一、结构体的由来
1. 数据类型的不足
C语言中,基本数据类型只有整型、字符型、浮点型等少数几种,无法满足复杂数据类型的需要。
2. 数组的限制
虽然数组可以存储多个同类型的数据,但是数组中的元素个数是固定的,无法动态地改变大小。
3. 指针的局限性
指针只能指向一个变量,无法同时指向多个变量。
为了解决以上问题,C语言引入了结构体(struct)这一复合数据类型。结构体是由一组不同类型的变量组成的集合,可以方便地表示复杂的数据结构。

二、结构体的使用方法
1. 定义结构体类型
使用关键字struct和大括号{}来定义结构体类型,其中包含若干个成员变量。例如:
struct Student {char name[20];int age;float score;
};
上述代码定义了一个名为Student的结构体类型,它包含三个成员变量:name(字符串类型)、age(整型)和score(浮点型)。
2. 声明结构体变量
声明结构体变量时,需要指定其类型为已定义的结构体类型。例如:
struct Student stu1, stu2;
上述代码声明了两个Student类型的结构体变量stu1和stu2。
3. 访问结构体成员变量
通过“.”运算符来访问结构体变量中的成员变量。例如:
strcpy(stu1.name, "Tom");
stu1.age = 18;
stu1.score = 90.5;
上述代码分别给stu1的name、age和score成员变量赋值。

三、结构体在计算机中的存储方式
1. 内存对齐
为了提高内存读写效率,编译器会对结构体进行内存对齐。内存对齐是指将结构体中的成员变量按照一定的规则排列在内存中,使得它们的地址都是某个特定值的倍数。例如,对于一个int类型的变量,它的地址必须是4的倍数;对于一个char类型的变量,它的地址必须是1的倍数。如果某个成员变量按照默认对齐方式排列后,其地址不是某个特定值的倍数,编译器会在其前面填充一些空白字节,使其地址变为某个特定值的倍数。例如:
struct Student {char name[20]; // 地址为0x00000000,不需要对齐int age; // 地址为0x00000004,需要对齐,填充2个空白字节(即地址为0x00000004)float score; // 地址为0x00000008,需要对齐,填充3个空白字节(即地址为0x00000008)
};
2. 结构体的大小计算
结构体的大小等于其所有成员变量的大小之和。如果成员变量之间有空白字节,那么这些空白字节也会被计算在内。例如:
struct Student {char name[20]; // 占用20个字节(包括末尾的'\0')int age; // 占用4个字节(假设为int类型)float score; // 占用4个字节(假设为float类型)
};
上述代码中,Student结构体的大小为24个字节(20+4+4=28),因为name数组后面有3个空白字节(即sizeof(name)=23)。需要注意的是,不同的编译器可能会对结构体的内存对齐方式和大小计算方法有所不同。因此,在编写程序时应该尽量避免依赖于具体的内存布局细节。
相关文章:
c语言中数据结构
一、结构体的由来 1. 数据类型的不足 C语言中,基本数据类型只有整型、字符型、浮点型等少数几种,无法满足复杂数据类型的需要。 2. 数组的限制 虽然数组可以存储多个同类型的数据,但是数组中的元素个数是固定的,无法动态地改变…...
【GitHub精选项目】抖音/ TikTok 视频下载:TikTokDownloader 操作指南
前言 本文为大家带来的是 JoeanAmier 开发的 TikTokDownloader 项目,这是一个高效的下载 抖音/ TikTok 视频的开源工具。特别适合用户们保存他们喜欢的视频或分享给其他人。 TikTokDownloader 是一个专门设计用于下载 TikTok 视频的工具,旨在为用户提供一…...
Java开发框架和中间件面试题(3)
14.Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量: 1⃣️ISOLATION DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的可重复读隔离级别;Oracle默认采用的读已提…...
React面试题
1. 什么是 React? React 是一个用于构建用户界面的 JavaScript 库。它由 Facebook 开发并开源,广泛应用于现代 Web 应用程序的开发中。 2. React 中的组件是什么? 组件是 React 中构建用户界面的基本单位。它们是可重用且自包含的代码块&a…...
机器学习-数学学习汇总
***I数学只是一个工具,会使用,能解决问题就可以了,精确例如到3.14够用就可以了*** 微积分作用:解决非线性问题 学习:27分。 高中数学: 1.高中数学所有知识点表格总结,高中知识点一个不漏&am…...
17个常用经典数据可视化图表与冷门图表
数据可视化是创建信息图形表示的过程。随着可视化技术的飞速发展,可以利用强大的可视化工具选择合适的数据可视化图表来展示数据。以下专业人士都应该知道的一些最重要的数据可视化图表。 常见数据可视化图表 饼图 饼图是最常见和最基本的数据可视化图表之一。饼图…...
(五)Python 垃圾回收机制
一、垃圾回收的工作原理 Python的垃圾回收机制是自动的,负责管理程序中的内存。它基于两种主要技术:引用计数和循环引用检测器。 引用计数 每当一个对象被引用时,Python会增加该对象的引用计数;每当一个对象不再被引用时&#…...
策略模式(组件协作)
策略模式(组件协作) 链接:策略模式实例代码 注解 目的 正常情况下,一个类/对象中会包含其所有可能会使用的内外方法,但是一般情况下,这些常使用的类都是由不同的父类继承、组合得来的,来实现…...
每日一题-----逆序字符串
大家好我是Beilef,在一个美好的下午我意外接触到编程并且产生了兴趣,哈哈我要努力成为一个跨界者,让我们一起加油吧O(∩_∩)O 文章目录 目录 文章目录 前言 大家好请上车 一、逆序字符串 题⽬描述: 输⼊⼀个字符串,写…...
js两个对象数组合并。并且去掉里边某个属性相同的对象
要合并两个JavaScript对象数组并去除其中某个属性相同的对象,您可以使用concat()方法将两个数组合并,然后使用reduce()方法进行筛选。 以下是一个示例代码,演示了如何合并两个对象数组并去除其中某个属性相同的对象 const array1 [{ id: 1…...
创建重试机制
要自己创建重试机制,可以使用循环结构来实现。以下是一个简单的重试机制的示例代码: java public class RetryExample { public static void main(String[] args) { int maxRetryTimes 3; // 最大重试次数 int retryInterval 1000; /…...
[c]统计数字
题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 输入描述: 第1行是整数…...
采用ODP.NET 批量进行数据同步
因开发、测试场景经常需要模拟机生产环境的数据,原同事开发了一个ado.net图形化同步工具,对非技术人员操作友好,但对技术员使用并不方便,每次同步需源库数据与目标的数据源字段进行配置,且同步大数据时慢,因…...
【vue滚动条插件vuescroll】【vue自定义滚动条】
文章目录 前言一、使用步骤1.下载2.引入库三、在组件中如何使用?四、跳转到顶部的方法scrollTo() 五、效果总结 前言 由于浏览器自带的滚动条比较不符合设计图,所以在大部分项目中,我们都会自定义滚动条的样式,来还原设计图&…...
python 1200例——【8】冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 冒泡排序的代码: def bubble_sort(arr):n = len(arr)for i in range(n):#…...
在PyTorch中设置随机数生成器的种子值
在PyTorch中设置随机数生成器的种子值的方法 CPU:可以使用torch.manual_seed()函数 GPU:需要额外设置torch.cuda.manual_seed()来设置GPU上的随机数生成器种子值。 import torch# 设置随机种子 torch.manual_seed(0)if torch.cuda.is_available():tor…...
用手机做无人直播怎么做?
用手机进行无人直播已经成为了一种新兴的方式,给我们的生活带来了便利和创新。无人直播是指通过手机进行实时转播,而无需人工操作的一种直播形式。以下将介绍如何用手机实现无人直播。 首先,要实现手机无人直播,我们需要一个稳定…...
【zookeeper经典应用实战】
文章目录 Zookeeper主要方法 Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户 端API有: ZooKeeper官方的Java客户端API。 第三方的Java客户端API,比如Curator。 ZooKeeper官方的客户端…...
12月25日作业
串口发送控制命令,实现一些外设LED 风扇 uart4.c #include "uart4.h"void uart4_config() {//1.使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR | (0x1 << 1);RCC->MP_AHB4ENSETR | (0x1 << 6);RCC->MP_APB1ENSETR | (0x1 <…...
React学习计划-React16--React基础(五)脚手架创建项目、todoList案例、配置代理、消息订阅与发布
一、使用脚手架create-react-app创建项目 react脚手架 xxx脚手架:用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置(语法检查、jsx编译、devServe…)下载好了所有相关的依赖可以直接运行一个简单的效果 react提供了一个…...
【GEO实战密码】GEO 的真正护城河,是 RAG
《GEO实战密码》节选:GEO 的真正护城河,是 RAG企业做生成式搜索优化,别只盯着外部曝光。AI 愿不愿意引用你,首先取决于你的内容值不值得被信任。最近和不少企业聊 GEO,也就是生成式搜索优化,发现一个非常典…...
MASA全家桶汉化包终极指南:让Minecraft模组界面说中文的免费解决方案
MASA全家桶汉化包终极指南:让Minecraft模组界面说中文的免费解决方案 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为MASA模组复杂的英文界面而烦恼吗?MAS…...
SpringBoot项目实战:5分钟集成EasyExcel,搞定带复杂合计与中文金额的Excel导出
SpringBoot实战:5分钟集成EasyExcel实现智能Excel导出 在企业管理系统的开发中,Excel导出几乎是每个项目都会遇到的刚需功能。传统POI操作Excel的繁琐代码让很多开发者头疼不已,而Alibaba开源的EasyExcel则彻底改变了这一局面。本文将带你用S…...
B站SEO优化底层逻辑:以用户需求为核心,解锁低成本流量密码
在B站流量竞争日趋激烈的当下,很多创作者陷入“唯算法论”的误区,过度纠结于完播率、互动量等数据,却忽略了SEO优化的本质——匹配用户搜索需求。 一、认知重构:B站SEO的本质是“用户需求匹配”,而非“算法博弈”多数创…...
CREO新手避坑指南:从拉伸到抽壳,这10个建模细节90%的人都踩过
CREO新手避坑指南:从拉伸到抽壳,这10个建模细节90%的人都踩过 刚接触CREO三维建模时,许多初学者会被软件强大的功能所吸引,却往往在基础操作上反复踩坑。本文将从实际案例出发,剖析那些看似简单却暗藏玄机的建模细节&a…...
产品工程师(Product Engineer)角色为何在创业公司成为最稀缺的竞争力?
在科技招聘市场,一位能力顶尖的工程师投递了上百份简历,却始终卡在“技术面试过关、产品讨论却露怯”的阶段。团队明明需要能快速交付价值的人,可最终录用的往往是那些“既懂代码又能自己做产品决策”的少数派。大多数候选人把精力全放在刷 L…...
5G网络切换实战:当gNB之间没有Xn接口时,N2/NGAP切换如何保证你的游戏不掉线?
5G网络无缝切换实战:无Xn接口场景下的高可靠连接方案 手游玩家小张正沉浸在激烈的团战中,突然屏幕右上角的延迟数字从30ms飙升至500ms——角色瞬间卡顿,等他重新恢复操作时,团队已经团灭。这种场景在5G时代本应成为历史࿰…...
保姆级教程:在群晖DSM 7.2上为虚幻引擎5项目配置Perforce Helix Core(附TypeMap避坑清单)
群晖DSM 7.2上为虚幻引擎5配置Perforce Helix Core全指南 对于独立游戏开发者和小型工作室来说,版本控制系统是项目管理的基石。Perforce Helix Core以其卓越的大文件处理能力,成为虚幻引擎项目版本控制的首选方案。本文将手把手指导你在群晖NAS上搭建Pe…...
如何高效获得GitHub社区认可:开发者的3个实用徽章获取策略
如何高效获得GitHub社区认可:开发者的3个实用徽章获取策略 【免费下载链接】community Public feedback discussions for: GitHub Mobile, GitHub Discussions, GitHub Codespaces, GitHub Sponsors, GitHub Issues and more! 项目地址: https://gitcode.com/gh_m…...
光猫拨号下,如何把二级路由器变成‘透明网桥’?一个设置让NAS、打印机全屋可见
光猫拨号下的家庭网络优化:二级路由器透明化实战指南 家里NAS里的电影在客厅电视上死活刷不出来?书房电脑找不到卧室的无线打印机?这些问题往往源于家庭网络中多台路由器形成的"局域网套娃"。本文将手把手教你如何将二级路由器转化…...
