为什么以下程序的输入如下所述:指针,外部值

时间:2012-07-19 14:39:08

标签: c pointers extern

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的值是多少?静态x变为2,所以我希望3是a的值。

输出结果为:

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

2 个答案:

答案 0 :(得分:3)

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

上面的代码将{10}添加到x,因为您将a设置为指向x的指针,然后将a指向的值设置为{{ 1}}。

答案 1 :(得分:3)

a=&x使a指向静态函数 - 局部变量x(因为它是范围内的最内层)。因此,当我们退出函数时,下一行中的*a=x+10相当于x=x+10x为11。在下次调用时,我们将x递增1,它变为12。