秒懂(i++)与(++i)和C语言printf("“);的机制

说来惭愧这刚才一学弟问的题、由于时间久至遗忘 我也是通过百度才知其原理 特写博客纪念督促自己

题如下:写出程序输出结果

#include<stdio.h>
int main() {
int a = 1;
printf("%d %d %d", a++, a++, (a++) + (++a));
}

输出结果是4 3 4

要想做这个题就要先知道C语言printf("“)的打印机制,printf("“)是一个栈队列 即服从先进后出的原则,a++、a++、(a++) + (++a)先入栈的,所以出栈顺序为(a++) + (++a)、a++、a++

在解这道题之前,可以做一个这样的输出实验

#include<stdio.h>
int main() {
int a = 1,b;
b = a++;
printf("%d\n", b); 
printf("%d\n", a); 
}

结果分别是1 和 2

因为这里b = a++;是先把a的值赋给b,再执行++运算 赋值前a=1;故输出b=1;

(ps:++a的是和a++相反 即先++再赋值)

接下来是输出a、到这一步 因为上一步赋值结束了,故执行++运算 所以输出2

回到刚才题上

先运算(a++) + (++a)里的a++

这时候a==1(先赋值),接下来运算++a,这个时候到关键点了   这里的”a“因为上一步的a++只赋值并未运算,故要先执行运算 即此时的a==2    所以此时的++a就是3(先赋值)所以a此时也等3,所以整体(a++) + (++a) 即 1+3 结果为 4 但注意a此时还=3

下一步 算a++ 这里就不解释太多了、结果显而易见是3   毕竟是先赋值嘛

最后一步 还是算a++ 这里的a因为要执行上一步留下的++ 故此时a == 3+1 即a == 4;运算就相当于4++的运算,所以输出结果是4

故本题答案 4 3 4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值