1 局部变量:
1.1 含义:
作用域范围有效的变量
1.2 内容:
- 函数的形参也是局部变量,出了函数之后作用域范围就会被释放
- 在哪个{ }大括号里定义的,只能在哪个大括号里使用,且出了{ }大括号后作用域范围就会被释放
- 例:
#include<stdio.h> int main() { int temp=2;//for循环外局部变量 printf("%d ",temp); for(int i=0;i<1;i++) { int temp=2; //for循环内局部变量 printf("%d\n",temp); } //局部变量的生命周期:从定义开始到出作用域范围(大括号)后结束 return 0; } 输出结果:2 3 /*由输出结果以上两个局部变量并不冲突, 可知局部变量在哪个{ }大括号里定义的,只能在哪个大括号里使用 且对于包含关系的作用域来说若出现定义相同局部变量名则会以其本身内部定义的为主, 局部变量出了{ }大括号后作用域范围就会被释放*/
注意:在同一作用域下不能有重名的变量,包含关系作用域除外
2 全局变量:
2.1 含义:
作用域范围全局下有效(不属于任何一个{ }大括号)
2.2 内容:
#include <stdio.h>
int m=0;//全局变量:需要先定义后使用
int fun()
{
return m;
}
int main()
{
printf("%d %d",m,fun());
return 0;
}
//输出结果为:0 0
//可知全局变量可在项目的全局作用域下使用
3 静态变量:
3.1 含义:
生命周期是全局,作用域仍然有限,在哪个{ }大括号里定义的,只能在哪个大括号里使用,但是作用域范围不会被释放,直到程序结束后才会被释放
3.2 内容:
3.2.1 区分:动态变量:所有的局部变量都是动态存储的,生命周期是有限的,出了局部就会被释放掉
3.2.2 例:
#include<stdio.h>
void test1() //普通变量测试函数
{
int i = 0;//普通局部变量: 多次执行定义语句时会被重新定义和初始化
printf("%d\t", i++);
}
-----------------------------------------------------------------------------
void test2() //静态变量测试函数
{
static int i = 0; //静态局部变量:多次执行定义语句时不会被重新定义和初始化
printf("%d\t", i++);
}
-----------------------------------------------------------------------------
int main()//主函数
{
for (int i = 0; i < 10; i++)
{
test1();
//结果:
//0 1 2 3 4 5 6 7 8 9
//0 0 0 0 0 0 0 0 0 0√
}
putchar('\n');
-----------------------------------------------------------------------------
for (int i = 0; i < 10; i++)
{
test2();
//结果:
//0 1 2 3 4 5 6 7 8 9√
//0 0 0 0 0 0 0 0 0 0
return 0;
}
3.3 静态全局变量:
3.3.1 含义:
生命周期是全局,作用域也是全局(与普通全局变量作用基本相似),但不同的是:静态全局变量在一个项目中只在创建定义的那个文件中全局有效,在其他文件中无效;而全局变量则在整个项目文件中有效,无论那个文件创建定义
3.3.2 语法:
//例:
#include <stdio.h>
static int n = 10; //静态全局变量
int main()
{
·········;
return 0;
}