静态变量和本地

时间:2016-01-27 09:22:05

标签: c static

输出为: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;

2 个答案:

答案 0 :(得分:4)

void c()
{

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

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

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

int x=0;

将x的最后一行更改为不同的值,并将更改c()

的输出

为什么是全球性而非静态?

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

c()取决于x的全局副本。如果删除x的全局定义,那么在C()中它将产生编译错误。

答案 1 :(得分:0)

你误解了变量范围。

x中的变量a()x中的b()不同,并且与全局x不同(在这些函数中)

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

只需阅读C中的本地和全局变量,您就会发现问题。