经验1 局部变量与全局变量的区别

一、存储位置

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、局部变量是编译器不会初始化,如果没有初始化,则值为随机值。

全局变量没有定义存储类型的外部变量,其作用域从定义点到程序结束,省略了存储类型符,系统默认为自动存储类型,静态全局变量有类型符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值