局部变量和全局变量
局部变量
局部变量也叫做auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,有如下特点:
1、作用域 在一个函数内定义,只在函数访问内有效;
2、作用域 在复合语句中定义,只在复合语句中有效;
3、生命周期 随着函数调用的结束或复合语句的结束局部变量的声明声明周期也结束;
4、如果没有赋初值,内容为随机;
#include<stdio.h>
void test()
{
//auto写不写都一样
//auto值能出现在{}内
auto int b=10;
}
int main()
{
//b=10; err,在main作用域中没有b
if(1)
{
//在复合语句中定义,只在复合语句中有效
int a=10;
printf("a=%d\n",a);
}
//a=10; err,离开if()语句,a就已经不存在了
return 0;
}
全局变量
1、在函数外部定义的变量
2、作用域 整个项目中所有文件,如果在其他文件中使用需要声明(extern)
3、生命周期 从程序创建到程序销毁
#include<stdio.h>
int a=10;
void fun01()
{
a=100;
priintf("%d\n",a);
}
int main()
{
//全局变量和局部变量同时存在时会采用就近原则
int a=20;
//匿名内部函数
{
int a=30;//从新在{}内定义了a的值为局部变量
//a=30;//对a进行从新赋值,仍为全局变量
priintf("%d\n",a);
}
priintf("%d\n",a);
fun01();
return 0;
}
输出结果:20
//30
20
100
静态变量
静态(static)局部变量
1、作用域 定义的函数中有效
2、生命周期 和程序运行周期一样,同时静态局部变量的值只初始化一次,但可以多次赋值;
3、静态局部变量若未赋初始值,则由系统自动赋值,数值型
变量自动赋值0,字符型哪里知道赋空字符;
#include<stdio.h>
void fun02()
{
int a=10;
a++;
printf("%d\n",a);
}
int main()
{
for(int i=0;i<5;i++)
{
fun02();
}
return 0;
}
输出结果:11
11
11
11
11
#include<stdio.h>
void fun02()
{
//静态局部变量的值只初始化一次,但可以多次赋值
//执行完一次后a的值不会主动释放,eg:执行完第一次时a的值为11,并且作为下一次执行时的初始值
//在数据区存储
static int a=10;
a++;
printf("%d\n",a);
}
int main()
{
for(int i=0;i<5;i++)
{
fun02();
}
return 0;
}
输出结果:11
12
13
14
15
静态全局变量
1、作用域 可以在本文件中使用,不可以在起亚文件中使用
2、生命周期 程序创建到程序销毁
#include<stdio.h>
static a=10;//静态全局变量
void fun03()
{
a=20;
printf("%d\n",a);
}
int main()
{
fun03();
printf("%d\n",a);
}
输出结果:20
10