初始变量的作用域和生命周期

作用域(scope)

作用域是程序设计的概念,通常来说,一般程序的代码中所用到的名字并不总是有效或者可用的。而先动这个名字的可用性的代码范围就是这个名字的作用域。

简而言之,一个变量在哪里可以使用,则哪里就是它的可用域。(就是自己所在的大括号内)

局部变量的可用域:即变量所在的局部范围

1
2
3
4
5
6
int main()
{
int a = 10;
printf("a=%d\n", a);
return 0;
}

1
2
3
4
5
6
7
8
int main()
{
printf("a=%d\n", a);
{
int a = 10;
}
return 0;
}

1
2
3
4
5
6
7
8
int main()
{
{
int a = 10;
}
printf("a=%d\n", a);
return 0;
}

从上面三个例子可以看到,只有当printf与要打印的变量a同时在一个打括号内,才会起作用。

全局变量的作用域:是整个工程

举个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
int global = 2022;
int main()
{
printf("1:%d\n",global);
printf("mozi\n");
{
int a = 10;
printf("a=%d\n", a);
printf("2:%d\n",global);
}
printf("3:%d\n",global);
return 0;
}

根据上面的结果我们得知,全局变量可以在该源文件的任意一个位置得以调用

那么已经说了全局变量的作用域是整个工程,那我再新建一个源文件谁不是也可以调用出来?

那就来试验一下

结果告诉我们不可以直接调用,那有没有什么方法可以调用出来呢?

答案是用的,在调用另一个源文件的全局变量之前,我们要声明一下所需要调用的全局变量

1
extern int global

好现在就成功了

生命周期

一个生物的生命周期是其从出生到死亡的时间段

一个变量的生命周期是其从创建到销毁的时间段

局部变量的生命周期

局部变量的生命周期是进入局部范围开始,离开局部范围结束

1
2
3
4
5
6
7
8
int main()
{
{
int a = 10; //创建
printf("%d\n", a);
} //销毁
return 0;
}

全局变量的生命周期

全局变量的生命周期是整个程序的生命周期9