嵌入式全栈开发学习笔记---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,一经查实,立即删除!

相关文章

深入理解C++多态-虚函数

引言 C多态的实现方式可以分为静态多态和动态多态&#xff0c;其中静态多态主要有函数重装和模板两种方式&#xff0c;动态多态就是虚函数。下面我们将通过解答以下几个问题的方式来深入理解虚函数的原理&#xff1a; 为什么要引入虚函数&#xff1f;&#xff08;用来解决什么…

2024年最新信息安全标准汇总

这些标准是我们在数字化时代保障网络安全、数据安全的重要基石&#xff0c;对于维护国家安全、企业利益和个人信息安全具有至关重要的作用。 随着科技的快速发展&#xff0c;网络空间的安全威胁也在不断演变&#xff0c;从复杂的网络攻击到个人信息泄露&#xff0c;这些安全风…

JAVA面试题大全(十四)

1、Kafka 可以脱离 Zookeeper 单独使用吗&#xff1f;为什么&#xff1f; kafka不能脱离zookper单独使用&#xff0c;因为kafka使用zookper管理和协调kafka的节点服务器。 2、Kafka 有几种数据保留的策略&#xff1f; Kafka提供了多种数据保留策略&#xff0c;这些策略用于定…

哈希双指针

文章目录 一、哈希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…

嵌入式0基础开始学习 ⅠC语言(7)指针

0.问题引入 int a 5; a 1024; //把1024存放到变量a的地址中去 b a; // 取变量a的值&#xff0c;赋值给b >在c语言中&#xff0c;任何一个变量&#xff0c;都有两层含义 (1)代表变量的存储单元的地址&#xff1a;变量的地址…

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

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

分享10个国内可以使用的GPT中文网站

在今天的人工智能领域&#xff0c;基于对话的语言模型已成为研究的热点&#xff0c;尤其是像 ChatGPT 这样因其出色的语言理解与对话交互能力而广受关注的模型。本文将介绍10个国内可以直接使用GPT的网站&#xff0c;旨在为大家在选择和使用这些优秀的AI工具时提供有价值的参考…

使用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…

AI与量子计算:科技新时代的双重飞跃

在科技的浪潮中,每一次技术革新都如同一次深海潜行,探寻着未知的奥秘。近年来,人工智能(AI)和量子计算两大领域的发展尤为引人注目,它们不仅代表了科技的未来趋势,更是人类社会进步的强大动力。本文将深入探讨这两项技术的最新进展、潜在影响以及它们之间的潜在联系。 …

2024年3月小程序类目调整汇总公告

各位小程序开发者&#xff1a; 为进一步加强平台的规范管理&#xff0c;优化开发者类目选择体验&#xff0c;现对以下类目进行调整&#xff0c;请各位开发者知悉。 类目调整 #【文娱-小说】 现资质要求 &#xff08;3选1&#xff09;&#xff1a; 1、提供《互联网出版许可…

从零开始搭建一个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()函数&…

使用Nginx的Mirror模块的指南

Nginx 是一个广泛使用的 web 服务器和反向代理服务器&#xff0c;性能出色且易于配置。Nginx 提供了各种模块来扩展其功能&#xff0c;其中一个有用的模块是 mirror 模块。本文将详细介绍 Nginx 的 mirror 模块&#xff0c;包括其用途、使用场景、注意事项以及示例代码。 1. m…

《最新出炉》系列入门篇-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索引…