单片机岗位常见面试问题——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等等

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-13 18:13
小黑盒 硬件开发 9 硕士985
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务