描述一个变量:存储时期、作用域、链接
存储时期:变量在内存中保留的时间----->变量的生命周期
1.自动局部变量
空间:栈区
生:函数被调用的时候,空间才分配
死:函数调用结束,空间才释放
2.静态局部变量(static int a;)
空间:静态区
生:函数第一次被调用的时候,空间才分配
死:函数调用结束,空间并不会释放,只有程序结束时空间才会释放
静态局部变量空间只会在第一次被调用的时候,空间才执行分配,之后的调用,不执行分配(直接跳过 static int b=1; 保留上次调用的值)
static修饰局部变量时,改变局部变量的生命周期,变长;但不会改变作用域
void add(int a)
{
static int b=1;
b=a+b;
printf("%d",b);
}
3.全局变量:(只有三种定义写法int a; static int a; volatile int a;)
空间:静态区
生:程序运行时,空间就分配了
死:程序结束时,空间才释放
全局变量在执行main函数前就会在静态区分配空间
作用域:标识符的作用域
标识符可以在什么范围内使用
1.块作用域
在{ }中定义的变量,{ }结束,里面的变量释放空间
只能在{ }中使用
如:局部变量
2.文件作用域
在函数外部定义的 通常在Main函数前面定义的
可以在整个文件中使用
全局变量、函数名、类型别名、宏名、结构体名等通常在文件作用域
3.函数作用域
标签名 如:goto
在一个函数中使用
4.函数原型作用域
形参
int sp(int a,int b)// sp:文件作用域 a、b函数原型作用域
链接:
链接阶段,是否可以供其他文件使用
可以供其他文件使用:外部链接 用于文件间的交流
只能本文件使用的:内部链接(在全局变量前加static:static int a;)
不能在一个文件中通用,如局部变量:空链接
1.空链接 不会共享
局部变量
2.内部链接 在本文件中,被所有函数共享(static int a;)
可用于函数之间的交流
3.外部链接 在工程中,被所有文件共享(全局变量:int a;)
可用于文件之间的交流
static修饰全局变量,不会改变其空间
而是修改了全局变量的连接属性,使其具有内部链接,仅供本文件使用
存储时期:变量在内存中保留的时间----->变量的生命周期
1.自动局部变量
空间:栈区
生:函数被调用的时候,空间才分配
死:函数调用结束,空间才释放
2.静态局部变量(static int a;)
空间:静态区
生:函数第一次被调用的时候,空间才分配
死:函数调用结束,空间并不会释放,只有程序结束时空间才会释放
静态局部变量空间只会在第一次被调用的时候,空间才执行分配,之后的调用,不执行分配(直接跳过 static int b=1; 保留上次调用的值)
static修饰局部变量时,改变局部变量的生命周期,变长;但不会改变作用域
void add(int a)
{
static int b=1;
b=a+b;
printf("%d",b);
}
3.全局变量:(只有三种定义写法int a; static int a; volatile int a;)
空间:静态区
生:程序运行时,空间就分配了
死:程序结束时,空间才释放
全局变量在执行main函数前就会在静态区分配空间
作用域:标识符的作用域
标识符可以在什么范围内使用
1.块作用域
在{ }中定义的变量,{ }结束,里面的变量释放空间
只能在{ }中使用
如:局部变量
2.文件作用域
在函数外部定义的 通常在Main函数前面定义的
可以在整个文件中使用
全局变量、函数名、类型别名、宏名、结构体名等通常在文件作用域
3.函数作用域
标签名 如:goto
在一个函数中使用
4.函数原型作用域
形参
int sp(int a,int b)// sp:文件作用域 a、b函数原型作用域
链接:
链接阶段,是否可以供其他文件使用
可以供其他文件使用:外部链接 用于文件间的交流
只能本文件使用的:内部链接(在全局变量前加static:static int a;)
不能在一个文件中通用,如局部变量:空链接
1.空链接 不会共享
局部变量
2.内部链接 在本文件中,被所有函数共享(static int a;)
可用于函数之间的交流
3.外部链接 在工程中,被所有文件共享(全局变量:int a;)
可用于文件之间的交流
static修饰全局变量,不会改变其空间
而是修改了全局变量的连接属性,使其具有内部链接,仅供本文件使用