最近一直在参加招聘,像富士康,高新兴,康冠,海康威视,以及各种中小厂,总结了以下几点经验和大家分享一下:
笔试:对于嵌入式方向,更多考的是c语言,像指针的运用,内存管理,数据结构与算法等等;我总结了以下几点常考的简答题:
1.malloc和new free和delete的区别:
new是操作符,malloc是函数;
new开辟内存失败抛出异常,malloc申请内存失败返回NULL;
new开辟的内存大小不需要指定,malloc需要指定;
new开辟的内存的类型会自动转换,不需要强转,malloc需要强转
delete用于释放new分配的空间,free用于释放malloc分配的空间。delete[] 用于释放new[] 分配的空间。
调用free之前需要检查需要释放的指针是否为空。调用delete则不需要。
2.static的用法:
static修饰局部变量时,表示这个局部变量存储在静态区,生命周期为整个源程序,只初始化一次,若没初始化则为0,作用域不变。
static修饰全局变量时,表示这个全局变量的作用域仅限于当前文件,别的文件不可调用。
static修饰函数时,表示这个函数的作用域仅限于当前文件,别的文件不可调用。
3.register用法
register修饰的变量,编译器会尽量将它分配在寄存器中,这样读写效率会高很多。适用于被频繁使用的变量,可以极大提高程序的运行效率。
编译器只能承诺尽量将register修饰的变量放在寄存器中,但不保证一定放在寄存器中,因为寄存器数量有限。
4.extern
extern主要用来声明全局变量,表示该变量是在别的文件中定义了,当前文件引用了这个变量。将来链接的时候会在别的.o文件中找到这个同名变量。
extern还可用来在全局变量定义点之前的函数中声明该全局变量,表明该变量是一个已经定义的外部变量,因此可以合法地使用该变量,之后在后面有定义即可。
extern还可用来修饰函数,表明该函数是外部函数,加不加都可。
5.volatile
volatile的字面意思是可变的、易变的。C中用colatile来声明一个变量,表示这个变量可以被编译器之外的东西改变,也就是说不是当前代码造成的改变。这样编译器就不会对这个变量作优化,每次用到时都到内存中或寄存器中去读取变量的值。
通常有三种情况需要加volatile:①中断服务子程序中引用的变量;②多线程中共用的变量;③硬件会改变的变量。
6.由源码到可执行程序的过程
预处理--汇编--编译--链接
7.什么是大小端模式,如何判断机器的大小端
大小端源自一本小说,最早在计算机通信领域应用,根据先发送高字节还是低字节区分大小端。
现在我们提到的大小端是指计算机存储系统的大小端,大端模式:一个变量的高字节存储在低地址;小端模式:一个变量的低字节存储在低地址。
判断方式:用union、指针+强制类型转换。
不可行方式:位与(&的时候一定是高字节&高字节)、移位(右移永远是将低字节移除)、强制类型转换(大小端模式没区别,int向char都是低字节赋值给char)。
8.const修饰指针的四种形式
constint *p;
int const *p;
int * const p;
const int *constp;
其中的P是有什么含义
另外还有链表的具体应用,16进制的&运算,用c语言写出strcpy的功能等等
指针的运用是重点!!
如果觉得《嵌入式软件开发工程师--笔试经验分享》对你有帮助,请点赞、收藏,并留下你的观点哦!