C++一些常见面试题---持续更新
1.变量的声明何定义有什么区别
变量的定义为变量分配地址和存储空间,变量的声明不分配地址。一个变量可以在多个地方声明,但是只在一个地方定义。同时加入extern修饰的变量的声明,说明此变量将在文件以外或在文件后面部分定义。
说明-很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。
int main() { extern int A; //这是个声明而不是定义,声明A是一个已经定义了的外部变量 //注意:声明外部变量时可以把变量类型去掉如:extern A; dosth(); //执行函数 } int A; //是定义,定义了A为整型的外部变量
2.简述#ifdef、#else、#endif和ifndef的作用
在程序中可以利用#ifdef、#endif将某一个模块的代码特殊定义,以向特定用户提供该功能。在不需要用户可以将其屏蔽。
#ifdef MATH #include "math.c" #endif
同时在window下应对硬件编译的时候,可以利用这种编译绕过硬件,直接进行编译得出预期的结果。
注意-虽然不用条件编译命令而直接用if语句也能达到要求,但那样做目标程序长,运行时间长,进行条件编译时,可以减少被编译的语句,从而减少目标程序的长度,减少运行时间。
3.写出int、bool、float、指针变量与"零值"比较的if语句
//int与零值比较 if ( n == 0 ) if ( n != 0 ) //bool与零值比较 if (flag) // 表示flag为真 if (!flag) // 表示flag为假 //float与零值比较 const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) //其中EPSINON是允许的误差(即精度)。 //指针变量与零值比较 if (p == NULL) if (p != NULL)
4.结构体可以直接赋值吗
声明时可以直接初始化,同一结构体的不同对象之间也可以直接赋值,但是当结构体中含有指针"成员"时一定要小心。
注意-当有多个指针指向同一段内存时,某个指针释放这段内存可能会导致其他指针的非法操作。因此在释放前一定要确保其他指针不再使用这段内存空间
5.sizeof与strlen的区别
sizeof是一个操作符,strlen是库函数
sizeof的参数可以是数据的类型,也可以是变量。而strlen只能以结尾'\0'的字符串做参数
编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来,并且sizeof计算的数据类型占内存的大小,而strlen计算的是字符串实际的长度
数组做sizeof的参数不退化,传递给strlen就退化为指针了
6.c语言的关键字static和C++的关键字static有什么区别
在c中,static关键字用来修饰局部静态变量和外部静态变量、函数。在C++中除了上述功能外,还用来定义类的成员变量和函数。即静态成员和静态成员函数
注意-在编程时static的记忆性,和全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而C++的静态成员则可以在多个对象实例间进行通信,传递信息
7.c语言的Malloc和C++中new delete的区别
new、delete是操作符,可以进行重载,只能在C++中使用
malloc、free是函数,可以覆盖,c与C++中都可以使用
new可以调用对象的构造函数,相应delete调用的是析构函数
malloc仅仅分配内存,free仅仅回收内存,并不执行构造与析构函数
new、delete返回的是某种数据类型指针,malloc、free返回的是void指针
注意-malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用
8.写一个"标准"宏MIN
# d e f i n e m i n ( a , b ) ( ( a ) < = ( b ) ? ( a ) : ( b ) )
9.++i和i++的区别
++i自增1再返回
i++先返回1,再自增1
10.volatile有什么作用
状态寄存器一类的并行设备硬件寄存器
一个中断服务子程序会访问到的非自动变量
多线程间被几个任务共享的变量
注意-虽然volatile在嵌入式方面应用比较多,但是在PC端软件的多线程中,volatile修饰的临界变量也是非常实用的
- 【C++】C++常见面试题汇总_持续更新中...
- C++开发常见算法和数据结构面试题(持续更新)
- 【C++】C++常见面试题汇总,持续更新中...
- 【C++】C++常见面试题汇总_持续更新中...
- 一些特别有趣的C++面试题(持续更新中)
- java web开发中常见的一些异常和处理办法【持续更新】
- 【持续更新】C++里的一些特性
- 2020年腾讯C++面试题和答案持续更新中-内附视频讲解(9)
- c++常见输入方法[持续更新]
- eclipse中一些常见的报错处理(持续更新中……)
- Java工程师常见面试题集锦(十)互联网人必看!(附答案及视频教程,持续更新)
- C/C++经典面试题(持续更新)
- 2020年腾讯C++面试题和答案持续更新中-内附视频(8)
- C++后台面试常见问题与回答(持续更新)
- java和C常见技术面试题2015(持续更新中。。。)
- 一些常见异常及解决办法(持续更新)
- C/C++经典面试题(持续更新)
- 2020年腾讯C++面试题和答案持续更新中-内附视频(7)
- Java工程师常见面试题集锦(三)互联网人必看!(附答案及视频教程,持续更新!)
- Linux网络编程常见面试题(持续更新)