这段代码给了我一个seg错误,但当我将x--
更改为--x
时,它会正确打印。
它们不一样????
int main()
{
myFunc(5);
return 0;
}
void myFunc (int x) {
if (x > 0) {
myFunc(x--);
printf("%d, ", x);
}
else
return;
}
答案 0 :(得分:13)
不,他们不一样。
x--
和--x
之间的区别在于返回值是在减量之前还是之后。
在myFunc(x--)
中,x--
会返回旧值。因此,myFunc()
被称为具有相同值的可重复性 - >无限递归。
在myFunc(--x)
中,--x
会返回新值。因此myFunc()
每次调用的次数减少 - >没有无限的递归。
如果您将printf
移到函数调用的开头,将会更容易看到这一点:
void myFunc (int x) {
printf("%d, ", x);
if (x > 0) {
myFunc(x--);
}
else
return;
}
输出(以10调用时)
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, ...
答案 1 :(得分:5)
在评估参数之后,发生后递减操作(x--
),因此使用相同的值重复调用myFunc
。在评估参数之前,进行预递减(--x
)操作,该操作按预期工作。
答案 2 :(得分:3)
因为 - 的修改是post或pre。当你调用x--时它是post,因此在调用myFunc之后运行,在这种情况下什么都不做。 --x将在myFunc之前调用,因此会影响x。
答案 3 :(得分:1)
x--在使用后递减变量。这就是为什么你传递给你的函数总是相同的值,应该减少,但不是,以及函数重复自己。