我没有得到以下代码如何执行,输出是1 2 3 4 5。特别是带有(i ++,i)的反向函数的返回语句。
#include <stdio.h>
void reverse(int i);
int main()
{
reverse(1);
}
void reverse(int i)
{
if (i > 5)
return ;
printf("%d ", i);
return reverse((i++, i));
}
答案 0 :(得分:7)
表达式(i++, i)
使用逗号运算符 - &gt;它首先评估左手侧,然后右手侧,结果是右手侧。由于此运算符还引入了一个序列点,因此结果是明确定义的:它是递增后的i
的值。
在这个例子中,它只是不必要地混淆代码,因为它与只写reverse(++i);
(甚至reverse(i + 1);
的结果完全相同,这更好地匹配功能/递归方法)。
答案 1 :(得分:-1)
As it was already rightly pointed out by Felix, it is using the comma operator. You can simply write reverse(i++) or reverse(++i) or reverse(i+1) that'll do!