-2

我在将整数传递给函数时递减整数。但是我看到了一些意想不到的行为。我是 C 新手,不知道该怎么做:

#include <stdio.h>

void func(int, int);

int main(){
        int i=3;
        //func(i--, i); //Prints a=3, b=2
        func(i, i--); //Prints a=2, b=3 ??
        func(i, --i); //Prints a=2, b=2 ??
}

void func(int a, int b){ 
        printf("a=%d\n", a); 
        printf("b=%d\n", b); 
}

第一次调用func按预期工作,但第二次和第三次调用是怎么回事?

4

3 回答 3

1

这是未定义的行为,你不能指望任何一个结果。

于 2013-07-13T06:38:31.997 回答
1

未指定函数参数的计算顺序。例如,GCC 喜欢从右到左计算参数值。当您有一个修改变量(或具有任何其他副作用)的运算符时,该运算符和使用该变量的任何其他表达式之间必须有一个序列点。

于 2013-07-13T06:43:11.270 回答
-2

由于参数从右侧传入函数,因此在第一次调用中使用后增量运算符时 - 它传递相同的值 (3) 并更新“i”左侧参数的值 (2)。

在第二次调用中,您使用了预增量运算符,它为右参数更改自身并为左参数发送更新的值。

于 2013-07-13T06:42:37.707 回答