C语言面试题

本文通过三个实例探讨了C语言中的指针操作与变量运算规则,包括字符串复制、变量计算及字符输出,帮助读者理解复杂的表达式求值顺序。
1、以下代码输出的结果是什么?
1. char *p1="name";
2. char *p2;
3. p2
=(char*)malloc(20);
4. memset (p2, 
020);
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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值