C++经典面试题全集 50~100道 都附带有参考答案(一)

2014-11-24 00:54:38 · 作者: · 浏览: 26

51. 引用与指针有什么区别?


答 、1) 引用必须被初始化,指针不必。


2) 引用初始化以后不能被改变,指针可以改变所指的对象。


3) 不存在指向空值的引用,但是存在指向空值的指针。



52. 描述实时系统的基本特性


答 、在特定时间内完成特定的任务,实时性与可靠性。



54. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?


答 、全局变量储存在静态数据区,局部变量在堆栈中。



55. 堆栈溢出一般是由什么原因导致的?


答 、没有回收垃圾资源



56. 什么函数不能声明为虚函数?


答 构造函数(constructor)



57. IP地址的编码分为哪俩部分?


答 IP地址由两部分组成,网络号和主机号。



58. 不能做switch()的参数类型是:


答 、switch的参数不能为实型。



59. 如何引用一个已经定义过的全局变量?


答 、可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错



60. 对于一个频繁使用的短小函数,C语言中应用什么实现,C++中应用什么实现


答 、c用宏定义,c++用inline


61. C++是不是类型安全的?


答案:不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)



62. 当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,请解释一下编译器为什么没有让它为零。


答案:为1。举个反例,如果是零的话,声明一个class A[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]…了。



63. 简述数组与指针的区别?


答:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。


(1)修改内容上的区别


char a[] = “hello”;


a[0] = ‘X’;


char *p = “world”; // 注意p 指向常量字符串


p[0] = ‘X’; // 编译器不能发现该错误,运行时错误


(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。



64. C++函数中值的传递方式


答:有三种方式:值传递、指针传递、引用传递



65. 内存的分配方式


答:分配方式有三种,


1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。


2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。


3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。



66. extern“C”有什么作用?


答:Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。


Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可。可以用一句话概括extern “C”这个声明的真实目的:实现C++与C及其它语言的混合编程




67. 用什么函数开启新进程、线程。


答案:


线程:CreateThread/AfxBeginThread等


进程:CreateProcess等



68. SendMessagePostMessage有什么区别


答案:SendMessage是阻塞的,等消息被处理后,代码才能走到SendMessage的下一行。PostMessage是非阻塞的,不管消息是否已被处理,代码马上走到PostMessage的下一行。



69. CMemoryState主要功能是什么


答案:查看内存使用情况,解决内存泄露问题。



70. #include #include “filename.h” 有什么区别?


答:对于#include ,编译器从标准库路径开始搜索 filename.h


对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h



71. 处理器标识#error的目的是什么?


答:编译时输出一条错误信息,并中止继续编译。



72. #if!defined(AFX_…_HADE_H)


#define(AFX_…_HADE_H)


……


#endif作用?


答:防止该头文件被重复引用。



73. 在定义一个宏的时候要注意什么?


答:定义部分的每个形参和整个表达式都必须用括号括起来,以避免不可预料的错误发生



74. 数组在做函数实参的时候会转变为什么类型?


答:数组在做实参时会变成指针类型。



75. 系统会自动打开和关闭的3个标准的文件是?


(1) 标准输入—-键盘—stdin


(2) 标准输出—-显示器—stdout


(3) 标准出错输出—-显示器—stderr



76. .Win32 char, int, float, double各占多少位?


(1) Char 占用8位


(2) Int 占用32位


(3) Float 占用32位


(4) Double 占用64位



77. strcpy()memcpy()的区别?


答:strcpy()和memcpy()都可以用来拷贝字符串,strcpy()拷贝以’\0’结束,但memcpy()必须指定拷贝的长度。



78. 说明defineconst在语法和含义上有什么不同?


答:(1) #define是C语法中定义符号变量的方法,符号常量只是用来表达一个值,在编译阶段符号就被值替换了,它没有类型;


(2) Const是C++语法中定义常变量的方法,常变量具有变量特性,它具有类型,内存中存在以它命名的存储单元,可以用sizeof测出长度。



79. 说出字符常量和字符串常量的区别,并使用运算符sizeof计算有什么不用?


答:字符常量是指单个字符,字符串常量以‘\0’结束,使用运算符sizeof计算多占一字节的存储空间。



80. 简述全局变量的优缺点?


答:全局变量也称为外部变量,它是在函数外部定义的变量,它属于一个源程序文件,它保存上一次被修改后的值,便于数据共享,但不方便管理,易引起意想不到的错误。



81. 总结static的应用和作用?


答:(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;


(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;


(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;


(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;


(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。



82. 总结const的应用和作用?


答:(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变