1 本地变量
定义在函数体内的变量称为本地变量
1.1 本地变量定义时不初始化,则初值为任意值
1.2 本地变量的作用域与生存周期
本地变量的生存周期是从进入函数产生,退出函数消亡。本地变量的作用域在函数内。
1.3 静态本地变量
在本地变量前加上关键字stati,则一般本地变量变成静态本地变量。静态本地变量的作用域不变,但生存周期改变,其退出函数时,内存空间不释放,等下一次进入函数时值为上次进入时的值。如下代码所示:
#include<stdio.h>
void get_value(void);
void main(void)
{
printf("第1次进入get_value函数:\n");
get_value();
printf("第2次进入get_value函数:\n");
get_value();
}
void get_value(void)
{
int a=0;
static int b=0;
printf("加之前a=%d,b=%d\n",a,b);
a++;
b++;
printf("加之后a=%d,b=%d\n",a,b);
}
运行结果为:
第1次进入get_value函数:
加之前a=0,b=0
加之后a=1,b=1
第2次进入get_value函数:
加之前a=0,b=1
加之后a=1,b=2
而且,静态本地变量与本地变量并不存放在一个区域,和全局变量存放在一个区域。如下代码所示:
#include<stdio.h>
int c=0;
void get_value(void);
void main(void)
{
get_value();
}
void get_value(void)
{
int a=0;
static int b=0;
printf("本地变量a的地址 :%p\n",&a);
printf("静态本地变量b的地址:%p\n",&b);
printf("全局变量c的地址 :%p\n",&c);
}
运行结果为:
本地变量a的地址 :000000000061FDEC
静态本地变量b的地址:0000000000407034
全局变量c的地址 :0000000000407030
2 全局变量
全局变量是指在函数体外定义的变量。
2.1 全局变量初始化
全局变量定义时不初始化,则默认值为0.且全局变量的初始化只能用编译时确定的值进行,包含其之前的const 量。
2.1 全局变量的作用域和生存周期
作用域:一般是整个代码文件,但是如果在函数体内或代码块内定义了同名局部变量,则在该函数体内或代码块内,同名局部变量的优先级更高。
生存周期:整个代码文件内
3 函数返回本地变量的指针
本地变量在其所定义的函数运行完后并未立即释放,只是失去控制。当另一个函数用到它的内存时,被那一个函数控制。所以函数返回指针一般不反回本地变量的指针。