我正在学习C,我想出了这个例子
#include <stdio.h>
int MyAdd(int);
main ()
{
int i;
int c = 0;
c = MyAdd(5);
printf("%d\n", c);
}
int MyAdd(int a)
{
if(a > 0)
return a + MyAdd(--a);
else
return 0;
}
我自己运行这个并且我计算15.(5 + 4 + 3 + 2 + 1)但是当我运行它时,我得到10 ...为什么??? 在第一次,我们得到5+(再次执行func)等等。?
答案 0 :(得分:6)
当在表达式中使用时,副作用操作符会做出有趣的,意想不到的事情,因为你基本上受编译器的支配。
在这种情况下,您的编译器在第一个操作数之前评估a + MyAdd(--a)
的第二个操作数。所以,在添加变量之前,你要减少变量。
在任何情况下,您都不需要减量运算符。我建议将该行重写为return a + MyAdd(a - 1);
。
答案 1 :(得分:0)
做类似的事情:
foo(a++) or
foo(++a)
不是很安全,因为你依赖于编译器实现 - 这意味着它从左到右或从右到左读取参数。
让我们考虑第一种情况:
foo(a++)
如果编译器从左到右读取参数,结果将是foo(a),然后是++。 如果从右到左读取参数,则结果将调用f(a + 1)