变量的作用域是变量名可以被使用的所有代码范围
全局变量的作用域是所有语句,它们被声明在所有函数外边
没有初始化的全局变量自动被初始化成0
局部变量的作用域是它所属的函数内部所有语句。
块变量是声明在语句块中的变量,它们的作用域是语句块内的所有语句
/*
作用域练习
*/
#include <stdio.h>
int num; //全局变量
void func() {
int num1 = 0; //局部变量
printf("num1是%d\n", num1);
//printf("num2是%d\n", num2); 不在作用域
printf("num是%d\n", num);
}
int main() {
int num2 = 0; //局部变量
printf("num是%d\n", num);
//printf("num1是%d\n", num1); 不在作用域
printf("num2是%d\n", num2);
{
int num3 = 0; //块变量
{
int num4 = 0;
printf("num3是%d\n", num3);
printf("num4是%d\n", num4);
}
printf("num3是%d\n", num3);
//printf("num4是%d\n", num4); 不在作用域
}
//printf("num3是%d\n", num3); 不在作用域
//printf("num4是%d\n", num4); 不在作用域
return 0;
}
变量的生命周期指变量可以被使用的时间范围
全局变量在整个程序运行期间有效
局部变量只在函数运行期间有效
块变量只在语句块运行期间有效
普通局部变量都是auto类型的,它们的生命周期是函数运行期间
static类型的局部变量叫做静态局部变量,它们的生命周期是整个程序运行期间。
没有初始化的局部变量会自动被初始化成0
静态局部变量的初始化语句只在程序开始时执行一次
/*
生命周期练习
*/
#include <stdio.h>
int f1() {
static int num = 10000;
printf("num是%d\n", num);
num = 3;
}
int f2() {
int num = 0;
int num1 = 1;
int num2 = num + num1;
int num3 = 0 - num2;
}
int main() {
f1();
f2();
f1();
return 0;
}
思考题:
省略所有函数的数组参数作为前提
1.圈叉棋中的二维数组可不可以使用全局变量代替
2.可不可以使用静态局部变量代替