C语言函数求结果,实在是搞不懂这个啊

#为什么这个程序能有两个答案啊?

#include
void func(int a,int b,int c)
{
printf("a=%d,b=%d,c=%d",a,b,c);
}
void main()
{
int i=2;
func(i,i++,i--);
}

#我做出的结果是a=2,b=2,c=3
因为i=2赋给了a,i++赋给了b,这时候i++表达式为2,i值变成3,
然后i--赋给了c,这个时候i--表达式为3,i值为2
那结果不应该是a=2,b=2,c=3,吗

img

hello呀 其实你本质的判断是没错的 但是你需要注意的一个知识点是:
C函数参数作为一个整体执行的顺序是从右向左,所以会先处理最右端的参数,然后依次向左处理。
了解这个知识点后问题是不是就迎刃而解啦

应该都是对的,依赖不同的编译环境 ,可能先执行 i --,也可能先执行 i++, 也可能按顺序来

这个代码的输出结果是不确定的,因为它存在未定义行为。在C语言中,函数参数的计算顺序是未定义的,编译器可以按任何顺序计算函数参数,并且可能会在计算过程中出现副作用和依赖关系,这会导致程序的行为出现问题。

例如,在这个例子中,参数 i++ 和 i-- 都会改变 i 的值,而且它们的计算顺序是未定义的,这意味着 i 的最终值取决于编译器按照何种顺序计算这些参数。此外,参数 a、b 和 c 的使用顺序也是未定义的,所以无法预测 printf 函数将打印哪些值。

因此,建议在函数调用时避免出现多次修改同一个变量的表达式,或者使用额外的变量来保存需要传递的值。

i++, i-- 都是先取 i 的值,再将 i +1 或 -1。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^