全局变量和局部变量与NEW申请的堆区操作

一、全局变量和局部变量与结构体

1.全局变量(  在函数外定义的变量)

  在函数外定义的变量通常会存与内存的全局区中,即为全局变量;全局变量若不在初始化时赋值,默认值为0,对于全局变量,一个项目下的所有文件都可以对该全局变量进行使用,也就是说,全局区的作用域为整个项目,全局变量与局部变量同名的时候并不会冲突。

2.局部变量(在函数内定义的变量)

  在函数内定义的变量通常会存于内存的栈区中,及为局部变量;局部变量若不在初始化时赋值,则初始值是没有值的(没有随机数),对于局部变量,只有在该变量所在的函数中才能使用,也就是说,栈区的作用域从其定义开始到大括号结束,并且局部变量同名时会出现重定义的错误。如果全局变量和局部变量定义重名是不会出错的这里的遵循就近原则 :局部大于全局

补充:初始化定义一个变量的同时给他赋值就是初始化

      例 int a=9;

但是 int a;  a=9就不是初始化了。

3.C++环境:struct Arr{};这里的Arr可以直接表示结构体类型      在C环境中struct Arr才表示结构体类型需要起别名减小结构体类型长度typedef来起别名;

4.#开头的语句都是预处理指令(文本替换)例#pragma  pack(4)这里的4就是对齐数了

二、new和delete的堆区操作(C++)

  new是C++环境特有的开辟(申请)内存空间的语句,其底层就是malloc函数(<cstdlib>C环境下),但不同之处在于new可以为结构体中的string类型变量开辟空间,而由于malloc是C环境下的函数,则无法开辟string类型(C++特有的)的空间,new的使用方式如下

例1:

int* p2=new int;

      (这里申请的空间内部为随机值)

  例1代码为申请一块int类型的空间,与malloc相同,new返回的也是所开辟空间的地址,因此对其进行操作时,应传递给相应类型的指针变量。对该变量进行操作有两种方式:

cout<<p2[0]<<" "<<*p2<<endl;

  可以同数组一样,直接通过下标访问该地址,或者用在变量名前加符号“*”表示该地址下的数值。

  下面的例2则为申请的同时进行构造,进行初始化赋值,此时p3的值为5;

例2:

int* p3=new int(5);

  若想申请多块空间,只需在变量类型的后面加上中括号,中括号内部为空间的大小,这个大小也可以是变量:

例3:

1.   int* q=new int[10]{1,2,3,4};

2.            int* q=new int[10];

  例3 1为申请10块Int类型的空间,通过*q取得地址,并用大括号进行初始化,数组内部的值q[0]=1;q[1]=2;等等其余没有初始化的如q[6]=0;但是如果没有进行部分初始化如2的话其中的值都为随机数。delete []p释放空间  ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值