以下c代码给出输出1 2 3 4 5。代码是如何执行的?

时间:2017-10-20 14:44:02

标签: c

我没有得到以下代码如何执行,输出是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));
}

2 个答案:

答案 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!