再帰関数とトレースの基本的な理解はしていますが、次のプログラムをトレースしようとすると、何かがおかしくなりました。
#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 への 2 つの呼び出し、f(4,4) と f(3,5) が得られます。戻り値と f 関数の printf ステートメントを正しくトレースできます。しかし、main の最後の printf は、a= 4 b= 3 c= 2 d= 5 を与えます。それを書き出すと、最終的に c=4 になります...自分の作業を二重および三重にチェックした後でも。デバッグすると、メインの「c」の値がいつ変更されるかわかりません。また、メインの「c」のコードに算術演算が表示されません。
前もって感謝します...私が見落としているのは小さなものだと感じています。