一、存储位置
1、只读区域:存储常量和变量,例如下面的*p指针,一般是不允许改变的。
2、全局、静态存储区:在C语言中,全局变量分为初始化和未初始化的全局变量,初始化的全局变量和静态变量存储在data区,未初始化的全局变量和静态变量存储在bss区,而c++没有区分,他们占有共同区域。例如下面 的var、unvar、static_var、static_var1这些。
3、自由存储区:自由存储区通过malloc和free管理的区域(在C运行时库),在有些系统中自由存储区和堆都是同一区统称为堆,例如pn.
4、栈区:栈区中存储的数据由编译器自动分配释放,主要存放函数的参数值、局部变量,例如:nNumber、nNumber1.
5、堆区:由new、 delete分配和释放的内存块,编译器不负责,例如;p1.
int var=100;//初始化全局变量
Int unvar;//初始化的全局变量
void fun(int)
{
printf("....");
}
int main()
{
static int static_var=101;//初始化局部静态变量
staitc int static_var1;//初始化局部静态变量
int nNumber=1;//初始局部变量;
int nNumber1;//未初始化局部,随机值
fun(static_var+static_var1+nNumber+nNumber1);
char *p="bianliang";//指向常量bianlinag的指针
char *p1=new char;//指向堆区的内存局部指针变量
delete p1;
int *pn=static_cast<int*>(malloc(sizeof(int)));//分配在自由存储区的
free(pn);
return 0;
}
二、按作用域:全局变量在整个工程文件内都是有效的;静态全局变量只在定义它的文件内有效;静态局部不变量只在它的函数内有效,
1、全局变量和局部变量如果没有手动初始化,编译器初始化为0。
2、局部变量是编译器不会初始化,如果没有初始化,则值为随机值。
全局变量没有定义存储类型的外部变量,其作用域从定义点到程序结束,省略了存储类型符,系统默认为自动存储类型,静态全局变量有类型符。