C 跟踪此文件

C 跟踪此文件,c,C,我真的很难追踪这个文件,因为我在获取b和c的地址时迷失了方向。还有指针。-。有谁能帮我解释一下,因为我完全迷路了 请参见函数调用中的值将被传递,在第二次调用中 地址将被传递,这意味着第一个是按值调用,另一个是按值调用 参考值,a=fa,b 因此存储在after返回中的值是1+2+2=5。现在因为a和b是局部变量a=5,b=2 现在函数调用b=g&a,&b 传递地址,并使用指针提取存储在该地址的值。只需调用,值将根据计算在传递参数的地址处进行修改,地址没有变化即为thr,您仍然可以通过使用&运算符

我真的很难追踪这个文件,因为我在获取b和c的地址时迷失了方向。还有指针。-。有谁能帮我解释一下,因为我完全迷路了

请参见函数调用中的值将被传递,在第二次调用中 地址将被传递,这意味着第一个是按值调用,另一个是按值调用 参考值,a=fa,b

因此存储在after返回中的值是1+2+2=5。现在因为a和b是局部变量a=5,b=2

现在函数调用b=g&a,&b

传递地址,并使用指针提取存储在该地址的值。只需调用,值将根据计算在传递参数的地址处进行修改,地址没有变化即为thr,您仍然可以通过使用&运算符检查自己来打印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