华为C++面试题

上传人:re****.1 文档编号:458507588 上传时间:2023-09-18 格式:DOCX 页数:13 大小:26.56KB
返回 下载 相关 举报
华为C++面试题_第1页
第1页 / 共13页
华为C++面试题_第2页
第2页 / 共13页
华为C++面试题_第3页
第3页 / 共13页
华为C++面试题_第4页
第4页 / 共13页
华为C++面试题_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《华为C++面试题》由会员分享,可在线阅读,更多相关《华为C++面试题(13页珍藏版)》请在金锄头文库上搜索。

1、(一) 初级题1. 什么是预编译,何时需要预编译:答:(1) 总是使用不经常改动的大型代码体(2) 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种 情况下,可以将所有包含文件预编译为一个预编译头2. char * const pchar const * pconst char *p 上述三个有什么区别?答:char * const p; 常量指针,p的值不可以修改char const * p; 指向常量的指针,指向的常量值不可以改const char *p;和 char const *p3.char str1 = abc;char str2 = abc;const

2、 char str3 =abc;const char str4 =abc;const char *str5 = abc;const char *str6 = abc;char *str7 =abc;char *str8 =abc;cout ( str1 = str2 ) endl;cout ( str3 = str4 ) endl;cout ( str5 = str6 ) endl;cout ( str7 = str8 ) endl;结果是:0 0 1 1 st门,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们 指向相同的常量

3、区域。4. 以下代码中的两个 sizeof 用法有问题吗?void UpperCase( char str )/ 将 str 中的小写字母转换成大写字母for( size_t i=0; isizeof(str)/sizeof(str0); +i )if( a=stri & stri=z )stri -= (a-A );char str = aBcDe;cout str 字符长度为: sizeof(str)/sizeof(str0) endl;UpperCase( str );cout str (Y)?(Y):(X) /结尾没有;10.嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。答:w

4、hile(1)或者 for(;)11.关键字static的作用是什么? 答:定义静态变量12.关键字const有什么含意? 答:表示常量不可以修改的变量。13. 关键字 volatile 有什么含意?并举出三个不同的例子? 答:提示编译器对象的值可能在编译器未监测到的情况下改变。14. int (*s10)(int) 表示的是什么啊?答:int (*s10)(int)函数指针数组,每个指针指向一个int func(int param)的函数。15. 有以下表达式:int a=248; b=4; int const c=21; const int *d=&a;int *const e=&b; i

5、nt const *f const =&a;请问下列表达式哪些会被编译器禁止?为什么?答: *c=32; d=&b; *d=43; e=34; e=&a; f=0x321f;16. 交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;答:有两种解法,一种用算术算法,一种用A(异或)a = a + b;b = a - b;a = a - b;ora = aAb;/ 只能对 int,char.b = aAb;a = aAb;ora A= b A= a;17.#include#include void getmemory(char *p)p=(char *) malloc(

6、100); strcpy(p,hello world);int main( )char *str=NULL; getmemory(str); printf(%s/n,str); free(str);return 0;答:程序崩溃,getmemory中的malloc不能返回动态内存,free()对str操作很危险18. 列举几种进程的同步机制,并比较其优缺点。 答:原子操作、信号量机制、自旋锁、管程、会合、分布式系统20. 进程之间通信的途径答:共享存储系统、消息传递系统、管道:以文件系统为基础21. 进程死锁的原因和4 个必要条件答:资源竞争及进程推进顺序非法;互斥、请求保持、不可剥夺、环路2

7、2. 死锁的处理答:鸵鸟策略、预防策略、避免策略、检测与解除死锁23. 操作系统中进程调度策略有哪几种?答:FCFS(先来先服务),优先级,时间片轮转,多级反馈24. 类的静态成员和非静态成员有何区别?答:类的静态成员每个类只有一个,非静态成员每个对象一个25. 纯虚函数如何定义?使用时应注意什么? 答:virtual void f()=0;是接口,子类必须要实现26. 数组和链表的区别答:数组:数据顺序存储,固定大小链表:数据可以随机存储,大小可动态改变27. ISO的七层模型是什么? tcp/udp是属于哪一层? tcp/udp有何优缺点? 答:应用层、表示层、会话层、运输层、网络层、物理

8、链路层、物理层 tcp/udp 属于运输层TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于 UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少 tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好 udp: 不提供稳定的服务,包头小,开销小28. (void *)ptr和(*(void*)ptr的结果是否相同?其中ptr为同一个指针 答: (void *)ptr 和(*(void*)ptr值是相同的29.int main()int x=3;printf(%d,x)

9、;return 1; 问函数既然不会被其它函数调用,为什么要返回1?答:main中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息30.要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000 = 1234;那么要是 想让程序跳转到绝对地址是 0x100000 去执行,应该怎么做?答: *(void (*)( )0x100000 ) ( );首先要将0x100000强制转换成函数指针,即:(void (*)()0x100000。然后再调用它:*(void (*)0)0x100000)();用typedef可以看得更直观些:typedef voi

10、d(*)() voidFuncPtr;*(voidFuncPtr)0x100000)();31. 已知一个数组table,用一个宏定义,求出数据的元素个数答:#define NTBL#define NTBL (sizeof(table)/sizeof(table0)32. 线程与进程的区别和联系?线程是否具有相同的堆栈? dll是否有独立的堆栈? 答:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时 候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。DLL中有没有独立的堆栈, 这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所 执

11、行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是 不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执 行,那么是不是说DLL有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配 的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一 个 DLL 中删除,很有可能导致程序崩溃33.unsigned short A = 10; printf(A = %un, A);char c=128;printf(c = %dn,c);输出多少?并分析过程答:第一题,A =0xfffffff5, int值为-11,但输出的是uint。所以输出4294967285。第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128, 所以输出 -128。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

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