我从一个要求提供代码输出的网站上得到了这个问题
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
函数被称为在parantheses中递归传递两个值.优先级和关联性如何在这里工作?
,
in (i++, i)
是一个逗号运算符.它的操作数从左到右进行评估.它评估i++
,i
get的值增加,表达式的值i++
被丢弃,然后递增的值传递给函数.因此,最终只有一个参数传递给函数reverse
.