引用 与 指针

  我们知道,引用 和 指针都是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》

时间: 2024-12-05 11:45:50

引用 与 指针的相关文章

java定义类 对象,引用,指针

java是根据面向对象编程,因此有类和对象的概念,类分为普通类与抽象类. 一.定义类 类由N个 构造器  成员变量  方法组成,可以不定义,也可以根据语法定义N个. [修饰符] class 类名{ 构造器*N个 成员变量*N个 方法*N个 } 1.类的修饰符只能是public final abstract 三种之一,或者不修饰 ,类名一般大写开头,驼峰命名 (一).成员变量的定义 [修饰符] 数据类型  变量名 : [修饰符] 数据类型  变量名  = 默认值: 1.修饰符:  可以不写(默认)

C++引用与指针的区别

转!!!! http://blog.csdn.net/wangqiulin123456/article/details/8464418 虽然使用引用和指针都可以间接访问另一个值,但他们之间有两个重要区别: 引用总是指向某个对象,定义引用没有初始化是错误的. 赋值行为的差异,给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联.引用一经初始化,就始终指向同一个特定对象. ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★

引用计数指针

如前面内存泄露中所讲的,引用计数指针可以被复制.因此,一个智能指针的几份拷贝可以指向同一个对象.这就产生了由哪份拷贝负责删除它们共同指向的对象这个问题.答案是这组智能指针中最后消亡的那个将删除它所指向的对象.这类似于家居规则:"最后一个离开屋子的人负责关灯."为了实现这个算法,这些指针共享一个计数器,记录有多少个智能指针引用同一个对象,即"引用计数"这个术语的由来.引用计数的应用范围很广:这个术语简单意味着,编译器具有一个隐藏的整型变量作为计数器.每当有人创建了一个

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):当函数返回一个局部对象时,虽然这个对象已经释放,但是返回时会产生一个临时的对象.而当返回一个局部对象的引用时,这个对象已经不存在了.这就要求在函数参数中,包含一个引用或指针.int &func(int a,int b,int &retsult){ retsult = a + b; return &retsult}但是如下代码是错误的(返回局部对象的引用)int &func(int a,int b){ int &

引用与指针的区别

引用:相当于给一个变量取的别名,它本身不是一种数据类型,因此不战用存储空间,不能建立数组的引用 引用作为函数参数:当发生函数调用时,用引用作为参数,在内存中并不会产生实参的副本,也不会给引用这个形参分配空间, 而是直接对实参进行操作,但如果用一般变量作为函数参数,则会给它分配空间,并且作为实参的副本,如果 传递的是对象,还将调用拷贝构造函数 引用与指针的区别:相同点:引用与指针都会导致实参对象值的改变 不同点:a.引用不用分配空间,指针要分配空间,且指针作为形参在调用时,必须用变量的地址作为实参

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

浅谈C/C++引用和指针的联系和区别

为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针.不止C/C++使用指针. 每一种编程语言都使用指针.C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了. "Everything uses pointers. C++ just exposes them rather than hiding them," It's easier to give someone an address to your home than to give a

引用与指针

引用是C 中的概念,初学者容易把引用和指针混淆一起. 一下程序中,n是m的一个引用(reference),m是被引用物(referent). int m; int &n = m; n相当于m的别名(绰号),对n的任何操作就是对m的操作. 所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己. 引用的规则: (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化). (2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL). (3)一旦引用被初始化,就不能改

【转】C++引用和指针

[C++再学习系列] 引用和指针 2010-11-09 13:18 by zhenjing, 2203 阅读, 10 评论, 收藏, 编辑 下面是网上关于引用和指针区别的常见答案: 引用和指针有如下三种区别: 1 引用必须在声明时初始化,而指针不用: 2 NULL不能引用,而指针可指向NULL: 3 引用一旦声明,引用的对象不能改变(但对象的值可以改变):而指针可以随时改变指向的对象. 引用能做到的,指针也可以,但指针更危险: (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化).