background image

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。

2.下面程序的结果是什么?

char foo(void)
{

unsigned int a = 6;
int b = -20;
char c;
(a+b>6) ? (c=1) : (c=0);
return c;

}
解析:

unsigned int 类型的数据与 int 类型的数据相运算后,自动转为 unsigned int 类型。因此 a-

b 的值不是-14,而是一个 unsigned int 类型的数 4294967382.因此返回值是 1。原因是当表达式
中存在有符号类型和无符号类型时,所有的操作数都自动转换为无符号类型。

3.如何将 a、b 的值进行交换,并且不使用任何中间变量?

解析:

如果采用:
a = a + b;
b = a - b;
a = a - b;
这样做的缺点就是如果

a、b 都是比较大的两个数,a=a+b 时就会越界。

而采用:
a = a ^ b;
b = a ^ b;
a = a ^ b;
用异或语句无需担心越界问题。

4.在 C++程序中调用被 C 编译器编译后的函数,为什么要加 extern "C"?

答案: