输出为: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;
答案 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中的本地和全局变量,您就会发现问题。