几道面试题

我起了个新标题,只是不想再贴一次了,所以整个拷过来,
给大家参考一下,并无要引起大家注意的意思。 谢谢!


发信人: ReAKiNg (ReAKiNg), 信区: Office
标  题: Re: 几道面试题
发信站: 鼓浪听涛 (Fri Nov 16 17:19:03 2001), 转信

    faint...还是把理由给了算了。


【 在 ReAKiNg (ReAKiNg) 的大作中提到: 】
:     有一点点难度。 我做了一份参考答案,理由暂时不忙给。
: 【 在 tsky (sky) 的大作中提到: 】
: : 发信站: 饮水思源 (2001年11月16日11:53:18 星期五), 转信
: : 1。int i=5,j;
: :    j=(++i)*(i--);
: :    运行后i=_______,j=_________
:      i == 5; j == 36;

       我们知道++i先算++i在参与表达式运算,而i--恰好相反。
       原式相当于(j=(++i)*i)&&(i--)
       (j==6*6)&&(i==6-1)

: : 2。 int a[] = {0,1,2,3,4};
: :     int *p[] = {a,a+1,a+2,a+3};
: :     int **pp = p;
: :     假设a=8239150(记不清了,大概吧),p=8239168
: :     *(pp++)-a = ?
:       2

        第三行告诉我们pp = p;
        所以pp++相当于p++;
        而p++相当于p+1;相当于&p[1];
        所以*(pp++)相当于*(&p[1]);相当于p[1];
        p[1]等于多少? 等于a+1;
        所以原式等价于(a+1)-a;
        考虑到a和a+1是整形地址,占2字节的空间;
        所以答案为2。

: : 3。int a[100],i,*p=a;
: :   for(i=0;i<100;i++) a[i]=i;
: :   for(i=0;i<100;i++)
: :   {
: :     *p=a[i];
: :     g(&p);
: :   };
: :   for(i=0;i<100;i++)
: :   {
: :     printf("%d",a[i]);
: : };
: : void g(int **p);
: : {
: :   **p++;
: :   *p++;
: : }
:     991234567...99
:     即a[0]==99;a[i]=i; 其中1<=i<=99;

     ++优先级高于*,所以*p++相当于*(p++);
     所以函数void g(int **p)的唯一作用是p自增(p++)两次;
     不对实参指向的内容造成任何影响。
     在main()函数的循环中,当i==99时,*p==a[0]==a[99]==99;
     其他a[i]没有任何变化。
     所以答案就是上面我说的。

: : 4。下面函数的作用:
: : fun(char *a,char *b)
: : {
: : while (*a++=*b++)
: :   {};
: : return;
: : }
:    字符串拷贝函数。

     这题简单的要命,不到2秒钟就知道是怎么回事了。
     *a++相当于*(a++),所以原式相当于(*(a++))=(*(b++));
     一个一个字符拷贝。
     循环终止的条件是*a == '/0'即*b == '/0';
     是字符串拷贝函数还不明显吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值