繁体   English   中英

静态变量和局部变量

[英]static variables and local

输出为:100 -10 0 100 -5 2 10.为什么? 第一次运行b()后,b()末尾的静态x为-5(我检查),所以为什么c()给出0,不是使用静态x吗?

#include <stdio.h>
extern int x;
void a()
{
    int x=100;
    printf("% d ",x);
    x+=5;
}
void b()
{
    static int x=-10;
    printf("%d ",x);
    x+=5;

}
void c()
{

    printf("%d ",x);
    x+=2;
}
int main()
{
    int x=10;
    a();
    b();
    c();
    a();
    b();
    c();
    printf("%d ",x); 
    return 0;
}
int x=0;

void c()
{

    printf("%d ",x);
    x+=2;
}

它不会使用在定义函数b()分配的x的静态副本。

它将使用您在程序最后一行中声明的变量x的全局副本。

int x=0;

将x的最后一行更改为其他值,并且c()输出将更改


为什么是全球性的而不是静态的?

因此,这里的静态变量x仅限于b()主体,因此在c()中不能使用它。

c()取决于x的全局副本。 如果删除x的全局定义,则在C()中将给出编译错误。

您误解了可变范围。

变量xa()与不同xb()和与全球不同x (这些功能的)

它们具有相同的名称x ,但它们在内存中使用差异定位符。

只需阅读有关C中的局部变量和全局变量的内容,您就会发现问题所在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM