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

标签 c gcc operator-precedence

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

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 函数被调用递归地传递括号内的两个值。优先级和关联性如何在这里发挥作用?

最佳答案

(i++, i) 中的

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

关于c - 在单个参数函数中传递带括号的两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777606/

相关文章:

c - 如何在静态库中隐藏目标文件名?

c++ - 当程序执行取决于执行顺序时,它是未定义的行为吗?

c++ - && (and) 运算符在 C++ 中求值的哪一侧(左或右)

c - 字符串正在添加特殊字符

C通过堆栈和寄存器手动调用函数

c - 链接两个 C 程序

c - 当我尝试使用递归打印 1-10 个数字时,mingw gcc 编译器给出了一个我无法理解的错误

c - 了解字符串指针数组

c - 未定义功能感应

java - java中(--i+++i)中表达式的输出