嵌入式八股文记录

1、指针函数和函数指针

函数指针:指向一个函数的指针

指针函数:一个函数的返回值是一个指针的函数

2、指针的大小

char* int* float*

指针的大小和编译器的位数有关,在32bit(x86)的系统下指针的大小是4个字节,在64bit(x64)的系统下指针是8个字节

指针的大小是固定的和指针的类型没有关系

3、sizeof和strlen的区别

        sizeof:运算符,关键字。计算数据类型/变量所占存储空间的大小(字节数)。

        strlen:函数。计算字符串长度。

        (1)sizeof是一个运算符,strlen是一个函数,包含string.h

        (2)sizeof计算的是所占内存的大小(/0需要计算),strlen计算的是字符串的长度(字符串以/0结尾,/0是不需要计算长度的)

        (3)strlen一般用于字符串的长度,sizeof可以计算int float类型的大小

        (4)计算时间:sizeof在编译期,strlen在运行期

4、c语言内存分配的方式

(1)静态存储器分配,例如全局变量,静态变量

(2)栈上分配(函数中定义出的局部变量)

(3)堆上分配(malloc,new)

5、数组指针和指针数组

(1)数组指针:指的是指向数组的指针,本质是一个指针

int (*p)[10];//数组指针的声明

(2)指针数组:本质是一个数组,里面的每一个元素都是指针

int* a,a1,a2;
int* p1[10]={a,a1,a2};//指针数值

6、struct结构体和union联合体区别

union 联合体:所有成员共享一块地址。

                        大小计算:共用体大小 = 成员中占内存最大的成员的大小。

struct 结构体:不同的成员放在不同的地址中。

                        大小计算:结构体大小 = 所有成员大小之和(字节对齐)。

7、野指针

野指针:指向不可用内存的指针

为什么会导致野指针:

        (1)当指针被创建的时候,没有赋值这个时候指针就成为了野指针

char* p;

        (2)当指针被free或delete后,如果没有把指针赋值为NULL,这个时候指针也是野指针

#include <malloc.h>
char* p1 = malloc(10);
free(pl);

        (3)当指针越界的时候也是野指针(经常出现在数组里面)

8、数组和链表的区别

        (1)数组的地址空间是连续的,链表的地址空间是不连续的

        (2)数组的访问速度比较快,数组直接通过下标访问,访问链表的时候需要遍历链表

        (3)链表增删查改的速度比数组快

9、宏函数注意点

写一个宏,这个宏返回输入参数比较小的一个

#define MIN(a,b) ((a)<=(b) ? (a):(b))//每个参数都要加一个括号

10、#include<>和#include""的区别

(1)#include<>:编译器会从标准库的路径里面去搜索,对于搜索标准库的文件速度会比较快

(2)#include"":编译器会从用户的工作路径里面去搜索,对于自己定义的文件使用“”的速度会比较快

11、全局变量和局部变量的区别

(1)作用域:全局变量的作用域为程序块,局部变量的作用域是当前函数内部

(2)生命周期:全局变量的生命周期是整个程序,局部变量的生命周期是当前的函数

(3)存储方式:局部变量存储在栈里面的,全局变量存储在全局数据区中

(4)使用方式:全局变量在程序的各个部分都可以使用到,局部变量只能在函数的内部区使用

12、#define和typedef的区别

(1)define是一个预处理指令,typedef是关键字

(2)define不会做正确性检查,直接进行替换,typedef会做正确性检查

(3)define没有作用域的限制,typedef是有作用域的限制

(4)对指针的操作不同,一般使用typedef对指针进行重命名

13、static的作用

用来定义一个静态变量或者是静态函数

(1)在函数体中使用static去定义变量,那么这个变量只会被初始化一次

void fun(void)
{
    static int a=0;//只会被执行一次
    a++;
}

(2)定义的静态函数或者是静态变量只能在当前文件中使用(作用域的限制)

(3)在函数内部定义的静态变量无法被其他函数使用

14、内存泄漏

内存泄漏指的是在程序运行的时候,动态分配的空间没有被回收或者是正确释放,导致了这个内存空间仍然占据着系统的资源

15、内存对齐

内存对齐是在存储数据时,将数据按照一定的规则放置在内存中的过程

typedef struct
{
    char a;//1
    short c;//2
    int d;//4
    double b;//8
}STU;

以最大的变量所占据的内存来进行分配内存空间

16、数组名和指针的区别

 (1)数组名就是数组首元素的地址,也可以看作一个常量指针,这个指针是不能修改指向的,内存访问为4个字节

(2)使用指针访问数组的时候需要使用到解引用使用*,使用指针访问数组是间接访问,使用数组名访问数组是直接访问

(3)使用sizeof对指针和数组名进行计算的时候也是不同的,指针的大小和编译器的位数有关,使用sizeof计算数组名是整个数组的大小

17、指针常量和常量指针

常量指针:指向一个常量的指针,这个指针无法修改所指向的数据,但是可以修改指向

int a =5;
int b =6;

const int *p = &a;
p=&b;

指针常量:指针是一个常量,指针所指向的地址是固定的,但是可以修改地址中的值

int* const pl = &a;
*pl =
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
嵌入式C语言八股文是指在嵌入式系统开发中常见的基本知识点和技能要求的简要总结。下面是嵌入式C语言八股文的主要内容: 1. 数据类型:包括基本数据类型(如int、char、float等)和派生数据类型(如数组、结构体、枚举等),掌握各种数据类型的使用方法和特点。 2. 运算符:熟悉各种算术运算符、逻辑运算符、位运算符等,掌握它们的优先级和结合性,能够正确使用运算符完成各种计算任务。 3. 控制语句:包括条件语句(if-else语句)、循环语句(for、while、do-while循环)、选择语句(switch-case语句)等,掌握这些语句的使用方法和注意事项。 4. 函数:了解函数的定义和调用,能够编写函数并正确使用函数参数和返回值,理解函数的作用域和生命周期。 5. 数组和指针:掌握数组和指针的定义和使用,了解数组和指针在内存中的存储方式,能够通过指针进行数组的访问和操作。 6. 文件操作:了解文件操作的基本流程,包括文件的打开、读写和关闭,理解文件指针和文件访问模式的概念。 7. 中断处理:了解中断的基本概念和原理,能够编写中断服务程序(ISR)并正确处理中断请求。 8. 程序调试:掌握常用的调试技巧和工具,能够使用调试器进行程序的单步执行、观察变量值等操作,能够分析程序运行过程中的错误和异常。 以上是嵌入式C语言八股文的主要内容,掌握这些知识和技能,可以帮助你在嵌入式系统开发中更好地应对各种任务和挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值