-5 c recursion segmentation-fault post-increment
在这个代码中使用 a--和b++显示分段错误,但如果给予--a和++b它的工作,为什么?!
add(a,b)
{
if (a==0)
return b;
else
return add(a--,b++); //why this line didn't work??!
}
Run Code Online (Sandbox Code Playgroud)
后增量和减量运算符实际上递增或递减的值表达式求值之后,意味着它会改变的价值观a和b他们已经传递给函数后.
这样,你会最终传递的不变值a,并b以add ()功能全,这将导致堆栈溢出(导致分段错误),因为这基本上是一个递归函数永不满足的条件返回的时间.
OTOH,如果使用预递增或递减操作,值a和b将得到它们传递给递归下降之前add ()调用,从而满足该return条件,因此你的程序按预期运行.
也就是说,您应该指定函数的返回类型,例如,在这种情况下int.