cjk_cjk 2018-10-09 14:18 采纳率: 0%
浏览 584
已采纳

函数传递时,若为f(x=1,x=2,x=3)形式,得到的形参均为一,为什么会这样?

写了如下的c语言代码:

#include<stdio.h>
void f(int a,int b,int c)
{
    printf("%d %d %d",a,b,c);
}
int main()
{
    int x=0;
    f(x=1,x=2,x=3);
    return 0;
}

运行后输出 1 1 1。我知道传参时进栈顺序是从右至左。但是,为什么后两个参数明明已经算出结果了,却还是被x=1覆盖,是不是算出结果3和2后没有直接进栈?对这其中的细节有疑问,希望各位不吝赐教,谢谢!

  • 写回答

3条回答 默认 最新

  • threenewbee 2018-10-09 16:05
    关注

    压入堆栈的顺序和表达式求值的顺序没有关系。编译器既可以先算x=3,也可以先算x=1
    像你这种表达式有副作用(表达式求值会改变表达式自身)的,C语言也没有规定编译器怎么处理。
    对于C语言,函数参数求值顺序是编译器未定义行为,不同编译器都可能不一样。
    进一步阅读:https://blog.csdn.net/mimahoo/article/details/51148578

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型