C 跟踪此文件
我真的很难追踪这个文件,因为我在获取b和c的地址时迷失了方向。还有指针。-。有谁能帮我解释一下,因为我完全迷路了 请参见函数调用中的值将被传递,在第二次调用中 地址将被传递,这意味着第一个是按值调用,另一个是按值调用 参考值,a=fa,b 因此存储在after返回中的值是1+2+2=5。现在因为a和b是局部变量a=5,b=2 现在函数调用b=g&a,&b 传递地址,并使用指针提取存储在该地址的值。只需调用,值将根据计算在传递参数的地址处进行修改,地址没有变化即为thr,您仍然可以通过使用&运算符检查自己来打印thr地址C 跟踪此文件,c,C,我真的很难追踪这个文件,因为我在获取b和c的地址时迷失了方向。还有指针。-。有谁能帮我解释一下,因为我完全迷路了 请参见函数调用中的值将被传递,在第二次调用中 地址将被传递,这意味着第一个是按值调用,另一个是按值调用 参考值,a=fa,b 因此存储在after返回中的值是1+2+2=5。现在因为a和b是局部变量a=5,b=2 现在函数调用b=g&a,&b 传递地址,并使用指针提取存储在该地址的值。只需调用,值将根据计算在传递参数的地址处进行修改,地址没有变化即为thr,您仍然可以通过使用&运算符
如果通过调试器运行代码,您将看到每个变量和每个地址发生了什么。输出每个变量的地址将为您提供很少的信息,因为地址很可能会随着每次执行而改变 相反,用笔和纸想想会发生什么。我将根据您的代码给出一个示例 以下是主要变量的起始值:
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);
}
现在调用函数f,它不使用指针,因此每个变量的值都复制到函数的参数中。fa,b的返回值主要分配给a,因此现在变量的值变为:
a b c
1 2 3
现在b和c的地址被传递给gp,q。在g中,局部变量v成为指针p和q的内容之和,指针p和q是b和c的值
现在q的内容通过调用f而改变,f不使用指针,只有v的值和p的内容作为参数传递。f返回17。现在q的含量,也就是b的值,变成了17
*p *q v
2 3 5
现在,函数g返回v的值和q的内容(即c的值)之间的差值
主要来说,g返回的值是-12,它被分配给b。因此,现在我们的变量具有以下值:
*p *q v
2 17 5
请注意,c保留了函数g的值17,因为它是通过指针修改的。请编辑帖子,然后正确缩进代码。然后解释你理解了什么,你到底在哪里遇到了问题。你到底在寻找什么?如果您需要b和c的地址,则&b和&c可以在使用printf%u%u、&b和&c显示时为您提供该地址,您所说的跟踪是什么意思?
*p *q v
2 17 5
a b c
5 -12 17