二、生存期
-
静态存储期
-
自动存储期
具有文件作用域的变量属于静态存储期,函数也属于静态存储期,属于静态存储期的变量 在程序执行中一直占据内存,直到程序结束才释放空间。具有代码块作用域的变量属于自动存储期, 属于自动存储期的变量在代码块结束后自动释放存储空间
三、存储类型
存储类型就是指储存变量值的内存类型
-
auto
在代码块中声明的变量,默认的存储类型就是自动变量, 使用关键字auto来描述,因为时默认类型,所以不写也是完全可以的, 当在代码块中声明的变量与全局变量命名有冲突时,推荐写上auto关键字
-
register
寄存器变量,当你使用寄存器关键字声明变量时,该变量就有可能存储在cpu的寄存器当中, 一旦申明为寄存器变量,那么将不允许有对其取地址的操作行为。
#include <stdio.h>
int main()
{
register int i = 0;
printf("%p", &i);
return 0;
}
-
static
使用static声明局部变量,可以将局部变量指定为静态局部变量,拥有静态存储期, 直到程序结束才释放内存空间
#include <stdio.h>
void func()
{
static int count = 0;//static声明局部变量,该局部变量拥有静态存储期,注意还是局部变量
printf("%d\n", count);
count++;
}
int count = 0;
int main()
{
for (int i = 0; i < 10; i++)
func();
return 0;
}