//一,变量的作用域
1,局部变量 :
1,函数内部定义的变量
2,只在定义它的函数内部有效
2,全局变量
1,在所有函数外部定义的变量
2,从定义变量的位置开始到源程序结束
int a;//全局变量
int main()
{
int b;//局部变量
return 0;
}
//二,变量存储类型
1,变量存储的地方
普通内存,运行时堆栈,硬件寄存器
2,决定:
变量何时创建,何时销毁,值能保存多久。
3,分为 :
自动变量,静态变量,寄存器变量
1,自动变量
1,存储在堆栈中
2,auot修饰的局部变量都是自动变量,局部变量默认情况下都是自动变量
3,程序执行到此代码块,自动变量被创建。
此代码块执行完毕,自动变量自行销毁。
函数被重复调用,自动变量每次都创建
void test(int a,int b)//a,b自动变量
{
int c = a+b;//c自动变量
auto int d;//d自动变量
}
2,静态变量
1,存储在静态变量中,也就是不属于堆栈
2,所有全局变量,
关键字 static 修饰的局部变量
3,程序运行之前创建,程序运行期间始终存在,直到程序结束
#include <stdio.h>
int a;//a静态变量
void test()
{
static int b=0;//b静态变量 ,创建一次,延续到程序结束。本行只执行一次,下次调用test函数时,b不会初始化。
b++;
int c = 0;//c自动变量
c++;
printf("b=%d,c=%d\n",b,c)
}
int main(){
int i;//i自动变量
for(i=0;i<3;i++){
test();
}
}
3,寄存器变量
1,存储在硬件寄存器中的变量
比存储在内存中的变量访问效率高
2,关键字register修饰的自动变量,
仅自动变量才可以是寄存变量,全局变量和静态局部变量不行。
寄存器变量只限于int,char,指针类型变量使用。
3, 函数中的寄存器变量在调用该函数时占用寄存器中存放的值,
当函数结束时释放寄存器,变量消失。
4,使用注意
1,寄存器数目有限,寄存变量不能使用太多。
寄存器使用饱和时,程序将寄存变量转换为自动变量。
2,频繁使用的自动变量定义为寄存变量,提高运算速度。
int main(){
register int a;//a为寄存变量
return 0;
}