单片机岗位常见面试问题——C语言(2)

一、#define 与 const区别

二、typedef与#define区别

typedef与define都是替一个对象取一个别名,以此来增强程序的可读性

三、指针

指针是C语言中一种特殊的变量,它可以存储另一个变量的内存地址。通过指针,可以间接地访问或修改内存中的数据,而不需要知道它们的具体位置。

1.函数指针

如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。

实例:

①用作回调函数(比如串口中断接收过程中,用一个回调函数把接收到的数据传出去处理,保证中断快进快出)

②多态的实现(比如定义一个简单的驱动框架结构体,包含初始化、发送和接收的函数指针,我们只需要分别实现串口和I2C等通信协议的三个接口,需要用到哪个时直接把该协议的接口赋给对应函数指针就可以使用,可以实现灵活的驱动管理)

③多态同一操作用于不同的对象,可以表现出不同的行为 )

2.指针函数

首先它是一个函数,只不过这个函数的返回值是一个地址值。

实例:

malloc函数(void *malloc(size_t size);)用于动态分配一块内存,它返回一个void*类型的指针,指向被分配内存的起始位置。

3.数组和指针的区别与联系

①区别:

②联系:

数组名会“退化”为指向数组第一个元素的指针,数组名是一个指针常量,数组名可以在许多情况下作为指针来使用。可以通过指针来访问数组元素,这使得数组和指针在有些操作上表现得非常相似。

4.野指针

①概念

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)。

②原因

指针未初始化

③指针越界访问

当指针指向的范围超出数组arr的范围时,p就是野指针

④指针指向的空间释放

⑤危害

使用野指针可能导致程序崩溃、数据损坏、系统不稳定等严重问题

⑥解决办法

1、尽量规避它: 初始化指针 、使用前检查指针有效性(在使用指针之前,用assert检查其是否为 NULL 或指向有效的内存地址 )、释放内存后将指针置为 NULL:在释放(free)指针所指向的内存后,将指针设置为 NULL,以避免再次使用已经释放的内存。

2、发生了如何检测: coredump复原现场检查( 可以使用 ulimit 命令来启用 core dump,如果程序因野指针崩溃,系统会创建一个 core dump 文件,查看崩溃时的堆栈信息,找到导致崩溃的函数调用)、还可以用asan来检测(缓冲区溢出、释放后使用)#通信硬件知识分享#

单片机岗位必备八股知识 文章被收录于专栏

包括c语言常见知识和语法,数据结构,通信协议,STM32,计算机体系结构和硬件,freertos等等

全部评论

相关推荐

boss投递,4.24面试,两位面试官Part1:自我介绍 说熟悉C++就开始问C++相关问题Part2:八股拷打1.什么是设计模式,你有用过或者有涉及过哪种设计模式?2.C++11STL容器有哪些?讲一下vector实现的底层逻辑,vector和list的区别,如何实现vector功能而不让他扩容?3.讲讲C++的继承,结构体、类和联合体异同优劣。4.Linux进程与线程的区别?5.什么是原子操作,i++是原子操作吗?为什么?vector是线程安全的数据类型吗?6.讲一下你对堆和栈的理解,分别有什么需要注意的?(涉及new malloc 内存碎片)7.像你刚才提到的堆内存碎片,有什么方法可以解决吗?8.什么是内存泄漏,在调试程序过程中遇到内存泄漏你怎么定位故障点?知道什么是core dump吗?9.gdp调试的常用方法;10.了解TCP吗?(三次握手四次挥手)为什么是3,4?讲一下TCP,UDP,各自特点,优劣,适用场景;11.TCP流量控制和阻塞控制;12.https和http是TCP吗?哪个更安全?如何保证安全性?13.如果想要搭建一个server和client,(Linux环境下),需要哪些步骤分别用到哪些方法和使用的注意点?14.系统调用整体流程;15.你简历中的项目的功能是怎么实现的?解决了什么问题?Part3:聊天:如何看待卓驭,我们工作压力会比较大,平常有什么爱好,如何排解压力;反问:工作内容是否如网上所说大量正向文档?会有开发任务吗?资料权限?实习生工作强度?4.25没信应该是无了,搭建server一个月没看,只能支支吾吾
debugj:你是啥时候投递的 我一直还在简历筛选
查看34道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务