1.x=x+1,x+=1,x++,那个效率最高?为什么?
x=x+1最低,因为它的执行过程如下:
(1)读取右x的地址。
(2)x+1。
(3)读取左x的地址。
(4)将右值传给左边的x(编译器并不认为左右x的地址相同)。
x+=1其次,其执行过程如下:
(1)读取右x的地址。
(2)x+1。
(3)将得到的值传给x(因为x的地址已经读出)。
x++效率最高,其执行过程如下:
(1)读取右x的地址。
(2)x自增1.
答案:x++效率最高。
2.如何将a、b的值进行交换,并且不实用任何中间变量?
用异或语句比较容易,不用担心超界的问题。
a=a^b;
b=a^b;
a=a^b;
3.头文件中的ifndef/define/endif是干什么用的?
防止该头文件被重复引用。
4.#include和#include"filename.h"有什么区别?
对于#include,编译器从标准库路径开始搜索filename.h;
对于#include"filename.h",编译器从用户的工作路径开始搜索filename.h;
5.what is the output of zhe
following code?(下面代码的输出结果是什么?)
#define SQR(x) (x*x)
main()
{
int a,b=3;
a=SQR(b+2);
printf("\n%d",a);
}
A:25 B:11 C:Would
vary from compiler to
compiler D:Error
完整代码如下,执行后输出结果为11。
#include
#define SQR(x) (x*x)
int main()
{
int a,b=3;
a=SQR(b+2);
printf("\n%d",a);
return 0;
}
定义宏展开式时容易造成二义性的问题。a=SQR(b+2)这一语句展开后的结果是“b+2*b+2”,而不是想象中的“(b+2)*(b+2)”。要想得到这个结果,必须把宏定义语句改为如下形式:#define
SQR(x) ((x)*(x)),这样的输出结果是25。
6.预处理问题、const问题和sizeof问题是C++设计语言中的三大难点,也是各大企业面试中反复出现的问题。
预处理指令#define声明一个常数时应注意:不能以分号结束,括号的使用等等;会写计算表达式得值;为避免溢出问题的发生,定义这个常数为长整型数。如果你在你的表达式中用到了UL(表示无符号长整型),那么你就有了一个好的起点。
如定义一年有多少秒?
#define
SECONDS_PER_YEAR(60*60*24*365)UL 忽略闰年
const的用处?
定义const常量;修饰函数参数和返回值,甚至函数的定义体。受const修饰的东西都受到强制的保护,避免意外更改,提高程序的健壮性。
const与#define都可以定义常量,但是const的用处更广泛,可以完全替代宏常量。
const有数据结构,编译器对前者类型进行安全检查,集成化的调试工具可以对const常量进行调试,C++中只能使用const常量。这些都是宏常量做不到的。