C语言面试题

1、以下代码输出的结果是什么?
1. char   * p1 = " name " ;
2. char   * p2;
3. p2
= ( char * )malloc( 20 );
4. memset (p2, 
0 20 );
5. while ( * p2 ++   =   * p1 ++ );
6. printf(
" %s " ,p2);
答案:输出空字串。
分析: * p2 ++相当于 *( p2 ++),先取p2值再与*结合,语句执行完p2再加加, * p1 ++类似。所以第5行代码执行完后将字符串"name"复制到第3行中所分配的内存中。但是由于第5行在复制数据的同时p2所指向的地址在变化,所以 第5行代码执行完后p2所指的位置如下:

因此输出的结果为空。
2.输出的x,y分别是多少?
1. int  x = 20 ,y = 35 ;
2. x 
=  y ++   +  x ++ ;
3. printf(
" %d,%d " ,x,y);
4. y 
=   ++ +   ++ x;
5. printf(
" %d,%d " ,x,y);
答案:56,36; 57,94
分析: =  y ++   +  x ++等价于 = (y ++) + (x ++),第2行代码等号的右边值为55,y++先取y值再加加,x++也相同,所以x=55,但是由于式子中有x++,所以第2行代码执行后x的值变成了56,y变成了36。 =   ++ +   ++ x相当于 = ++ y) + ++ x),++y是先将y值加一再取y值,++x也如此,因此y=37+57,结果x=57,y=94。
3.下面输出的结果是多少?
printf( " %c " , * ( " Monday! " )); 
答案:M
分析:字符串
"Monday!"返回的是一个字符串指针(char *),*(pch)就是字符串的第一个字符,所以为M。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值