首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
2024校招加油
门头沟学院 嵌入式工程师
发布于广东
关注
已关注
取消关注
太细了,强
@小羽的嵌入式校招指南:
嵌入式校招_面试经验大全【C语言】【2_关键字】
【以下内容,后续会不断更新补充!】各位同学有想看某一个知识点详细解析的,也可以在评论区留言~目录【专栏一】嵌入式校招指南作者机械硕士,从零开始自学嵌入式软件,21届秋招进入国内芯片大厂。 从自身转行经历来看,网上嵌入式学习路线的资料少之又少,大多千篇一律且复制粘贴。 而嵌入式入行门槛高,技能树要求多,学习难度非常大,没有有效的方法指导,很容易迷失方向,错过校招。 在此专栏分享我的校招从零开始转行经验,听我给你娓娓道来~专栏链接 https://www.nowcoder.com/creation/manager/columnDetail/MWZkkj1.专栏大纲&写在前面2.转行概述3.前期准备4.自学教材推荐_基础知识5.自学教材推荐_笔试准备6.开发板&项目7.简历8.行业&公司9.城市&岗位10.消费&工业电子类公司未完待续……【专栏二】嵌入式校招_面试经验大全嵌入式软件校招的常见问题,应付校招面试的速效救心丸,你值得拥有! 嵌入式的知识太多太杂,不知道面试经常问哪些? 书上说的知识点太抽象,没有一定的基础很难理解? 别怕,本专栏用通俗的语言和比喻,为你讲清楚! 包含C语言、计算机组成原理、操作系统、数据结构与算法及计算机网络等,详见大纲。1.【C语言】【1_变量】https://www.nowcoder.com/discuss/4917738635256791042.【C语言】【2_关键字】https://www.nowcoder.com/discuss/4975623096282767363.【C语言】【3_数据结构&位运算】https://www.nowcoder.com/discuss/505894349847224320二、关键字【问】介绍一下static关键字的作用【答】static可以修饰全局变量、局部变量和函数。分别有以下作用:全局变量:使全局变量对外部文件不可见。(隐藏)局部变量:使局部变量存储在全局静态区,只初始化一次,函数结束后可一直存在,可在函数内修改。(更改存储区域&延长生命周期)修饰函数,表明函数的作用范围,仅当前.c文件内可被调用,对外不可见。(隐藏)【解析】全局变量全局变量本身就存在于全局静态区,static关键字的作用是隐藏,更改全局变量的作用域。为什么要隐藏呢?有的是考虑到重名的因素,但我个人认为还有一点是比较重要的,那就是处于安全的考虑。比如有一个c文件名为Trusty.c,里面定义了各种对于用户密码的操作,由一个名为安全小组的团队维护。那么我们知道,用户密码肯定是存放在一个全局变量PassWord中,方便各个函数调用操作。PassWord在这个Trusty.c可以随意被调用,因为是由安全小组内部维护的,可以保证安全性。但是,如果另外模块得知了PassWord这个变量名,就可以随意调用。那么缺乏保护措施的另一个模块,很容易泄漏PassWord的内容,导致最重要的密码被窃取!这是绝对绝对不可以的!此时就可以在Trusty.c中定义一个静态全局变量来对外部隐藏PassWord变量啦。static char PassWord[10] = "XiaoYu666";局部变量static修改局部变量主要是延长生命周期。我们都知道,局部变量原本就有隐藏作用,仅对当前函数可见。同时局部变量原本是存放在内存中的栈区,每次进入函数时创建,退出函数时销毁。使用static修改局部变量后,将局部变量从栈区移至全局静态区,其生命周期为一直存在。所以是更改存储区域导致的生命周期延长。那么,问题来了。为什么要这么做呢?举个栗子: 有一个局部变量LocalVar仅被某一个函数RepeatFunc调用。该函数会重复执行很多次,每次都会基于上次的结果,对LocalVar做修改,且保留LocalVar的值到下一次RepeatFunc执行。一种简单粗暴的方法是直接将LocalVar定义为全局变量。但是这样做有两个隐患,一个是其他函数有可能调用并修改LocalVar从而导致运行结果出错;第二个是造成全局变量泛滥,对于大型代码工程来说是不可接受的。因此,static修改的局部变量派上用场了。可以同时具有局部变量的隐藏特性,还具有长久的生命周期来保留上次的结果。真棒呀~~函数我们首先要知道,编程规范中,建议每一个函数只负责执行一个动作,不要一个函数完成多个动作。这叫做低耦合。那么,同修饰全局变量中的例子,用户设置、更改和读取密码的过程中,会使用一系列中间函数来完成一个大的功能如加密&解密,同时返回一些关键信息。如果此时外部模块调用这部分中间函数,非法获取它的返回值,就会造成关键信息泄漏。这个是不被允许的!因此我们可以使用static关键字来修饰中间函数,从而对外隐藏它们。只留给外部模块固定的API接口函数(设置、更改和读取密码),这样就能从代码编写层面来保护啦~————————————————————【问】介绍一下const关键字的作用【答】防止变量被意外地修改。const修饰的变量,只能在初始化时赋初值,其后不能通过该变量来修改。【解析】 常量指针与指针常量1)常量指针。指向常量的指针。const在*的左边。指针指向的变量是常量,不可通过指针改变(可通过原始变量来更改)。 举个栗子:#include <stdio.h>int main(void){ int Value = 2023; const int *ConstPtr = &Value; printf("%d\n",*ConstPtr); *ConstPtr = 2024;}通过上面的例子,我们验证了指针指向的变量是常量,不可通过指针改变的特性。下面来看隐含的另一个意思,即可通过原始变量来更改。#include <stdio.h>int main(void){ int Value = 2023; const int *ConstPtr = &Value; printf("%d\n",*ConstPtr); //*Num1 = 2024; Value = 2024; printf("%d\n",*ConstPtr);}通过上面的例子我们可以知道,虽然我们不能通过ConstPtr这个常量指针来更改Value的值,但是我们可以通过Value这个原始的变量来更改~因为Value本身并不是const类型的~2)指针常量。指针类型的常量。const在*的右边。而指针变量的值是地址,即该指针的指向不可变,不能再指向其他地址。但是指针指向的变量的数值可以改变。#include <stdio.h>int main(void){ int Value = 2023; int TmpValue = 2024; int *TmpPtr = &Value; int *const PtrConst = &Value; printf("%p\n",PtrConst); PtrConst = &TmpValue; printf("%p\n",PtrConst);}3)羽你俗说int Value = 2023;const int *ConstPtr = &Value; //常量指针int *const PtrConst = &Value; //指针常量 怎么区分这两个呢?我们首先明确一个指针的基本概念:Ptr是一个指针变量,所保存的值是一个地址。加上取值符号*后,*Ptr表示的是该地址保存的值。那么为了方便记忆,我们将上述两种指针定义中的int暂时忽略。即:const *ConstPtr = &Value; //常量指针*const PtrConst = &Value; //指针常量现在我们来看const修饰的右边是个什么东西。常量指针中,const修饰的是*ConstPtr。上面我们说过这个*ConstPtr表示一个值,那么const修饰的就是这个值。也就是说这个值不能被修改。指针常量中,const修饰的是PtrConst。上面我们说过指针的值是地址,那么const修饰的是该地址,也就是这个地址不能被修改。这样是不是容易理解和记忆多了呢~~~————————————————————【问】介绍一下volatile关键字的作用【答】volatile关键字告知编译器,所修饰的变量随时有可能被改变,因此程序每次需要存储或读取这个变量时,都直接从变量所在的内存地址中读取数据。【解析】定义volatile是一种类型修饰符,表明该变量可能会被意想不到地改变(操作系统、硬件或者其它线程等),防止编译器对代码进行优化功能1.使编译器每次使用变量时不从寄存器中读取,而是从内存中重新获取2.防止编译器调整操作volatile变量的指令顺序(无法避免CPU动态调度)背景知识1.通常情况下,为了提高运行速度和优化代码量,编译器可能优化读取和存储相关的代码。2.程序运行中读取某一变量时,为提高存取速度,编译器优化时会先把变量读取到一个寄存器中,后续直接从该寄存器中取值(而非从内存中重新读取)。应用场景嵌入式系统程序员经常同硬件、中断、RTOS等打交道,这些都通常要求使用volatile变量。1)硬件相关的寄存器(如:状态寄存器) 我们都知道,嵌入式软件之所以特别,就是因为要和硬件打交道。现在有一个反映硬件状态的变量,由于外部因素改变了硬件状态从而修改了该变量的值。那么此时该变量在内存中的数值和其在寄存器中的数值是不一致的。如果此时CPU需要读取该值,很可能因为编译器的优化而直接读取寄存器中的值,导致读取到的是"旧值"。2)中断服务程序中可能会修改的变量当变量在中断服务程序(ISR)中被修改后,而编译器判断主函数里面没有修改该变量,因此可能只会从该寄存器中读取变量的"旧值"。3)多线程间共享的变量当某一线程读取一个变量时,编译器优化时会先把该变量读取到寄存器中;后面再取变量值时,就直接从寄存器中取值;当另外的线程改变了该值后,该寄存器的值不会相应改变。如果此时CPU需要读取该值,很可能读取到"旧值"。羽你俗说通俗地说,小明(CPU)把自己的个人资料(变量)记录在一张纸上(寄存器)。我们知道,姓名、性别、出生年月这些基本不会改变的属性(非volatile变量),一次记录(从内存copy到寄存器)后每次都可以重复使用。然而身高、体重等随时可能改变的数据(volatile变量),每次必须要现场测量(从内存地址读取)才可以,不然只会得到之前的"旧值"。常见问题1.一个参数既可以是const还可以是volatile吗?可以。用const和volatile同时修饰变量,表示这个变量在软件程序中是只读的,但是可以程序外部条件(硬件)变化下改变。每次使用这个变量时,都要小心地去内存读取这个变量的值,而不是去寄存器读取它的备份。注意:const只是不允许程序代码改变某一变量,其在编译期发挥作用,它并没有实际地禁止某段内存的读写特性。2.一个指针可以是volatile 吗?可以。表示该指针变量容易改变其所指向对象,比如一个指向当前堆栈栈顶的指针,就会随着堆栈的增长改变指向的对象。————————————————————【问】介绍一下extern关键字的作用【答】修饰变量或函数,在当前文件引用另一个文件中定义的变量或者函数。【解析】定义与声明 在这里我们要首先介绍一个概念,就是定义与声明。 函数定义:包含一个函数的所有,包括函数名、返回值、传入参数、函数体(函数功能的具体实现代码)等。 函数声明。也称之为函数原型。将函数名、返回值、传入参数通知编译器,暂不报错,函数定义在后面的代码中。C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,有时调用的函数(Func)在定义当前函数(main)后面时,则需在当前函数前添加函数声明,见下图。若不添加函数声明,则会出现编译与链接 这部分涉及到代码的编译与链接,这里简单介绍一下,具体的看后续专门的文章。 首先我们要知道,CPU在执行代码时,遇到函数Func的时候,不是把Func的代码复制过来运行的。而是跳转到Func代码的存放地址去执行,执行完以后再回到之前函数的代码地址(上下文)。 那么编译器在编译C代码时,遇到调用全局变量和函数的地方,就会用全局变量和函数的地址来代替,从而生成最后的可执行文件。怎么找到全局变量和函数的地址呢?在本文件中查找他们定义的位置即可获取地址。 问题来了,如果全局变量和函数,不是在本文件定义的,但我又想要用到他们怎么办呢? 直接调用是肯定不行滴,会报错的~ 这个时候就要用到extern关键字啦!在调用他们的函数前面声明时,添加extern关键字告知编译器去其他文件中找~当然,他们可不能被static修饰哦~原因见static关键字介绍————————————————————【问】介绍一下typedef关键字的作用【答】使用 typedef 关键字为复杂的数据类型另外定义一个简单的别名。可定义的类型为基本数据类型和自定义数据类型。【解析】功能 1.重定义一个易记且意义明确的新类型名。 查看标准库文件stdint.h,里面定义了很多这样的类型。 这样我们就不必再去思考short究竟是多少位的类型,直接使用int16_t,清晰明了~ 2.简化一些比较复杂的类型声明 在使用某些自定义的数据结构时,常使用typedef来简化声明。 比如结构体PersonData,如果我们要定义一个这样的指向该结构体的指针,需要struct PersonalData *MyDataPtr; 而使用typedef后只需要DataPtr MyDataPtr即可。typedef和define的区别原理不同:#define是预处理指令,预处理阶段;typedef是关键字,在编译阶段功能不同:#define是替换,typedef是别名连续定义变量时,typedef保证所有变量均为同一类型,而#define无法保证————————————————————更多内容,持续更新中!!!【觉得有用的小伙伴们可以订阅一下专栏,后续还有更多文章哦~ 😀 】作者其他专栏【嵌入式校招指南_完整学习路线】https://www.nowcoder.com/creation/manager/columnDetail/MWZkkj请帮忙点赞、评论+收藏,是对我最大的支持~感谢!!!
点赞 45
评论 5
全部评论
推荐
最新
楼层
还没有回复哦~
相关推荐
11-22 18:35
南京审计大学金审学院 审计
辞退了很喜欢的实习生,总结他3个“雷点”
实习生的“雷区”:那些你需要避开的坑最近我不得不辞退了一位实习生,虽然他很努力,也很会说话,但有些行为实在让人无法忍受。总结了他的几个“雷区”,希望大家引以为戒。1. 上班摸鱼可以,但别太嚣张大家都知道,上班时间玩手机属于“摸鱼”,但摸鱼也要有个度。这位实习生的工位就在我旁边,背后是老板。他居然敢翘着二郎腿,懒洋洋地靠在椅背上,手机举到肩膀高度,玩得不亦乐乎。你说,这是不是有点太嚣张了?摸鱼可以,但别让领导和老板看得一清二楚啊!2. 犯错不可怕,但要敢于承认工作中犯错是难免的,关键是要及时补救和复盘,避免再犯。这位实习生经常算错数据,商品价格也会搞错,交代的工作没有后续进展。更让人无语的是,他...
点赞
评论
收藏
分享
11-19 23:58
北京邮电大学 DFT工程师
找工作一定要注意的5种脏offer!
首先是接盘型offer,往往是因为前任离职,接手后压力山大。其次是填坑型offer,年底裁员的替代者,入职后可能面临再次被裁的风险。还有打杂型offer,工作琐碎,难以提升技能。短视型offer则是公司缺乏长远规划,随时可能面临倒闭。最后,薪资结构不合理的offer,看似高薪,实际却可能低于预期。希望我的意见能给大家一些警示,选择时一定要多加留意!
牛客创作赏金赛
点赞
评论
收藏
分享
10-18 13:02
西安理工大学 C++
回归0offer
牛课上学的话术是真爽
牛舌:
如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞
评论
收藏
分享
11-17 12:23
已编辑
四川音乐学院 营销
秋招已心碎,求改简历🥹知道学历是污点,但是已无力回天…当年山东高考超一本线四十分因为热爱跟爸妈吵架去了音乐学院…好在大学没闲着,一直认真学习,各种大厂实习实践参加活动,结果今年就业还是被打击惨了,到底问题出在哪里,为什么连初筛都过不了😭 #你的简历改到第几版了# #你的秋招简历被谁挂了?#
生科2102牛猫:
不是很懂,但感觉简历已经很优秀了,另外,你是我见过最美的牛客女孩
你的简历改到第几版了
你的秋招简历被谁挂了?
点赞
评论
收藏
分享
11-22 00:56
天津大学 汽车设计
2024史上最难毕业季
今年有1179万新毕业生涌入市场,竞争可谓异常激烈,大学生的平均就业率仅有55%。我时常感到焦虑,尤其是看到网上的数据:4667万的求职者,却只有350万的付费招聘客户。每一个offer都像是稀世珍宝,我还在努力争取中。没拿到offer的朋友们,别气馁,一定能找到寻找属于我们的机会!
缘愁似个长a:
55%很高了,四非硕信院签约率25%
牛客创作赏金赛
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
爱信等
9591
2
...
11.25校招&实习招聘信息汇总
6094
3
...
阿里云管培生开奖了
5776
4
...
阿里云VS腾讯VS华为,决赛圈
5041
5
...
秋招圆满结束
5033
6
...
华为开奖
4600
7
...
真心觉得25届的求职之路太艰难了
4366
8
...
总结一下鼠鼠找实习的历程
4344
9
...
放弃代码,结束秋招啦!
3751
10
...
offer比较的一些建议:互联网、银行、金融科技、国企、央企
3187
正在热议
#
25届秋招总结
#
299495次浏览
2648人参与
#
如果不工作真的会快乐吗
#
58950次浏览
515人参与
#
北方华创开奖
#
26444次浏览
285人参与
#
地方国企笔面经互助
#
3734次浏览
9人参与
#
美团求职进展汇总
#
1326839次浏览
12446人参与
#
选完offer后,你后悔学本专业吗
#
19735次浏览
143人参与
#
百度开奖
#
161564次浏览
970人参与
#
正在实习的你,几点下班
#
51704次浏览
387人参与
#
国央企薪资爆料
#
8095次浏览
67人参与
#
如何一边实习一边秋招
#
991946次浏览
12638人参与
#
提前批简历挂麻了怎么办
#
146370次浏览
1948人参与
#
学历or实习经历,哪个更重要
#
50899次浏览
402人参与
#
海康威视求职进展汇总
#
398694次浏览
3405人参与
#
米哈游求职进展汇总
#
175821次浏览
1458人参与
#
求职遇到的搞笑事件
#
70719次浏览
576人参与
#
投递实习岗位前的准备
#
1178994次浏览
18392人参与
#
面试体验感最好的是哪家?
#
85029次浏览
845人参与
#
实习生应该准时下班吗
#
167368次浏览
1159人参与
#
得物求职进展汇总
#
66172次浏览
682人参与
#
网申一定要掌握的小技巧
#
5311次浏览
53人参与
#
招聘要求与实际实习内容不符怎么办
#
10221次浏览
273人参与
#
0offer是寒冬太冷还是我太菜
#
897972次浏览
8009人参与
牛客网
牛客企业服务