《2022年嵌入式研发工程师面试试题大全 .pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式研发工程师面试试题大全 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式研发工程师面试试题大全(ANSI CC+ 方面的知识)原创 嵌入式研发工程师面试试题大全(ANSI CC+ 方面的知识) 一 ANSI C/C+ 方面的知识1、简答题。1、 如何在 C 中初始化一个字符数组。逐个字符赋值:char s = A,B,C ,D; 字符串赋值: char s = “ABCD ”; 对于二维字符数组:char s210 = “ cheng” ,”jinzhou ”; 2、 如何在 C 中为一个数组分配空间。如果是栈的形式,Type sN定义后系统自动分配空间,分配的空间大小受操作系统限制;若是堆的形式,Type *s; s = (Type *)malloc(si
2、zeof(Type) * N); 分配的空间大小不受操作系统限制。3、 如何初始化一个指针数组。这里有必要重新对比一下指针数组与数组指针的差异。a. 指针数组:数组里存储的是指针。如: int * s 5 表示数组s 里存储了 5 个指向整型的指针。Char * s 3 = “aaaaa ”,”bbb”,”ccccc” 表示数组s里存储 3 个指向字符型的指针,分别指向字符串 aaaaa 、 bbb、ccccc。b. 数组指针:其实就是数组,里面存放的是数据。如: int ( * s ) 5 表示数组s 里存储了5 个整型数据。4、 如何定义一个有10 个元素的整数型指针数组。Int * s
3、10 ; 5、 s10的另外一种表达方式是什么。* ( s + 10 ) 二维数组S 5 8 的表示方法:*( *(s + 5) + 8 ) 7、 要使用 CHAR_BIT需要包含哪个头文件。Include limits.h 在该头文件里#define CHAR_BIT 8 8、 对(-1.2345)取整是多少?1 9、 如何让局部变量具有全局生命期。使用 Static,局部变量就存储在全局区(静态区),便具有全局的生命期和局部的访问控制。10、C 中的常量字符串应在何时定义?没有理解到题目的意思,我只是想说明一点,定义常量字符串后它属于const 型,不能去修改它,否则程序出错。11、如何在
4、两个 .c 文件中引用对方的变量。尚不清楚,望博友能告知,万分感谢!12、使用 malloc 之前需要做什么准备工作。定义一个指针后就可以malloc 了。13、realloc 函数在使用上要注意什么问题。Realloc 后返回的指针与之前malloc 返回的指针指向的地址不同。14、strtok 函数在使用上要注意什么问题。首次调用时, s 必须指向要分解的字符串,随后调用要把s 设成 NULL 15、gets函数在使用上要注意什么问题。这里要将Scanf( )、gets( )放在一起比较。Scanf( )是遇到空格就判断为输入结束,而 gets( )则遇到回车才判断为输入结束。16、C 语
5、言的词法分析在长度规则方面采用的是什么策略?尚不清楚,望博友能告知,万分感谢!17、a+b 所表示的是什么意思?有什么问题?根据自增运算符的右结合性,它是(a+)+(+b) 的意思,但有的编译器里省略括号就不能通过,同时也降低了程序可读性。18、如何定义Bool 变量的 TRUE 和 FALSE 的值。#define TRUE 1 #define FALSE 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 19、C 语言的
6、const 的含义是什么。在定义常量时,为什么推荐使用const,而不是 #define。Const 是只读的意思,它限定一个变量不允许被改变。#define 缺乏类型检测机制,在预处理时候有可能引发错误。Const 方面的其它知识扩展:问题 1:const 变量 & const 限定的内容下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?typedef char * pStr; char string4 = abc; const char *p1 = string; / *p1 作为整体不能被修改,但p1 可以修改, p1+合法const pStr p2 = string; /p2
7、作为一个整体,不能被修改,但是下面的p2+非法修改p1+; p2+; 问题 2:const 变量& 字符串常量请问下面的代码有什么问题?char *p = im hungry!; /定义的是字符串常量p0= I /不能修改字符串常量问题: const 变量& 字符串常量2 char a3 = abc 合法吗?使用它有什么隐患?没有考虑到字符串结束符0 ,所以会产生意想不到的错误。比如以下程序:int main() int i; char p6 = a,b,c,d,e,f; printf(%s,p); while(1); return 0; 运行后显示:abcdef 问题 3:const & 指
8、针类型声明中const 用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const 限定不可变的内容是什么?1)、 const 在前面a.const int nvalue ; /nvalue 是 const 把类型 int 撇开,变量nvalue 作为一个整体,因此nvalue 是 const 型;b.const char *pContent; /*pContent是 const, pContent 可变把类型 char 撇开,变量*pContent 作为一个整体,因此*pContent 是 const 型;c.const (char *) pContent;/pContent是 co
9、nst,*pContent 可变把类型 char * 撇开,注意这里(char * )是一个整体,而变量pContent 作为一个整体,因此pContent 是 const 型;d.char* const pContent; /pContent 是 const,*pContent 可变const 与变量间没有类型,变量pContent 作为一个整体,因此pContent 是 const 型;e.const char* const pContent; /pContent 和*pContent 都是 const 这里分为两层,外层:把类型char 撇开,变量* const pContent 作为一
10、个整体,因此* pContent 是 const 型;内层:没有类型,因此pContent 是 const 型。2)、 const 在后面,与上面的声明对等(这类型更容易判断) a. int const nvalue ; / nvalue 是 const const 与变量之间没有类型,const 后面那部分整体是const 型,因此nvalue 是 const 型b. char const * pContent;/ *pContent是 const, pContent 可变const 与变量之间没有类型,const 后面那部分整体是const 型,因此* pContent 是 const 型
11、c. (char *) const pContent;/pContent是 const,*pContent 可变名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - const 与变量之间没有类型,const 后面那部分整体是const 型,因此pContent 是 const 型d. char* const pContent;/ pContent 是 const,*pContent 可变const 与变量之间没有类型,const 后
12、面那部分整体是const 型,因此pContent 是 const 型e. char const* const pContent;/ pContent 和*pContent 都是 const 分为两层,外层:撇开类型char,const 后面那部分整体* const pContent 是 const 型,因此* pContent 是 const 型;内层: const 与 pContent 之间无类型,因此pContent 是 const 型。C+中 CONST C 中常用 :#define 变量名变量值定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理理在C+中成为可能引发错误
13、的隐患,于是引入const. const 使用 : 1. 用于指针的两种情况:const 是一个左结合的类型修饰符. int const *A; /A可变 ,*A 不可变int *const A; /A不可变 ,*A 可变2.限定函数的传递值参数: void function(const int Var); / 传递过来的参数在函数内不可以改变. 3.限定函数返回值型. const int function(); / 此时 const 无意义const myclassname function(); / 函数返回自定义类型myclassname. 20、C 语言的 volatile 的含义是什
14、么。使用时会对编译器有什么暗示。volatile 的本意是“易变的”由于访问寄存器的速度要快过RAM, 所以编译器一般都会作减少存取外部RAM 的优化,但有可能会读脏数据。当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。精确地说就是, 优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是 volatile 变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic v
15、ariables) 3). 多线程应用中被几个任务共享的变量嵌入式系统程序员经常同硬件、中断、RTOS 等等打交道,所用这些都要求volatile 变量。不懂得volatile 内容将会带来灾难。Volatile 的完全扩展:1). 一个参数既可以是const 还可以是volatile 吗?解释为什么。是的。一个例子是只读的状态寄存器。它是volatile 因为它可能被意想不到地改变。它是const 因为程序不应该试图去修改它。2). 一个指针可以是volatile 吗?解释为什么。是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer 的指针时。3). 下面的函数有
16、什么错误:int square(volatile int *ptr) return *ptr * *ptr; 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr 指向值的平方,但是,由于*ptr 指向一个volatile 型参数,编译器将产生类似下面的代码:int square(volatile int *ptr) int a,b; a = *ptr; b = *ptr; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - r
17、eturn a * b; 由于 *ptr 的值可能被意想不到地该变,因此 a 和 b 可能是不同的。 结果,这段代码可能返不是你所期望的平方值!正确的代码如下:long square(volatile int *ptr) int a; a = *ptr; return a * a; 更多精彩内容请登陆:www.re- RE.ER 嵌入式研究与推广中心园你高薪就业梦想咨询电话:(86-028)85176515 800 免费电话: 800-886-3788 QQ 咨询: 903560835 地址:成都市高新区高朋大道3 号东方希望大厦B 座 218-222 室发帖者 IP:222.209.221.234 发表时间 :2008 年 5 月 27 日 15:14:48 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -