嵌入式考点(面试总结)
说明:考点都是从面试题目中总结出来,会不停的面试不停的更新,协议方面的会放到另外一篇文章。
1.大小端问题(首当其冲,大疆和很多公司都会考)
大端模式:数据的高字节保存在低地址当中,低字节保存在高地址当中。和我们看数字的习惯一样。
小端模式:数据的高字节保存在高地址当中,低字节保存在低地址当中。
unsigned int value = 0x12345678
上面的数用数组来表示
大端模式
小端模式
数据以小端模式存放, 下面程序的运行结果是a.i = union{ int i; char x[2]; }a; void main(){ a.x[0] =10; a.x[1] =1; printf("%d",a.i); }
这是一道真题,因为是一个共同体结构体,i的地址和x[]是公用的,按照题目和上面的例子,x[0]是低地址存的是i的低位,x[1]是高地址存的是i的高位,所以i=0x1A=26
注意:Intel的80x86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端。对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端,STM32F407也是小端(可以自己调整的)(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。
2.指针指向变量问题
若已定义a为int类型变量,则对指针P的正确说明和初始化的是()
A.int p=a B.int *p=a C.int p=&a D.int *p =&a
//指针所指向的是变量的地址,所以上面明显选D,因为是在定义中指向*p代表的是指向的地址而不是值 int a = 100; int *p_a = &a;
还有一题:
用C语言定义一个指向有10个整形数数组的指针?
int *p=new int[n]; 或者 int a[10]; int *p=a;
3.转义字符
设有语句char a =‘\72’,则变量a=()
A.包含1个字符 B.包含2个字符 C.包含3个字符 D. 说明不合法
答:\是转义符,表示a当中存储的是8进制数72对应的ASCII码字符 “:”,因此只有一个字符选A
4.共同体结构体大小问题
//假设char型变量占一个字节的存储单元, int型变量占两个字节的存储单元,float型变量占四个字节的存储单元,若有定义: union { int i; char ch; float f; }x; 则联合变量x在内存中所占字节数为( )。 A. 7 B. 5 C. 6 D. 4
5.如何在C++代码中包含非系统C头文件?
如果在C++系统中使用一个非系统提供的c头文件时,需要将#include代码用extern “C”{}包含起来,这个声明告诉C++编译器,包含在内的是C函数的头文件。
//C++ 代码 extern "C" { //get declaration for f(int i, char c, float x) #include "my-c-code.h" } int main() { f(7, 'x', 3.14); //正常调用 }
6.static的作用:常用来修饰变量。
这个说的不错
https://blog.csdn.net/zzyzgg/article/details/89842744
(1)修饰局部变量
static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)
(2)修饰全局变量
全局变量本来就存储在静态区,因此static并不能改变其存储位置。但是,static限制了其链接属性。被static修饰的全局变量只能被该包含该定义的文件访问(即改变了作用域)。
(3)修饰函数
static修饰函数使得函数只能在包含该函数定义的文件中被调用。对于静态函数,声明和定义需要放在同一个文件夹中。
(4) 修饰成员变量
用static修饰类的数据成员使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象,所有的对象都只维持同一个实例。 因此,static成员必须在类外进行初始化(初始化格式:int base::var=10;),而不能在构造函数内进行初始化,不过也可以用const修饰static数据成员在类内初始化。
(5)修饰成员函数
用static修饰成员函数,使这个类只存在这一份函数,所有对象共享该函数,不含this指针,因而只能访问类的static成员变量。静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。例如可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);还可以实现某些特殊的设计模式:如Singleton;