C++ & 符号及其内存管理的种类

一、C++ & 符号

两种含义: 引用变量 和取地址符号

在函数参数里面,是作为变量的别名被传过来的

当看到&a这样的形式时,怎样区别是声明引用变量还是取地址的操作呢?当&a的前面有类型符时(如int &a),它必然是对引用的声明;如果前面无类型符(如cout<<&a),则是取变量的地址。

  1. 使用引用类型就不必在swap函数中声明形参是指针变量。指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元
  2. 在main函数中调用swap函数时,实参不必用变量的地址(在变量名的前面加&),而直接用变量名。系统向形参传送的是实参的地址而不是实参的值。
    这种传递方式相当于Pascal语言中的“变量形参”,显然,这种用法比使用指针变量简单、直观、方便。使用变量的引用,可以部分代替指针的操作。有些过去只能用指针来处理的问题,现在可以用引用来代替,从而降低了程序设计的难度。
引发这个问题的探究是因为在一个未初始化的一个对象,当作为实参传给一个函数,若函数的形参就是一个普通的值则会出现未初始化的错误,但是若形参是一个引用型变量,则无此错误。未初始的对象由于无值可传到函数的形参中,所以出错,但是他的地址是有的,可以传给形参。
二、内存管理

http://wenku.baidu.com/view/00ae390202020740be1e9b8a.html

有堆跟栈的详细比较。


1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。 
2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间。 
  heap: 需要程序员自己申请,并指明大小,在C中malloc函数,C++中是new运算符。   如p1 = (char *)malloc(10); p1 = new char[10];   如p2 = (char *)malloc(10); p2 = new char[20];   但是注意p1、p2本身是在栈中的
  
3、全局区(静态区)(static)—编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放 
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 

5、程序代码区—存放函数体的二进制代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值