本人呕心沥血制作,经历6次面试所遇的题目,基本上在这个上面,主要面试的是c/c++软件工程师,希望对大家有所帮助。下面。
一c语言部分。
1、问:在嵌入式开发中,为什么能通过c语言去直接操作硬件?
答:因为有指针,指针是c语言的灵魂,他可以直接访内存。
2、问:链表的作用?
答:用于内存管理,链表节点中的指针域可以将不连续的内存彼此关联起来,从而实现内存的动态管理。
3、问:什么变量不能用指针指向?
答:寄存器变量(register修饰),因为这个变量会优先选择存放到cpu寄存器中,而指针只能指向内存的任务区域,但不能指向寄存器。
4、问:有符号字符型和无符号字符型变量的最大值和最小值分别是多少(十六进制多少),为什么?
答:有符号(-128——127,-0x80——0x7f);无符号(0——255,0——0xff)
5、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。
6、全局变量和局部变量的区别。
全局变量,储存在静态区。进入main函数之前就被创建。生命周期为整个源程序。
局部变量,在栈中分配。在函数被调用时才被创建。生命周期为函数内。
7、头文件中的ifndef/define/endif干什么用?
防止重复包含。
#include<>和#include“有什么区别?
#include<>:告诉预处理器在标准系统目录中寻找文件。
#include“""告诉预处理器先在当前目录中寻找文件,找不到则再在。
标准目录下寻找文件。
9、const有什么用途?(请至少说明两种)
1)定义const常量。
2)const可以修饰函数的参数、返回值,甚至函数的定义体。
被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
/指向常整形数的指针变量。
const char* p1 = name;//指针所指向的内容不能变,指针指向的地址可变。const char *p; /和char const *p
/指向整形数的常指针。
char* const p2 = name;//地址不可变,内容可变。
/指向常量的常指针。
const char *const name="chen";/地址不变,内容不变。
10.数组与链表的区别。
数组中的数据在内存是顺序存储的,插入需要移动很多值。
由于链表是随机存储的,链表访问需要遍历。
11 、内存的分配:
1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) ―一般由程序员分配释放, 若程序员不释放,程序结束时可能由os** 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 -程序结束后有系统释放。
4、文字常量区 ―常量字符串就是放在这里的。 程序结束后由系统释放。
5、程序**区― 存放函数体的二进制**。
12、sizeof和strlen()的区别。
参***: sizeof是运算符,计算数据所占的内存空间;strlen()是一个函数,计算字符数组的字符数;
sizeof可以用类型作参数;strlen()只能用char*作参数,必须是以’/0’结束。
数组做sizeof的参数不退化,传递给strlen就退化为指针了;
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现建立的最大对象的字节大小。
13、在c++ 程序中调用被c 编译器编译后的函数,为什么要加extern“c”?
答:c++可以重载,c语言不可以被重载,c++函数提供了c语言连接交换指定函数extern“c”来解决名字问题。
14.头文件的作用是什么?
答:1.通过头文件调用库。
2、实现安全检查。
15、头文件中的ifndef/define/endif的作用?
答:防止头文件被重复引用。
16、如果一个header头文件要被多个源文件同时#include,如何避免对header中变量的重复定义?
答:在某个源文件中对变量定义,在header中仅对变量进行声明,即前面加extern;
16、分别写出bool,int,float,指针类型的变量a 与“零”的比较语句。
答:bool :if ( a ) or if(a)
int :if ( a ==0)or(a!=0)
float :const epssion 0.000001
if(x>=-epssion)&&x<=epssion)
pointer : if ( a !=null) or if(a ==null)
17、 const与#define相比有何优点。
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而#define只作简单的字符串替换,无类型安全检查。
const检查定的类型,如 const float pi = 3.141592653,实际的pi是3.141593,因为float类型的有效位限制。
const在编译时分配存储空间;而#define在预编译时编译,不分配存储空间。
有些集成化的调试工具可以对const进行调试,但不能对宏进行调试。
18.简述数组与指针的区别?
数组要么在静态存储区被创建(全局数组),要么在栈上被创建。
指针可以随时指向任意类型的内存块。
19.变量的声明和定义有什么区别?
答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。
20. 解释堆和栈的区别。
答:堆(heap)——一般由程序员分配释放,若程序员不释放,程序结束时可能由os**。
栈(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。
注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。速度比较慢,而且容易产生内存碎片,不过用起来最方便。
21、一个指针可以是volatile吗?
可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例子:
子中断服务子程序修改一个指向buff的指针时,必须用volatile
22、内存的分配方式的分配方式有几种?
答:1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。
2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
23、.函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
24. 嵌入式系统中经常要用到无限循环,你怎么样用c编写死循环呢?
答:while(1){}
loop:goto loop;
25、关键字static的作用是什么?((1)用于全局变量;(2)用于局部变量;(3)用于函数)
在c语言中,关键字static有三个明显的作用:
static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量只被初始化一次,下一次依据上一次结果值;
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝;
26、什么是预编译,何时需要预编译:
、总是使用不经常改动的大型**体。
、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
27、结构与联合有和区别?
1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而。
结构的所有成员都存在(不同成员的存放地址不同)。
2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。
28、简述什么是值传递,什么是地址传递,两者区别是什么?
参***:值传递主调函数传递给被调函数的是值的拷贝,不是原值;
地址传递主调函数传递给被调函数的是值的地址。
区别是值传递被调函数中的操作不改变主调函数的值,而地址传递则不同。
30、比较union和struct的不同;
在分配空间时,union中的各个域的空间是重叠的,struct中的各个域的空间是不重叠的。
31、操作系统的内存分配一般有哪几种方式,各有什么优缺点?
定长和变长。
变长:内存时比较灵活,但是易产生内存碎片。
定长:灵活性差,但分配效率较高,不会产生内存碎片。
32、操作系统的致命错误有哪些?
致命错误主要包括启动配置错、内部资源耗尽和各种其它类型的不可恢复性错误。
32、关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪**或者文字描述)。
用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。
建议使用volatile变量的场所:
1)并行设备的硬件寄存器。
2)一个中断服务子程序中会访问到的非自动变量(全局变量)
3)多线程应用中被几个任务共享的变量。
外企面试英语必考题版本
想在英语面试中给面试官留下一个非常好的印象吗?首先要听懂对方的问题。为了避免误解面试官的问题,我们为你准备了一张问题清单,不妨先来看看。tell us about yourself.这是一个有关你个性 背景 学习以及工作经历的非常宽泛的问题。你可以准备一个简洁的回答。why should we hi...
小升初数学必考题型
2018年小升初数学必考题型。同学们在复习小升初数学科目时,要熟悉考试的科目试题类型,明确备考的方向和重点,才能进行有针对性地备考,下面为大家搜索整理了关于2018年小升初数学必考题型,欢迎参考借鉴。一 计算。1.四则混合运算繁分数 运算顺序。分数 小数混合运算技巧一般而言 加减运算中,能化成有限小...
必修五必考题型汇总
高二文科期中模压复习。一我该具备哪些能力?三角模块。1,公式的熟练程度 重点公式 2对公式的简单的使用。1在中,三边 所对的角分别为 已知,的面积s 则。2在 abc中,若,则 a a b c d 3,a,b,c为 abc的三边,其面积s abc 12,bc 48,b c 2,求a 3,必须熟练的题...