其他分享
首页 > 其他分享> > c语言练习 - 反常题系列

c语言练习 - 反常题系列

作者:互联网

计划要好好修炼c语言水平,在学习过程中发现了很多反常有意思的题目列出来,供大家交流讨论。如果有说错的地方,非常欢迎批评指正。也非常欢迎大家提出问题一起讨论。

一.神奇printf - 压栈弹栈规则

int main()
{ 
    int a = 0;
    printf("%d%d%d\n",a,++a,a++);//结果 220
    
    return 0;
}

原理解析:
1.printf函数原型是 printf(const char *format),是一个不定参函数,c语言规定为了提高函数执行效率,不定参函数为从右往左计算;
2.对于不定参依次从右往左进栈。边计算,边压栈,遇到++a或者a,属于左值,先空着,最后更新;遇到i++的,因为它是右值,直接压栈。

分析步骤:
1.a++ //这里++属于右值,直接压栈;
2.++a //属于左值,先计算,值先不给;
3.a //和++a一样,先计算,值先不给;
4.往左没有参数了,挨个给a和++a赋值,已知++一共执行两次,则a和++a结果为2;
5.因为a++属于后操作数,先入栈并且入栈时为0,则值为0。

标签:压栈,系列,函数,++,练习,左值,d%,printf,反常
来源: https://blog.csdn.net/weixin_42560250/article/details/113618732