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
答案 0 :(得分:3)
a=&x;
*a=x+10;
上面的代码将{10}添加到x
,因为您将a
设置为指向x
的指针,然后将a
指向的值设置为{{ 1}}。
答案 1 :(得分:3)
行a=&x
使a
指向静态函数 - 局部变量x
(因为它是范围内的最内层)。因此,当我们退出函数时,下一行中的*a=x+10
相当于x=x+10
,x
为11。在下次调用时,我们将x
递增1,它变为12。