首页 > 代码库 > 引用 与 指针
引用 与 指针
我们知道,引用 和 指针都是C++的符合类型之一。
一 关于引用
引用(reference) 是为对象起了另外一个名字,引用类型 引用 另外一种类型。
和初始化变量不同的是, 在定义引用的时候,程序把引用和它的初始值 绑定 在一起,而不是把初始值拷贝给引用。两者是绑定在一起,那么,就可以通过引用去修改初始值:
例: int val = 20; int &ri = val ; ri = 82; 那么此时val的值也会更改为82,反之成立。
一但初始化完成,引用将和它的初始值对象一直绑定在一起,无法重新绑定其他的对象,因此,引用必须初始化。形如 int &ri ;就是错误的 ,因为其没有初始化。
tip1: 引用的本身并不是对象,所以无法定义引用的引用。
tip2 : 引用必须绑定在一个对象上,引用类型的初始值必须是一个对象。 int &ref = 0 ; //错误 ,引用类型的初始值必须是一个对象。
二 关于引用的部分使用
1、传递可变参数
函数参数不具备传递值得作用,我们可以通过引用的使用来传递可变参数。
2、给函数传递大型对象
当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的
副本,也就是参数传递时,对象无须复制。可以极大的节省内存使用。
三 关于指针
指针 与引用类似,也能完成对其他的对象的间接访问。
但是, ① 指针本身是一个对象,允许指针赋值和拷贝,而且在其生命周期内允许指向多个不同的对象。②指针无须在定义时赋初值。
但是, ① 指针本身是一个对象,允许指针赋值和拷贝,而且在其生命周期内允许指向多个不同的对象。②指针无须在定义时赋初值。
指针 本身存放的是一个对象的 地址。如果有这样的代码 int a = 20; int *p = a; std::cout << p; 会输出一个地址给你 。而且其在获取对象的地址的时候,需在对象前面加上一个取地址符“&”;tip : 注意其和引用的区别。
tip : 我们从上文中可以知道,引用本身并不是一个对象,所以无法定义指向引用的指针。这点也可以侧面说明对象前面的 & 不是取地址符。
tip : 值得注意的是,除特殊的情况外, 其他所有指针的类型都必须和它所指向对象严格匹配。如果不匹配,操作会出现错误。
建议:
建议初始化所有的指针!
虽然说到指针在定义时无须赋初始值,但是使用未定义的指针会造成程序运行错误,且其后果无法预计, 一般会造成程序崩溃。在多数的编译器环境下,其会将未初始化的指针所占内存空间的当前内容看成一个地址值,访问该指针,相当于去访问一个本不存在的位置上的本不存在的对象,如果这个位置本来有内容,那么找错误就非常的麻烦了。
这里特别提一下 void* 指针。
这是一种特殊的指针类型,可以用于存放任意对象的地址,一一对应。概括来说,void* 的视角来看内存空间也就仅仅是内存空间,没办法访问。
tip : 指针通常难以理解,即使是有经验的程序猿也常常因为调试指针引发的错误而备受折磨。
参考书籍 《c++ primer》
引用 与 指针
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。