在单个参数函数中传递带括号的两个值

Passing two values with parentheses in a single argument function

我从一个要求提供代码输出的网站上得到这个问题

void reverse(int i)
{
    if (i > 5)
        return ;
    printf("%d ", i);
    return reverse((i++, i));
}
int main(int argc, char *argv[]) {
    reverse(1);
    return 0;
}

输出为 1 2 3 4 5

reverse 函数被调用递归地传递括号内的两个值。优先级和结合性在这里如何工作?

, in (i++, i) 是逗号运算符。它的操作数从左到右计算。它计算 i++i 的值递增,表达式 i++ 的值被丢弃,然后递增的值传递给函数。所以,最终只有一个参数被传递给函数reverse

这不是 two 带有额外括号的值,而是 one 包含 comma operator.[=11= 的参数]

根据haccks,这里是一个逗号运算符。

表达式:

(i++,  i)

首先对expression1求值,然后对expression2求值,返回expression2的 表示整个表达式。

解释:

void reverse(int i)
{
    if (i > 5)
       return ;
    printf("%d ", i);
    return reverse((i++, i)); // it's single arument that is (i++ , i)
 }
 int main(int argc, char *argv[]) {
    reverse(1);
    return 0;
 }

更多解释,例如

a = (1, 2, 3);

(1,2,3) 是单个参数,但是分配给 a?

的是什么?

括号被使用,所以逗号运算符首先被执行,我们得到 a 分配为 3 所以先执行逗号之前的语句,然后分配 3

你的情况
i++ 先执行,然后 i 作为参数传递