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条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料