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

news2024/11/14 20:00:03

目录

结构体

结构体的声明

定义结构体变量

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

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

结构体指针

结构体指针的定义

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

结构体数组

结构体数组的定义

遍历结构体数组

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


上一篇复习了最后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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在家庭影院音频中应用的D类音频放大器

家庭影院的主要组成部分包括显示设备、音响设备、信号源和接线设备等。家庭影院的音响信号需要进行处理和输出&#xff0c;以获得高质量的音效。音响设备通常需要一台功率适当的数字、模拟混合的处理器&#xff0c;对音源进行降噪、均衡、扩展等处理操作&#xff0c;以达到高品…

VMare下载安装

一.下载 1.百度搜索BROADCOM官网 打开官网&#xff1a; https://www.broadcom.com/​ 2.点击右上角&#xff0c;进行账号注册&#xff0c;注册好后&#xff0c;进行登陆 3.注册好后&#xff0c;进入个人界面&#xff1a;https://support.broadcom.com/#. 按下图所示点击进…

React 组件创建以及使用

1.创建和嵌套组件 React 应用程序是由 组件 组成的。一个组件是 UI&#xff08;用户界面&#xff09;的一部分&#xff0c;它拥有自己的逻辑和外观。组件可以小到一个按钮&#xff0c;也可以大到整个页面。 React 组件是返回标签的 JavaScript 函数&#xff1a; function My…

【计算机毕业设计】基于SSM+Vue的校园美食交流系统【源码+lw+部署文档】

目录 前 言 第1章 概述 1.1 研究背景 1.2 研究目的 1.3 研究内容 第二章 开发技术介绍 2.1 Java技术 2.2 Mysql数据库 2.3 B/S结构 2.4 SSM框架 第三章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统性能分析 3.3 系…

无线技术整合到主动噪声控制(ANC)增强噪声降低性能

主动噪声控制&#xff08;ANC&#xff09;已成为一种广泛使用的降噪技术。基本原理是通过产生与外界噪音相等的反向声波&#xff0c;将噪音中和&#xff0c;从而达到降噪的效果。ANC系统通常包括以下几个部分&#xff1a;参考麦克风、处理芯片、扬声器和误差麦克风。参考麦克风…

Drone+Gitee自动执行构建、测试和发布工作流

拉取Drone:(至于版本&#xff0c;你可以下载最新的) sudo docker pull drone/drone:2 拉取runner&#xff1a; sudo docker pull drone/drone-runner-docker 在Gitee中添加第三方应用&#xff1a; 进入个人主页&#xff0c;点击设置&#xff1a; 往下翻&#xff0c;找到数…

Web工程和Servlet

使用idea创建web项目 第一种方式&#xff1a;使用原型创建web项目&#xff0c; Archetype的选择如下图&#xff1a; 创建完成&#xff1a; 第二种方式&#xff1a;不使用原型创建web工程 点击new,选择tomcat的bin的上一级目录 创建完毕 使用&#xff1a; 再webapp目录下…

重新思考:Netflix 的边缘负载均衡

声明 本文是对Netflix 博客的翻译 前言 ​ 在先前关于Zuul 2开源的文章中&#xff0c;我们简要概述了近期在负载均衡方面的一些工作。在这篇文章中&#xff0c;我们将更详细地介绍这项工作的原因、方法和结果。 ​ 因此&#xff0c;我们开始从Zuul和其他团队那里学习&#…

【限免】杂波环境下线性调频脉冲、巴克码、频率步进脉冲雷达MTI、脉冲压缩【附MATLAB代码】

来源&#xff1a;微信公众号&#xff1a;EW Frontier 本代码主要模拟杂波环境&#xff08;飞机、地杂波、鸟类信号&#xff09;下&#xff0c;Chirp脉冲、巴克码脉冲、频率步进脉冲雷达信号的脉冲压缩及MTI、​匹配滤波。 MATLAB主代码 % 定义参数 fs 1000; % 采样率 T 1; …

C语言 | Leetcode C语言题解之第106题从中序与后序遍历序列构造二叉树

题目&#xff1a; 题解&#xff1a; int post_idx;typedef struct {int key;int val;UT_hash_handle hh; } hashTable;hashTable* idx_map;void insertHashTable(int x, int y) {hashTable* rec malloc(sizeof(hashTable));rec->key x;rec->val y;HASH_ADD_INT(idx_m…

九、图形化脚本

多年来&#xff0c; shell脚本一直都被认为是枯燥乏味的。但如果你准备在图形化环境中运行脚本时&#xff0c;就未必如此了。有很多与脚本用户交互的方式并不依赖read和echo语句。 9.1 创建文本菜单 创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户…

牛客NC295 连续子链表最大和【simple 动态规划 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/650b68dfa69d492d92645aecd7da9b21 思路 动态规划动态规划算法通过迭代遍历输入数组&#xff0c;维护一个额外的数组 dp 来记录截止到每个位置的最大连续子数组和&#xff0c;并利用一个变量 max_num 实时更新全…

面向可复用性和可维护性的设计模式 课程学习总结

什么是设计模式 设计模式&#xff1a;在软件设计中给定上下文中常见问题的通用的、可重用的解决方案。 设计模式分类 1. 创建型模式——Creational patterns 关注对象创建的过程 1.1 工厂方法模式 定义用于创建对象的接口&#xff0c;但让子类决定要实例化哪个类。工厂方…

swift中json和字典Dict或者数组相互转换,JSONSerialization的强大使用

在Swift中&#xff0c;你可以使用JSONSerialization类将JSON字符串转换为字典。要将 Swift 字典转换为 JSON 字符串&#xff0c;我们可以使用JSONSerialization类的data(withJSONObject:options:)方法。这个方法将字典转换为二进制数据&#xff0c;然后我们可以使用String(data…

Leetcode 环形链表|| 快慢指针解法

但是我们不知道 aaa 的值&#xff0c;该怎么办&#xff1f;依然是使用双指针法。考虑构建一个指针&#xff0c;此指针需要有以下性质&#xff1a;此指针和 slow 一起向前走 a 步后&#xff0c;两者在入口节点重合。那么从哪里走到入口节点需要 aaa 步&#xff1f;答案是链表头节…

SAP-CO成本控制概念之标准成本

“ 本篇介绍&#xff1a;标准成本的会计概念&#xff0c;标准成本的制定标准&#xff1b;通过结合会计标准成本的概念与SAP CO标准成本估算功能&#xff0c;更具象化的了解SAP如何实现标准成本管理&#xff0c;为后续学习SAP实际成本核算打下基础。” 01 — 背景需求 SAP实施…

【C++】深入解析C++智能指针:从auto_ptr到unique_ptr与shared_ptr

文章目录 前言&#xff1a;1. 智能指针的使用及原理2. C 98 标准库中的 auto_ptr:3. C 11 中的智能指针循环引用&#xff1a;shared_ptr 定制删除器 4. 内存泄漏总结&#xff1a; 前言&#xff1a; 随着C语言的发展&#xff0c;智能指针作为现代C编程中管理动态分配内存的一种…

infoq读书笔记-云原生时代,如何建设稳定性可观测体系?

而可观测性则是把Log、Trace、Metric拧成了一股绳&#xff0c;让三大支柱互相之间建立亲密的“血缘关系”&#xff0c;通过这种关系我们可以结构化的从整体到局部再到具体细节的观测业务&#xff1a; 图片来自网络如果把业务系统比作一座海上的冰山&#xff0c;监控仅能看到的…

02_前端三大件HTML

文章目录 HTML用于网页结构搭建1. 标签2. 客户端服务器交互流程3. 专业词汇4. html语法细节5. 安装VSCODE安装插件6. Live Server插件使用7. 标题&段落&换行&列表8. 超链接标签使用9. 图片10. 表格的写法11. 表单标签*(重点)12. 下拉框13. 页面布局标签14. 块元素和…

机器学习大模型驱动:未来的趋势与应用

文章目录 &#x1f4d1;前言一、什么是机器学习大模型&#xff1f;1.1 大模型的特点1.2 大模型的技术基础 二、大模型的技术实现2.1 Transformer 架构2.2 预训练和微调2.3 模型并行和数据并行 三、大模型的应用场景3.1 自然语言处理&#xff08;NLP&#xff09;3.2 计算机视觉&…