#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
void recursion (int a) {
if (a != 0) {
recursion(--a); //works
recursion(a--); //does not work
printf("%d\n", a);
}
}
int main (int argc, char *argv[]) {
printf("start\n");
recursion(10);
printf("finished\n");
return 0;
}
为什么当递归(a--)时会出现分段错误,但在递归(--a)时工作正常?- a vs a--,运算符优先级
我不认为递归(a--)由于未定义的行为是错误的,因为只有一个副作用,就是减少1。这种副作用正是我想要的。谢谢。
你知道'--a'和'a - '之间的区别吗?考虑第7行和第8行传递给'递归'的实际值。 – Ryan
'int tmp = a--;递归(tmp);'< - 那怎么样? – zerkms
递归(a - );'调用'递归(a);'每次减少a,但减小后的值不再使用 –