嵌入式全栈开发学习笔记---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

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

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

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

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

相关文章

哈希双指针

文章目录 一、哈希1.1两数之和1.2字母异位词分组1.3最长子序列 二、双指针2.1[移动零](https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked)2.2[盛最多水的容器](https://leetcode.cn/problems/container-with-most-water/d…

蓝桥楼赛第30期-Python-第三天赛题 统计学习数据题解

楼赛 第30期 Python 模块大比拼 统计学习数据 介绍 JSON&#xff08;JavaScript Object Notation, /ˈdʒeɪsən/&#xff09;是一种轻量级的数据交换格式&#xff0c;最初是作为 JavaScript 的子集被发明的&#xff0c;但目前已独立于编程语言之外&#xff0c;成为了通用的…

使用pyqt绘制一个爱心!

使用pyqt绘制一个爱心&#xff01; 介绍效果代码 介绍 使用pyqt绘制一个爱心&#xff01; 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from PyQt5.QtGui import QPainter, QPen, QBrush, QColor from PyQt5.QtCore import Qt, Q…

[保姆式教程]使用目标检测模型YOLO V8 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

最近需要做基于卫星和无人机的农业大棚的旋转目标检测&#xff0c;基于YOLO V8 OBB的原因是因为尝试的第二个模型就是YOLO V8&#xff0c;后面会基于YOLO V9模型做农业大棚的旋转目标检测。YOLO V9目前还不能进行旋转目标的检测&#xff0c;需要修改代码 PS:欢迎大家分享农业大…

【研发日记】Matlab/Simulink技能解锁(九)——基于嵌入式处理器仿真

文章目录 前言 基于嵌入式处理器仿真 使用方式 第一步&#xff0c;硬件连接 第二步&#xff0c;配置硬件资源 第三步&#xff0c;配置XCP协议 第四步&#xff0c;加载Contrl Model 第五步&#xff0c;运行仿真 第六步&#xff0c;仿真报告 分析和应用 总结 参考资料 前言…

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

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

家政保洁服务小程序怎么做?家政公司快速搭建专属小程序

在数字化时代背景下&#xff0c;家政保洁服务行业也迎来了线上转型的新机遇。家政保洁服务小程序&#xff0c;作为一种新型的线上服务平台&#xff0c;不仅能够提升家政公司的服务效率&#xff0c;还能为顾客提供更加便捷的预约上门服务体验。那么家政保洁服务小程序怎么做呢&a…

从零开始搭建一个SpringBoot项目

目录 Spring BootSpring Boot 项目开发环境1、快速创建SpringBoot项目2、pom.xml 添加 Meavn 依赖3、配置application.yml4、验证数据库是否连接成功5、配置 Druid 数据源 Spring Boot 整合 MyBatis1、准备依赖2、application-dev.yml 配置3、启动类添加Mapper接口扫描器4、设置…

BWVS 靶场测试

一、PHP弱类型 is_numeric() 输入&#xff1a;127.0.0.1/BWVS/bug/php/code.php # 1、源代码分析 如果num不是数字&#xff0c;那么就输出num&#xff0c;同时如果num1&#xff0c;就输出flag。即num要是字符串又要是数字 # 2、函数分析&#xff1a; is_numeric()函数&…

《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 各种自动化框架都会有脚本录制功能&#xff0c; playwright这么牛叉当然也不例外。很早之前的selenium、Jmeter工具&#xff0c;发展到每种浏览器都有对应的录制插件。今天我们…

牛客NC392 参加会议的最大数目【中等 贪心+小顶堆 Java/Go/PHP 力扣1353】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/4d3151698e33454f98bce1284e553651 https://leetcode.cn/problems/maximum-number-of-events-that-can-be-attended/description/ 思路 贪心优先级队列Java代码 import java.util.*;public class Solution {/**…

java面试高级篇(JVM、Mysql、Redis、Kafka)

文章目录 面试专题-java高级篇1. JVM有做过jvm的调优吗?常用的jvm参数调优有哪些?如果jvm持续一段时间频繁的发生Young GC (轻GC) 可能原因有哪些? 2. Mysql2.1. 基本功(见为知笔记)2.2. 什么是索引2.3. 索引的优劣势2.4. MySQL的索引结构2.4.1. B-Tree索引2.4.2. BTree索引…

外卖系统源码开发全攻略:外卖小程序与后台管理系统的设计与实现

今天&#xff0c;小编将详细介绍外卖系统源码的开发全攻略&#xff0c;从需求分析到设计与实现&#xff0c;为开发者提供全面指导。 一、需求分析 1.用户需求 用户是外卖系统的核心&#xff0c;需满足以下基本需求&#xff1a; -浏览菜单并下单 -实时追踪订单 -多种支付方…

每日一题——博弈论(枚举与暴力)

博弈论 题目描述 运行代码 #include<iostream> #include<vector> using namespace std; int main(){int n;cin >> n;vector<int> d(n,0);for(int i 0;i < n;i){cin >> d[i];}vector<int> in(1000,0);for(int k 1;k<3;k){for(int…

ESP32烧录AT固件并进行MQTT通讯

首先下载AT固件 发布的固件 - ESP32 - — ESP-AT 用户指南 latest 文档 下载烧录工具 下载指导 - ESP32 - — ESP-AT 用户指南 latest 文档 烧录后注意usb的串口是不能发AT指令的 需要用16和17脚 用AT指令确认OK后连WIFI ATCWMODE1 //设置客户端模式 ATCWLAP …

mysql误删后使用binlog恢复数据

1 预期效果 使用 binlog 恢复数据的预期效果是将误删的数据还原到误删之前的状态&#xff0c;以减少或消除数据丢失的影响。通过正确解析和执行 binlog 中的操作记录&#xff0c;可以重新执行误删操作之后的插入、更新或删除操作&#xff0c;从而恢复被误删的数据。 数据恢复&…

Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)

概述 现在&#xff0c;我们使用consul客户端的api来把GRPC服务实现注册到consul上&#xff0c;非Go-Micro的形式其实&#xff0c;consul官方提供了对应的接口调用来实现&#xff0c;golang中的consul/api包对其进行了封装我们使用consul/api来进行展示 目录结构 gitee.com/g…

springboot+mysql在线考试系统-计算机毕业设计源码82584

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对在线考试等问题&#xff0c;对如何通过计算…

Websocket助手

功能介绍 WS助手是WebSocket调试的开发工具&#xff0c;该客户端工具可以帮助开发人员快速连接到测试/生产环境&#xff0c;它可以帮助您监视和分析 Websocket 消息&#xff0c;并在开发过程中解决问题&#xff1b;可以模拟客户端实现与服务器的数据交互&#xff0c;并完成批量…

论文精读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微软亚洲研究院&#xff08;Microsoft Research Asia&#xff09;, 浙江…