嵌入式全栈开发学习笔记---C语言笔试复习大全22

目录

结构体

结构体的声明

定义结构体变量

访问结构体成员进行初始化

通过结构体变量名访问结构体成员

结构体指针

结构体指针的定义

通过结构体指针访问结构体成员

结构体数组

结构体数组的定义

遍历结构体数组

结构体的长度(笔试重点)


上一篇复习了最后6道编程题,这一节开始复习结构体的内容。

说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。

这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。

注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!

vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。

我们正式开始:

结构体

为什么要学习结构体?

我们以往存储数据都是用数组来存储的,但是数组有个缺点就是存储的数据的类型必须是一样的。如果我们想要存储一个人的信息,比如,身高、年龄等,身高是浮点型,年龄是整型,那这种数据用数组来存储是不行的,因此我们需要学习结构体。

结构体的声明

struct的语法格式如下:

struct  结构体名 {成员表列}; //分号不能丢

比如:

struct student

{

        int num;

        char name[20];

        float score;

        char addr[30];

} ; //注意:这个分号不能丢

注:struct是一个关键字,结构体内部的各变量为结构体成员。

结构体声明后之后可以定义结构体变量:

定义结构体变量

例如:struct student s1;

定义结构体变量初始化

和其它类型变量一样,对结构体变量可以在定义时指定初始值。

例如:struct student s2={jack,1,m};

访问结构体成员进行初始化

通过结构体变量名访问结构体成员

我们前面的s1没有初始化,如果你想要让它初始化时,可以通过“结构体变量名.成员名”来访问结构体中的成员,例如:s1.id=2; s1.sex=f;

注意:如果要通过结构体变量名来访问数组成员进行初始化,不能直接写成s1.name=tom;//这样写等价于char name[32];name=aaa;由于name数组名是个地址常量,因此不能被修改。

可以这样写:strcpy(s1.name,tom);

也可以在结构体声明时直接初始化:

struct Books

{

   char  title[50];

   char  author[50];

   char  subject[100];

   int   book_id;

} book = {"C 语言", "RUNOOB", "编程语言", 123456};

如果嫌结构体的声明部分太长,可以将结构体声明改个名字:

例如:

typedef struct Books

{

   char  title[50];

   char  author[50];

   char  subject[100];

   int   book_id;

}stu ;

这样我们就把

struct Books

{

   char  title[50];

   char  author[50];

   char  subject[100];

   int   book_id;

};

这么一大串改成了stu

通过结构体变量名输出结构体成员,只能一位一位输出,例如:printf(%s %d %c\n,s1.name, s2.id, s1.sex);

结构体指针

结构体指针的定义

结构体指针应该指向结构体变量,我们要先申请一块内存给结构体变量,然后再让结构体指针指向这块内存。

stu *ps=(stu*)malloc(sizeof(stu)*1);

通过结构体指针访问结构体成员

通过“结构体指针变量名->成员名”来访问结构体成员并初始化

ps->id=3;

ps->sex=m;

注意:如果是访问数组成员,应写成strcpy(ps->name,boy);

如果要通过指针输出结构体成员,应该写成例如:printf(%s %d %c\n,ps->name, ps->id, ps->sex);

结构体数组

结构体数组的定义

数组中的每个元素都是一个结构体

例如:

stu s3[5]={{aa,4,f},{bb,5,f}};

遍历结构体数组

int i;

for(i=0;i<5;i++)

{

        printf(“%s %d %c\n,s3[i].name,s3[i].id,s3[i].sex);

}

结构体的长度(笔试重点)

计算结构体的长度有两个原则:

  1. 结构体的总长度一定是最长成员的数据类型的整数倍;
  2. 每个成员的偏移量一定是该成员长度的整数倍;

例如:

struct test

{

int a;

int b;

char c;

char d;

} ;

这样运行出来的结果是12

因为该结构体有4个成员,要保证结构体的总长度一定是最长成员的数据类型的整数倍,因此要在后面补两个字节。

如果我们将该结构体成员调整一下顺序,

例如:

struct test

{

int a;

char c;

int b;

char d;

} ;

这样运行出来的结果是16

因为char后面是int,为了保证int偏移量是自己的整数倍,因此char后面要空出三个字节,然后又由于int是最长成员,为了保证int总长度是int的整数倍,因此在后面补3个字节,所以总长度是16

但是笔试的时候会有更加复杂的情况,比如结构体中嵌套结构体

例如:

struct test 2

{

int z;

struct test t;

char e;

};

注意:不要以为总长度是struct test t长度的整数倍,我们计算的时候还是要把struct test t拆开,最长成员还是int。计算的时候要保证struct test t在内存中的完整性,不能拆开。

这样运行的结果是24

以上就是这篇内容,如想了解更多,欢迎订阅本专栏!

如有问题可评论区或者私信留言,如果想要进交流群请私信!

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

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

相关文章

Attention相关问题笔试解析。

Attention相关问题笔试解析。 题目描述一&#xff1a;【选择】题目描述二&#xff1a;【简答】题目描述三&#xff1a;【代码】Scaled Dot-Product Attention&#xff1a;下面是用PyTorch实现的一个Attention机制的代码。这个实现包括一个简单的Scaled Dot-Product Attention机…

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型 前言 整了一个在C# Winform中调用文生图Stable Diffusion XL的小程序&#xff0c;基于百度智能云千帆平台 步骤 如何注册百度智能云和创建应用&#xff0c;获取API 密钥等和在之前的博客中基本相同&#…

P6160 [Cnoi2020] 向量

[Cnoi2020] 向量 题目背景 向量(vector)&#xff0c;指具有大小(Magnitude)和方向(Direction) 的量。 与向量对应的量叫做数量(Scalar)&#xff0c;数量只有大小&#xff0c;没有方向。 对于 Cirno 来说&#xff0c;整天环绕氷屋的旋转 Sangetsusei 们是向量而不是数量。 Sun…

spring模块(三)Spring AOP(2)使用

一、demo 1、spring项目 &#xff08;1&#xff09;pom <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency>&l…

[数组查找]1.图解线性查找及其代码实现

线性查找 线性查找是一种在数组中查找数据的算法。与二分查找不同&#xff0c;即便数据没有按顺序存储&#xff0c;也可以应用线性查找。线性查找的操作很简单&#xff0c;只要在数组中从头开始依次往下查找即可。虽然存储的数据类型没有限制&#xff0c;但为了便于理解&#x…

CorelCAD v2022.5 解锁版 安装教程(2D制图 3D设计和打印的简化软件)

前言 CorelCAD&#xff0c;加拿大Corel公司开发的一款适用于2D制图、3D设计和打印的简化版CAD软件。它是款专业的2D制图和3D设计软件&#xff0c;拥有行业标准文件兼容性&#xff0c;支持 .DWG、.STL、.PDF、 .CDR*等文件格式&#xff0c;轻松实现协作和项目共享&#xff0c;利…

电商零基础的人,可以做抖音小店吗?它操作难度大吗?

大家好&#xff0c;我是电商糖果 随着短视频电商的热度越来越大&#xff0c;很多消费者都有了抖音购物的习惯。 于是入驻抖音开店就成了很多人创业做电商的首选。 可是抖音推出的电商项目——抖音小店&#xff0c;出来的时间不是很久&#xff0c;很多人对它了解也不深&#…

2024年5月LLM最新排名:GPT-4o出道即巅峰!国内3个大模型榜上有名!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

设计模式 17 组合模式 Composite Pattern

设计模式 17 组合模式 Composite Pattern 1.定义 组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。这种类型的设…

Java进阶学习笔记21——泛型概念、泛型类、泛型接口

泛型&#xff1a; 定义类、接口、方法的时候&#xff0c;同时声明了一个或者多个类型变量&#xff08;如: <E>&#xff09;,称之为泛型类、泛型接口、泛型方法&#xff0c;我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型&#xff0c;我们可以往ArrayList中传…

浅谈网络安全态势感知

前言 网络空间环境日趋复杂&#xff0c;随着网络攻击种类和频次的增加&#xff0c;自建强有力的网络安全防御系统成为一个国家发展战略的一部分&#xff0c;而网络态势感知是实现网络安全主动防御的重要基础和前提。 什么是网络安全态势感知&#xff1f; 态势感知一词来源于对…

文心智能体大赛:百度文心智能体平台初体验

写在前面 博文内容涉及&#xff1a;文心智能体大赛:文心智能体初体验理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我徒然忘记了热闹&#xff0c;却来不及悟透真正的清冷(《四喜忧国》) 前言 徒然忘记了热闹&#xff0c;却来不及悟透真正的清冷(《四喜忧国》)&#xff0c;在…

前端日志收集(monitor-report v1)

为什么 为什么自己封装而不是使用三方 类似 Sentry 这种比较全面的 因为 Sentry 很大我没安装成功&#xff0c;所有才自己去封装的 为什么使用 可以帮助你简单解决前端收集错误日志、收集当前页面访问量&#xff0c;网站日活跃&#xff0c;页面访问次数&#xff0c;用户行…

Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定

相信很多人都有远程连接家中设备的需求&#xff0c;如远程连接家中的NAS、Windows等服务&#xff0c;所以会涉及到一个内网穿透工具的使用&#xff0c;如果没有公网IP的情况下&#xff0c;推荐大家使用ZeroTier&#xff0c;这是一款强大的内网穿透工具。 mac和windows版的操作…

梦幻西游手游挂机脚本,搬砖挂机赚米项目,号称单窗口日收益60+(教程+软件)

一、项目背景 随着智能手机的普及&#xff0c;手游市场逐渐成为人们娱乐生活的重要组成部分。其中&#xff0c;《梦幻西游》作为一款经典的国产手游&#xff0c;吸引了大量的玩家。然而&#xff0c;许多玩家因为工作、学习等原因&#xff0c;无法长时间在线游戏。因此&#xf…

Autodl服务器中Faster-rcnn(jwyang)复现(一)

前言 在做实验时需要用到faster-rcnn做对比,本节首先完成代码复现,用的数据集是VOC2007~ 项目地址:https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0 复现环境:autodl服务器+python3.6+cuda11.3+Ubuntu20.04+Pytorch1.10.0 目录 一、环境配置二、编译cud…

深度神经网络——什么是生成式人工智能?

1.引言 生成式人工智能最近引起了很大的关注。 该术语用于指依赖无监督或半监督学习算法来创建新的数字图像、视频、音频和文本的任何类型的人工智能系统。 麻省理工学院表示&#xff0c;生成式人工智能是过去十年人工智能领域最有前途的进展之一。 通过生成式人工智能&#…

【gradle】MAC下用gradle构建部署springboot项目

MAC下用gradle构建部署springboot项目 前言下载安装配置gradle下载安装下载可能出现的问题 &#xff08;zsh: command not found: brew&#xff09; 配置环境变量配置国内下载源全局配置单个项目配置 通过idea构建项目构建后的项目结构 小结延伸 前言 好久以前就听说gradle了&…

MongoDB(介绍,安装,操作,Springboot整合MonggoDB)

目录 MongoDB 1 MongoDB介绍 MongoDB简介 MongoDB的特点 MongoDB使用场景 小结 2 MongoDB安装 安装MongoDB 连接MongoDB MongoDB逻辑结构 MongoDB数据类型 小结 3 MongoDB操作 操作库和集合 操作文档-增删改 操作文档-查询 MongoDB索引 小结 4 SpringBoot整合…

【竞技宝】英超:滕哈格命真硬!足总杯夺冠获欧联资格

足总杯决赛结束,曼联爆冷2比1击败联赛冠军曼城夺冠,滕哈格再一次用顶级理解带队拿到杯赛冠军。赛前曼彻斯特当地有媒体爆料,曼联管理层已经决定要在足总杯决赛之后解雇滕哈格,这个消息让不少球迷都很担心滕哈格的状态。但是荷兰主帅凭借强大的内心,带领球队击败了不可一世的曼城…