gpt4 book ai didi

c - 在 C 中跟踪递归

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:50 25 4
gpt4 key购买 nike

我对递归函数和跟踪有基本的了解,但是当我尝试跟踪以下程序时出现问题:

#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”的代码中看到任何算术。

提前致谢...我觉得我忽略了一些小东西。

最佳答案

main()c 将在此处更改:

int f1(int *a, int c) {
*a = c - 2; /* <-- */
c = c*2 - (*a);
printf("a= %d c= %d\n", *a, c);
return c - *a;
}

在对 f1 的外部调用中,您传递了一个指向 c 的指针。在 f1 中,当您分配 *a 时,它会更新 a 指向的任何内容,即 c

关于c - 在 C 中跟踪递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15331301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com