Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么以下程序的输入如所述:指针、外部值_C_Pointers_Extern - Fatal编程技术网

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

C 为什么以下程序的输入如所述:指针、外部值,c,pointers,extern,C,Pointers,Extern,我正试着分析上述情况。foo的第一次迭代,当函数到达a=&x时,函数停止后的a会受到发生的事情的影响,因为在函数结束时指针会返回到他指向的原始值,现在是1。静态x现在也是1。第二次迭代:x是如何得到12的值的?!静态x变成了2,所以我认为3是a的值 输出为: int x=0; int*a=&x; void foo(int * a) { static x=0; x++; printf("x's value %d ", x); *a+=x; a=&a

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

输出为:

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;

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


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

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

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

您可以在调试器中逐行检查代码,并观察每一行如何更改变量。您可以在调试器中逐行检查代码,并观察每一行如何更改变量。
 x's value 1 a's value 1
 x's value 12 a's value 13 
a=&x;
*a=x+10;