嵌入式-面试题

上传人:小** 文档编号:54392294 上传时间:2018-09-12 格式:DOC 页数:37 大小:56.04KB
返回 下载 相关 举报
嵌入式-面试题_第1页
第1页 / 共37页
嵌入式-面试题_第2页
第2页 / 共37页
嵌入式-面试题_第3页
第3页 / 共37页
嵌入式-面试题_第4页
第4页 / 共37页
嵌入式-面试题_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《嵌入式-面试题》由会员分享,可在线阅读,更多相关《嵌入式-面试题(37页珍藏版)》请在金锄头文库上搜索。

1、1嵌入式嵌入式- -面试题面试题1.求下面函数的返回值(微软)求下面函数的返回值(微软) 1. int func(x)2. 3. int countx = 0;4. while(x)5. 6. countx +;7. x = x8. 9. return countx;10. 假定假定 x = 9999. 答案:答案:8 思路:将思路:将 x 转化为转化为 2 进制,看含进制,看含有的有的 1 的个数。的个数。2. 什么是什么是“引用引用”?申明和使用?申明和使用“引用引用”要注意哪些问题?要注意哪些问题?答:引用就是某个目标变量的答:引用就是某个目标变量的“别名别名”(alias) ,对应用的

2、,对应用的操作与对变量直接操作效果完全相同。申明一个引用的时操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再标变量名有两个名称,即该目标原名称和引用名,不能再2把该引用名作为其他变量名的别名。声明一个引用,不是把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存个别名,它本身不是一种数据类型,因此引

3、用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的储单元,系统也不给引用分配存储单元。不能建立数组的引用。引用。3. 将将“引用引用”作为函数参数有哪些特点?作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。这时,)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用

4、传递函数的参数,在内存中并没有产生实)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。用比用一般变量传递参数的效率和所占空间都好。 (3)使用指针作为函数的

5、参数虽然也能达到与使用引用的)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用且需要重复使用”*指针变量名指针变量名” 的形式进行运算,这很容的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。使用,更清晰。34. 在什么时候需要使用在什么时候需要使用“常引用常引用”?如果既要利用引用提高程序的效率,又

6、要保护传递给函如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声数的数据不在函数中被改变,就应使用常引用。常引用声明方式:明方式:const 类型标识符类型标识符 2. const int 3. ra=1; /错误错误4. a=1; /正确正确例例 21. string foo( );2. void bar(string 那么下面的表达式将是非法的:那么下面的表达式将是非法的: 1. bar(foo();2. bar(“hello world”);原因在于原因在于 foo( )和)和”hello world”串都会产生一个临时对串都会产生一个临时

7、对象,而在象,而在 C+中,这些临时对象都是中,这些临时对象都是 const 类型的。因此上类型的。因此上面的表达式就是试图将一个面的表达式就是试图将一个 const 类型的对象转换为非类型的对象转换为非const 类型,这是非法的。类型,这是非法的。引用型参数应该在能被定义为引用型参数应该在能被定义为 const 的情况下,尽量定义的情况下,尽量定义为为 const .5. 将将“引用引用”作为函数返回值类型的格式、好处和需要遵作为函数返回值类型的格式、好处和需要遵守的规则?守的规则?4格式:类型标识符格式:类型标识符 3. int vals10;4. int error=-1;5. voi

8、d main()6. 7. put(0)=10; /以以 put(0)函数值作为左值,等价于函数值作为左值,等价于 vals0=10;8. put(9)=20; /以以 put(9)函数值作为左值,等价于函数值作为左值,等价于 vals9=20;9. cout10. cout11. 12. int 2. Class B : Class A.;3. B b;4. A7. “引用引用”与指针的区别是什么?与指针的区别是什么?指针通过某个指针变量指向一个对象后,对它所指向的指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引变量间接操作。程序中使用指针,

9、程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是上面提到的对函数传量的操作。此外,就是上面提到的对函数传 ref 和和 pointer的区别。的区别。8. 什么时候需要什么时候需要“引用引用”?流操作符流操作符、赋值操作符、赋值操作符=的返回值、拷贝构造函数的参的返回值、拷贝构造函数的参数、赋值操作符数、赋值操作符=的参数、其它情况都推荐使用引用。的参数、其它情况都推荐使用引用。9. 结构与联合有和区别?结构与联合有和区别?71. 结构和联合都是由多个不同的数据类型成员组成,结构和联合都是由多个不同的数

10、据类型成员组成, 但但在任何同一时刻,在任何同一时刻, 联合中只存放了一个被选中的成员(所联合中只存放了一个被选中的成员(所有成员共用一块地址空间)有成员共用一块地址空间) , 而结构的所有成员都存在而结构的所有成员都存在(不同成员的存放地址不同)(不同成员的存放地址不同) 。 2. 对于联合的不同成员对于联合的不同成员赋值,赋值, 将会对其它成员重写,将会对其它成员重写, 原来成员的值就不存在了,原来成员的值就不存在了,而对于结构的不同成员赋值是互不影响的。而对于结构的不同成员赋值是互不影响的。10. 下面关于下面关于“联合联合”的题目的输出?的题目的输出?a) 1. include 2.

11、union3. 4. int i;5. char x2;6. a;7. void main()8. 9. a.x0 = 10;10. a.x1 = 1;11. printf(“%d”,a.i);12. 答案:答案:266 (低位低地址,高位高地址,内存占用情况(低位低地址,高位高地址,内存占用情况是是 Ox010A)b) 1. main()82. 3. union /*定义一个联合定义一个联合*/4. int i;5. struct /*在联合中定义一个在联合中定义一个结构结构*/6. char first;7. char second;8. half;9. number;10. number

12、.i=0x4241; /*联合成员赋值联合成员赋值*/11. printf(“%c%cn”, number.half.first, mumber.half.second);12. number.half.first=a; /*联合中结构成员赋值联合中结构成员赋值*/13. number.half.second=b;14. printf(“%xn”, number.i);15. getch();16. 答案:答案: AB (0x41 对应对应A,是低位;,是低位;Ox42 对应对应B,是高位)是高位)6261 (number.i 和和 number.half 共用一块地址空间)共用一块地址空间)

13、11. 已知已知 strcpy 的函数原型:的函数原型:char *strcpy(char 9*strDest, const char *strSrc)其中)其中 strDest 是目的字符串,是目的字符串,strSrc 是源字符串。不调用是源字符串。不调用 C+/C 的字符串库函数,请编的字符串库函数,请编写函数写函数 strcpy.答案:答案:1. char *strcpy(char *strDest, const char *strSrc)2. 3. if ( strDest = NULL | strSrc = NULL)4. return NULL ;5. if ( strDest =

14、 strSrc)6. return strDest ;7. char *tempptr = strDest ;8. while( (*strDest+ = *strSrc+) != 0);9. return tempptr ;10. 12. 已知已知 String 类定义如下:类定义如下:1. class String2. 3. public:4. String(const char *str = NULL); / 通用构造函数通用构造函数5. String(const String / 拷贝构造函数拷贝构造函数6. String(); / 析构函数析构函数7. String / 赋值函数赋值

15、函数108. private:9. char *m_data; / 用于保存字符串用于保存字符串10. ;尝试写出类的成员函数实现。尝试写出类的成员函数实现。答案:答案: 1. String:String(const char *str)2. 3. if ( str = NULL ) /strlen 在参数为在参数为 NULL 时会抛时会抛异常才会有这步判断异常才会有这步判断4. 5. m_data = new char1 ;6. m_data0 = 0 ;7. 8. else9. 10. m_data = new charstrlen(str) + 1;11. strcpy(m_data,str);12. 13. 14. String:String(const String 17. strcpy(m_data,other.m_data);1118. 19. String23. delete m_data; /删除原来的数据,新开一块内删除原来的数据

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号