在此代码中,使用a--
和b++
会显示分段错误,但是如果要赋予--a
和++b
其工作原理,为什么?
add(a,b)
{
if (a==0)
return b;
else
return add(a--,b++); //why this line didn't work??!
}
最佳答案
后递增和递减运算符实际上是在对表达式求值后对值进行递增或递减,这意味着在将a
和b
的值传递给函数后,它们将进行更改。
这样,您最终将始终将a
和b
的不变值传递给add ()
函数,这将导致堆栈溢出(导致分段错误),因为这本质上是一个递归函数,从不满足返回条件。
OTOH,如果您使用预递增或递减运算符,则a
和b
的值将在传递给递归add ()
调用之前减小,从而满足return
条件,因此您的程序按预期运行。
也就是说,您应该指定函数的返回类型,例如,在这种情况下为int
。
关于c - 为什么在以下代码中出现段错误(核心已转储)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32296752/