1
int x=0;
int*a=&x;

void foo(int * a) {
    static x=0;
    x++;
    printf("x's value %d ", x);
    *a+=x;
    a=&x;
    *a=x+10;
}

int main(void) {
    foo(a);
    printf("a's value %d\n ", *a);
    foo(a);
    printf("a's value %d ", *a);

    return 1;

}

我正在尝试分析上述内容。foo 的第一次迭代,当函数到达 时a=&x,函数停止后的 a 会受到所发生的事情的影响,因为在函数结束时指针会回到他指向的原始值,现在 1. 静态 x现在也是 1。第二次迭代:x 是如何得到值 12 的?!静态x变成了 2,所以我期望 3 是 a 的值。

输出是:

 x's value 1 a's value 1
 x's value 12 a's value 13 
4

2 回答 2

3
a=&x;
*a=x+10;

上面的代码给 加了 10 x,因为你设置a为指向 的指针x,然后将指向的值设置ax+10

于 2012-07-19T14:43:57.943 回答
3

该行指向静态函数局部变量(因为a=&x它是范围内的最内层)。因此,在下一行中,等价于, 并且在我们退出函数时为 11。在下一次调用中,我们增加1,它变为 12。ax*a=x+10x=x+10xx

于 2012-07-19T14:44:22.963 回答