扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
目录
创新互联主要从事网站设计制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务余姚,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108局部变量的认识:
自动变量(栈区变量)特性:
静态存储区与全局变量:
全局变量的声明和定义:
static静态全局变量:
什么是内存分区?
分为5个区:栈区,堆区,全局静态区,字符常量区,代码区。
前景回顾:
1、什么是栈区?内存由系统申请,由系统释放(int a,中的a,就是存在于栈区,同时也可以叫自动变量)。
2、什么是堆区?内存由我们申请,由我们释放。
什么是自动变量(栈区变量/局部变量)指的是一个东西,三个名字:
种类:1、int a;
2、int a[4];
3、int *p;(malloc的空间不是变量)
指针它是栈区的,它所指向的是malloc返回的首地址,也就是栈区(*p)里面装了堆区。
4、struct AAA a[3];
局部变量/栈区变量:
栈区变量/局部变量,一定是定义在{}内。({}内是代码段)
比如函数内,函数形参,if,for,while,switch,do while的结构内
都有花括号,只要是有花括号,就是一个封闭的代码段。
注意:
结构体的花括号的成员可不是局部变量的意义。
自动变量(栈区变量)特性:1、生命周期:从定义,到花括号结束,给便来给你被自动释放。
2、作用域:所在花括号,除了花括号,名字就没用了,所以叫局部变量,局部起作用。
有图有真相:
局部变量的特点:
auto:自动变量是有auto来修饰的,由于平时写的太多了,每次都写有浪费时间,所以默认不屑跟写了是一样事儿的,自动有。这个auto就叫存储类型说明符,说明变量a是栈区存储的。
auto int a;(显式)
int a;(隐式)
1、函数形参也是局部变量:
void fun(int);//函数声明的作用域
就是这一行,所以可写可不写
void fun(int a)
{
}//定义函数的a的作用域是从定义开始到函数结尾。
2、函数不能返回局部变量地址:
3、同一个作用域内,变量不能重名:
一山不容二虎(专业名词是:屏蔽);
4、不同的作用域内,可以重名,作用域嵌套,在小作用域内,小的起作用,覆盖大的。
5、作用域无关系,即,没有任何关系。
注意此程序:外a的作用域和内a的作用域
静态存储区与全局变量:特点:
1、内存区域:静态区域/静态全局区/静态存储区。
2、内存特点:
(1)会被自动初始化为0(如下)
(2)生命周期与程序共存亡
(3)运行时,在加载资源阶段分配空间
加载资源区:软件运行期间所必要的一些东西
全局变量外部变量的位置:写在全局的位置
全局变量自动初始化为0,指针,基本数据类型。结构体都一样。
全局变量和局部变量重名,在局部位置的变量才是有效的。(跟上一节的一样)
(全局变量未完)
全局变量的声明和定义:全局位置的注意点:不能写一些执行语句,只能写一些声明初始化(常量)
比如:
1、printf()报错
2、malloc报错
3、int e = a+2;DEV不会报错
全局变量的生命周期是与程序共存亡的。
定义只能有一个,声明也只能有一个,但是函数可以声明多个,但同时也只能定义一个。
extern:
static静态全局变量:什么是静态全局变量?顾名思义,就是将全局变量变成静态的。
即加上一个存储类说明符struct。
生命周期与程序共存亡。
作用域,只在所在的文件内有效,别的文件用不了
_____________________________________________________________________________
由于本人才疏学浅,如果读者有任何意见,请积极指出!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流