linux c程序面试题,C 程序面试题解答----之一

What does the following program print ?

#include

using namespace std;

int Vac = 3;

int main(){

int Vac = 10;

::Vac++;

cout<<::vac>

cout<

return 0;

}

显然考查的是全局变量与局部变量的区别 结果应该是 4 10

------------------------------------------------------------

计算下面的输出结果

int i = 1,j = 2;

int k = i+++j;

cout << k << endl;

注意i+++j的结合方式是(i++)+j

所以执行顺序是先计算i+j ,再计算 i=i+1;  所以结果是4

-----------------------------------------------------------

对于x = x +1, x+= 1,x++

是确定那个效率更高,为什么?

这个提要求对汇编和编译器都有所了解

x=x+1是效率最低的,其需要执行以下步骤

读取右x的地址

x+1

读取左x的地址

将右值传给左面的x(编译器并不认为左右x的地址相同)

x+=1效率较上面的有一些改善

读取右x的地址

x+1

将得到的值传给x(x的地址已经读出)

x++ 效率最高

读取右x的地址

x自增1

-----------------------------------------------------------------

What will be the output of the following C code ?

#define product(x) (x*x)      /*在宏定义中要注意空格的问题*/

int

main(void)

{

int i= 3 ,j,k;

j= product(i++);            /*j = (i++ * i++) = 3*3=9但此时i已经加到了5(注意必须是先进行了运算然后再自加)*/

k = product(++i);       /*k = (++i * ++i) = 7 * 7 = 49 (很有困惑性)*/

printf("j=%d,k=%d",j,k);

return 0;

}

---------------------------------------------------------------------------------------

If there are "int a = 5,b = 3;",the values of a a and b are ??

after execute "!a&&b++;".

这个题是考虑逻辑运算符的运算过程

注意在逻辑与运算中若果左侧的值为假,就可以判定整个表达是的值为false,而不需要

再去计算右侧的值。所以结果为 5,3

posted on 2009-09-12 07:27 mxp556 阅读(83) 评论(0)  编辑 收藏 引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值