[英]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()中将给出编译错误。
您误解了可变范围。
变量x
在a()
与不同x
中b()
和与全球不同x
(这些功能的)
它们具有相同的名称x
,但它们在内存中使用差异定位符。
只需阅读有关C中的局部变量和全局变量的内容,您就会发现问题所在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.