什么是值传递、引用传递、指针传递

来源:互联网 发布:pscc2017 for mac破解 编辑:程序博客网 时间:2024/04/29 08:49

一、变量、引用、指针

 

1、变量

int a ;

当C++编译器,读到我们写的这一行,它为我们做了什么事?

要知道,在硬件层,内存这个东西是没有名字的,唯一的标记就是地址。

 

所以,C++编程器一定要做两件事。在内存中划分一段以供使用的区域。为了方便使用这段区域,为其起一个名字。

 

对此我们可以这样理解: 第一行,C++编译器为我们划分了一段内存块,这段内存的大小通过分析类型名“int"来决定。而"a"相当编程器为这段内存起的一个名字,也就是一个标记

 

2、引用

int& b = a;

 

声明变量,会创建一段内存块,而引用不会创建内存空间。

 

引用不负责分配空间,引用和‘变量名’一样,只是一段内存的一个标记。之所以引用必须在声明时初始化就在于此。

 

b和a这两者做为标记他们的内容其实是相同的,他们都是指向了同一段地址。所以书中说“引用只是变量的一个别名”。

 

为什么说使用引用没有内存消耗也就是这个原因。因为不管是‘a'也好,'b'也好,都只是编程器时期所使用的标记。程序在执行过程中,都会转换为机器码。(具体如何工作的不是这里可以讨论的。因为我也不知道啊- -)

 

3、指针

int* b;

 

这一行,编译器做的工作和创建一般变量没什么不同。同样是创建了一段内存块。只不过不论类型名是什么。创建的肯定是一段4字节的空间(32位机上是4字节)。

这段空间存放一段地址数据。如何为其赋值,就是C++编译器决定的。

 

 

二、值传递、引用传递、指针传递

 

接下来分析参数传递就容易多了,值传递无无疑,将传递的变量拷贝一份。对象传递时将自动调用拷贝构造。

指针传递,就是将指针的值进行传递。

而引用传递,实际上传递的是一个‘标记’。因为这个‘标记’并不占用内存空间,所以并无资源消耗。

 

 

  

 

编程免不了数据间的传递,传递的时候要避免多余的内存开销。

 

原创粉丝点击