gpt4 book ai didi

c - 跟踪这个文件

转载 作者:行者123 更新时间:2023-11-30 21:03:24 24 4
gpt4 key购买 nike

int f(int x, int y)
{
int u;
u = x*y;
printf("in f\n");

return( x+u+y );
}

int g(int* p, int* q)
{
int v;
v = *p + *q;
printf("in g, before f\n");

*q = f(v, *p);
printf("in g, after f\n");

return( v-*q );
}

int main(void)
{
int a = 1, b = 2, c = 3;

printf("in main, before f and g\n");

a = f(a, b);
b = g(&b, &c);

printf("in main, after f and g\n");

printf("a = %d, b = %d, c = %d\n", a, b, c);

return(EXIT_SUCCESS);
}

我在尝试跟踪此文件时遇到了很大的困难,因为我在获取 b 和 c 的地址方面迷失了方向。还有指针.-。任何人都可以通过跟踪这段代码来帮助解释,因为我完全迷失了。

最佳答案

如果您通过调试器运行代码,您将看到每个变量和每个地址发生了什么。输出每个变量的地址只会给您提供很少的信息,因为地址很可能会随着每次执行而改变。

相反,用笔和纸自己弄清楚会发生什么。我将根据您的代码给您一个示例。

这些是 main() 中变量的起始值:

a   b   c
1 2 3

现在调用函数f(),它不使用指针,因此每个变量的值都会复制到函数的参数中。 f(a,b) 的返回值被分配给 main() 中的 a,所以现在变量的值变成:

a   b   c
5 2 3

现在bc的地址被传递给g(p,q)。在g()中,局部变量v成为指针pq内容的总和,这两个指针是bc 的值。

*p  *q  v
2 3 5

现在,通过调用 f() 来更改 q 的内容,该调用不使用指针,仅使用 v 的值并且 p 的内容作为参数传递。 f() 返回 17。因此现在 q 的内容(即 b 的值)变为 17。

*p  *q  v
2 17 5

现在函数g()返回v的值和q的内容之间的差值(这是c 的值)。

main() 中,g() 返回的值为 -12,并将其分配给 b。现在我们的变量具有以下值:

a   b   c
5 -12 17

请注意,c 保留了函数 g() 中的值 17,因为它是通过指针修改的。

关于c - 跟踪这个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25052411/

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