我对递归函数和跟踪有基本的了解,但是当我尝试跟踪以下程序时,有些事情变得混乱:
#include <stdio.h>
#include <stdlib.h>
int f1(int *a, int c);
int main(void) {
int a=2, b=3, c=4, d=5;
a = f1(&c, f1(&b,d));
printf("a= %d b= %d c= %d d= %d\n",a,b,c,d);
system("pause");
return 0;
}
int f1(int *a, int c) {
*a = c - 2;
c = c*2 - (*a);
printf("a= %d c= %d\n", *a, c);
return c - *a;
}
当我跟踪时,我收到两个对 f、f(4,4) 和 f(3,5) 的调用。我可以正确跟踪返回值和 f 函数中的 printf 语句。但是 main 中的最终 printf 给了我 a= 4 b= 3 c= 2 d= 5 当我写出来时,我最终得到 c=4 ......即使在我对我的工作进行了两次和三次检查之后。当我调试时,我找不到主“c”的值何时发生变化,而且我当然在主“c”的代码中看不到任何算术。
在此先感谢...我有一种我忽略的小东西的感觉。