【给嵌入式新人的几条建议(共勉):三-C语言基础怎么补?】

给嵌入式新人的几条建议(共勉):三-C语言基础怎么补?

  • 前言
    • 1、先回答一个问题,对C语言的害怕到底在哪?(纠正认知)
    • 2、C语言基础,要补全部吗?No
      • 2.1 先看下自己属于哪种情况?
      • 2.2 回答1个问题,C语言有什么?
        • 2.2.1 数据类型
        • 2.2.2 分支结构
        • 2.2.3 函数
        • 2.2.4作用域
        • 2.2.5 关键字
      • 2.3 有没有动手写代码?
      • 2.4 战线拉了多久?
      • 2.5 搭建环境很苦恼?
    • 3、总结:
  • 本系列回顾清单


前言

嵌入式技术涉及的内容十分广泛。不慌,看完Eric-xuan这个新人系列,不说游刃有余,至少可以自己教自己。 这一篇我们讲:嵌入式开发之-C语言基础

在这里插入图片描述

1、先回答一个问题,对C语言的害怕到底在哪?(纠正认知)

C语言难的是程序设计思路,不是C语言本身。
不管是学生还是职场新人,有很多人在看到复杂的C语言代码时,望而却步。心中对他竖起了高墙,这是给自己的高墙。
那么为什么呢?没有沉下来去面对。
停留在“小马过河”故事中,认知来自其他人的一些结论中。
我曾经不止一次的听到有人说,“你们做C语言开发啊,那你们很厉害,C语言做底层很难。”
说这话的人多少有点不负责了,也高低有点片面了。
C语言确实可以做很多复杂高效的设计,但是难在设计思想,而不是C语言本身,任何一门编程语言,难的都不是语言本身,而所谓的难的实现,也都离不开每一门编程语言的基础。
所以要搞清楚,自己害怕的是C语言还是由他的基础衍生出来的内容。

举个例子:曾遇到有人说“指针好复杂,链表好复杂,这些内容感觉好难理解”。
这里就是没有搞清楚,指针和链表的关系。按照下面的思路:
(1)指针是什么? 指针就是一个变量,这个变量专门存其他变量的地址。 这里的其他变量可以是变量、数组、函数、结构体等,这些可以暂时不去深入。
(2)链表是什么?链表就是包含了指针和数据在内的一个带节点的数据结构,其中的指针可以指向另一个和这个结点一样的结构体类型。那我们可以自己定义这么一个结构体变量(因为结构体变量可以包含不同类型的变量),如下:

// 定义单链表的节点结构体
typedef struct Node {int 	data;           // 数据域struct 	Node* next;  	// 指针域,指向下一个节点
} Node;

有了结点,就可以初始化,就像给一个变量赋值,只不过这次是给1个结构体赋值,要做的事情就是:
(1)创建一个这样的结点,赋初始值;
(2)形成链表(创建另一个结点,让之前创建的结点中的指针,指向新创建的结点),
如下:

// 创建一个新的节点
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node)); // 分配内存if (newNode == NULL) {printf("内存分配失败\n");exit(0);}newNode->data = data; // 设置数据域newNode->next = NULL; // 下一个节点指针设为NULLreturn newNode;
}
// 在链表末尾添加一个新节点
void appendNode(Node** head, int data) {Node* newNode = createNode(data);if (*head == NULL) { // 如果链表为空,新节点即为头节点*head = newNode;return;}Node* current = *head;while (current->next != NULL) { // 遍历到链表末尾current = current->next;}current->next = newNode; // 在末尾添加新节点
}

到此,这个链表或者说一个新的结构体,就定义完成了,并且可以使用它来做一些事情了。
这里涉及到的C语言的东西:
(1)变量: int data
(2)结构体指针:Node *next
(3)结构体定义:typedef struct Node{ int data; Node *next }Node;

2、C语言基础,要补全部吗?No

2.1 先看下自己属于哪种情况?

(1)对C语言有什么,不清楚,看代码时总是拿不准。
(2)掌握一定的C语言基础,对于复杂的数据类型及特殊的用法不清楚。
但是都可以做同一件事:梳理一下C语言基础的知识脉络

2.2 回答1个问题,C语言有什么?

2.2.1 数据类型

(1)基本数据类型: 整形(int),字符型(char),浮点型(float &double);
(2)枚举类型: enum, 赋值整形数
(3)void类型:修饰输入输出参数时表示无参数,修实指针时表示万能类型
(4)派生类型:数组 array[ ],指针 *p,结构体类型,联合体类型,位域。
其中数组用来表示连续的相同数据类型的存储;
指针是存储地址的;
结构体可以包含不同的数据类型,在嵌入式应用中,通常要注意结构体字节对齐。

2.2.2 分支结构

(1)顺序
(2)判断

	 - if ... else... , if ...else if... else...  - 嵌套if ... else... , if...else if... else...  - switch ...case ...  - 嵌套 switch ... case...

(3)循环(for, do…while, while)

2.2.3 函数

(1)输入参数、返回参数
(2)函数声明

2.2.4作用域

变量函数的作用域,是否被头文件,或者extern 关键字扩大了。

2.2.5 关键字

以上我只是列举了常用到的一些基础,如果这些都不会,那么在看代码时可想而知是多么有阻力。
根据自己的个人情况,有的放矢的学习。

2.3 有没有动手写代码?

很多新人,可能在应聘结束后,1年都没怎么写过代码了,这不是夸张。
实践性这么强的编程,不写代码,真的能都理解吗?我打个问号。
重在实践,所谓“看会”并不是真会,要在实践中检验自己。

2.4 战线拉了多久?

很多初学者或者补基础的朋友,总是觉得C语言基础补一遍内容很多。
其实,内容并不多,完全可以在1-2天,甚至1周内,完成一遍。
战线拉的越久,也就越容易懈怠。
我曾在深圳实习时,用1周的下班时间过了1遍C,我属于不怎么聪明的人,按照我的标准,如果你完不成,我觉得那要么就是真的有什么重要的时间错不开,要么就是个人的态度问题,这个就得好好反思一下。

2.5 搭建环境很苦恼?

只要安装了gcc, 用一个文本文档写代码。
用下面这一行就可以编译出可执行文件:
gcc -Wall 你的c文件名 -o test.exe
也不用纠结去选择 什么IDE,什么好用,这个阶段就是打基础。当然,推荐用Vscode,轻量级。

3、总结:

C语言基础不难,难在:
(1)固有认知给自己竖起的高墙
(2)没有精准定位自己的不足
(3)缺乏动手实践-写代码,真正去理解。
(4)战线拉的太长,1-2天,最多1周,拿下它。

本系列回顾清单

  • 【给嵌入式新人的几条建议(共勉):一-初入职场】
  • 【给嵌入式新人的几条建议(共勉):二-好迷茫,内容好多】
  • 【给嵌入式新人的几条建议(共勉):三-C语言基础怎么补?】
  • 【给嵌入式新人的几条建议(共勉):早期的我-嵌入式固件工作5个月心得体会】

我是Eric xuan, 一名小厂固件工程师

如果你对我的博客感兴趣,或者有什么想了解的问题
欢迎评论、点赞 和 转发,私信我。
E-mail: 1171213808@qq.com


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

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

相关文章

企业个人信息安全保护实践

在数字化浪潮的推动下,个人信息安全问题日益凸显,企业如何在合规的框架下保护个人信息安全,成为了一项重要课题。结合国家标准的个人信息合规审计要求,以下为企业个人信息安全保护的最佳实践路径。 一、构建合规的个人信息保护体…

【文件解析漏洞】

使用windows2003sever服务器 第一个:目录解析 1、打开网站目录,右键打开资源管理器 新建一个1.asp文件 在1.asp目录下新建一个2.txt,输入asp的语句 2、使用本机访问windows2003的IP地址 访问http://192.168.189.155/1.asp/2.txt即可 第…

论文翻译:Large Language Models in Education: Vision and Opportunities

Large Language Models in Education: Vision and Opportunities 文章目录 教育中的大型语言模型:愿景与机遇摘要1 引言2. 教育与LLMsA. 教育背景B. LLMs背景C. 智能教育D. 教育中的LLMs 3. EduLLMs的关键技术4. LLM赋能教育A. LLMs在教育中的应用B. LLMs下教育的特…

Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明

全文详见个人独立博客:Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明 Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明更新节奏缓慢,因为每晚学习注意力不够集中,学习进展缓慢。本还给自己找了一大堆其他理由&#xff0…

适用于个人使用的十大数据恢复工具:综合指南

有许多数据恢复工具和软件可用于帮助恢复丢失或损坏的文件。通过了解您的需求并考虑这里探讨的工具,您将能够选择最佳的数据恢复软件,并希望找回您丢失的宝藏。在本综合指南中,我们将探索个人使用的十大数据恢复工具,重点介绍它们…

自定义CustomRatingBar控件

通过自定义RatingBar的样式实现⭐️⭐️⭐️指示器的方式功能过于受限,而且显示的样式阴影会受到影响。 系统自带显示: 自定义样式: 因此简单自一个符合要求的 CustomRatingBar 支持设置星星数量支持设置星星Rating(float)支持设置空显示…

NICE Seminar(2023-07-16)|演化算法的理论研究到底有什么用?(南京大学钱超教授)

模式定理(Schema Theorem) 模式定理(Schema Theorem)是遗传算法(Genetic Algorithm, GA)的重要理论基础,由约翰霍兰德(John Holland)在1975年提出。它描述了具有特定模式…

CSS mask-image 实现边缘淡出过渡效果

使用场景 在生产环境中,遇到一个需求,需要在一个深色风格的大屏页面中,嵌入 Google Maps。为了减少违和感,希望地图四边能够淡出过渡。 这里的“淡出过渡”,关键是淡出,而非降低透明度。 基于 Google Ma…

Tecplot安装error找不到指定模块之解决方案

最近有小伙伴反应,在安装Tecplot 2023版本时,参考教程来操作很顺利,但是在开启软件后,有一个error弹窗,内容如下: 随后用中英文翻译:找不到指定模块 同时,软件内部的Tool工具栏打不…

大路灯护眼灯有必要买吗?五款护眼大路灯推荐

大路灯护眼灯有必要买吗?许多消费者对护眼大路灯的了解不够,总是被不专业产品“耍”得团团转。就比如市面上很多声称用了眼睛就不近视的产品,实际上它们毫无专业技术沉淀,还疏于调校光线稳定性、光线均匀度等上百项核心参数&#…

基于IOT架构的数据采集监控平台!

LP-SCADA数据采集监控平台是蓝鹏测控推出的一款聚焦于工业领域的自动化数据采集监控系统, 助力数字工厂建设的统一监控平台。 为企业提供从下到上的完整的生产信息采集与集成服务,从而为企业综合自动化、工厂数字化及完整的"管控一体化”的解决方案…

校园水电费管理小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教师管理,宿舍信息管理,学生缴费管理,教师缴费管理,系统管理 微信端账号功能包括:系统首页,我的 开发系统…

抖音视频素材一般都从哪里找?抖音视频素材库分享

在浏览抖音时,你是否曾被那些内容丰富、制作精良的视频所吸引?这些视频背后的秘密其实非常简单——高质量的视频素材。优质素材能够让你的视频更加出彩。然而,许多抖音内容创作者在初期可能会困惑:这些视频素材究竟从哪里获取呢&a…

linux uos悬浮窗口置顶问题

问题背景 公司软件有一个功能,在PPT播放时,我们软件悬浮窗口需要在WPS幻灯片上层显示,方便客户操作按钮。在window 上我们设置了窗口的topmost 所以能够显示在最前面。如下图所示: 但是在软件适配国产操作系统Linux统信和麒麟在w…

推动未来的引擎:人工智能大模型的现状与发展

推动未来的引擎:人工智能大模型的现状与发展 一、引言 随着人工智能技术的迅速发展,人工智能大模型作为其中的重要组成部分,正逐渐成为推动科技进步的重要引擎。无论是在自然语言处理、计算机视觉,还是智能推荐等领域&#xff0…

Python酷库之旅-第三方库Pandas(061)

目录 一、用法精讲 236、pandas.Series.explode方法 236-1、语法 236-2、参数 236-3、功能 236-4、返回值 236-5、说明 236-6、用法 236-6-1、数据准备 236-6-2、代码示例 236-6-3、结果输出 237、pandas.Series.searchsorted方法 237-1、语法 237-2、参数 237-…

Kubernetes 学习记录

https://note.youdao.com/ynoteshare/index.html?idbc7bee305611b52d6900ba209a92bd4d&typenote&_time1694072007342 概览 K8S官网文档:https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称,源于希腊语,意为“舵手”或“…

江科大/江协科技 STM32学习笔记P17

文章目录 一、TIM输入捕获输入捕获与输出比较的关系频率测量测频法测周法 输入捕获的电路异或门的执行逻辑 输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构输入捕获模式测频率main.c 输入捕获模式测占空比main.c 一、TIM输入捕获 输入捕获与输出比较的关系 在输出比较中…

PMP--冲刺--易混概念

文章目录 十大知识领域一、整合管理项目管理计划与项目文件的区分: 二、范围管理三、进度管理赶工与快速跟进的区分:赶工增加资源,以最小的成本代价来压缩进度工期;快速跟进,将正常情况下按顺序进行的活动或阶段改为至…

秋招突击——算法训练——8/1——用友集团笔试

文章目录 引言正文小友的生产线个人实现参考实现 小友策划游戏人物个人实现参考实现 最佳工作任务安排个人实现参考实现 大众评分最高的一次旅程 总结 引言 今天晚上七点钟到九点钟是用友集团的笔试,作为今天算法练习的主要内容!具体怎么样,…