一、引用和指针

指针:指针是一个特殊的变量,它里面存储的的数值为内存里的一个地址,通过*访问内存地址所指向的值

引用:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

举一个简单的例子:

int main()
{int a = 10;int& ra = a;     //定义引用类型,可以理解为ra就是a的一个别名//打印a和ra的值,都是10printf("%d\n", a);printf("%d\n", ra);return 0;
}

引用特性:

1.引用在定义时必须初始化

2.一个变量可以有多个引用

3.引用一旦引用一个实体,就不能再引用另一个实体

4.常引用

普通引用:int a=10;int& ra=a;
普通引用可以通过引用来修改变量的值,相当于int* const a常引用:const int a=10;const int& ra=a;
常引用不能通过引用来改变变量的值,相当于const int* const a

同类型的常引用:

int main()
{const int a = 10;//int& ra = a;    //此时编译报错,因为a是常量,不能通过普通引用来引用aconst int& ra = a;//int& ra=10;     //编译也会报错,因为10为常量const int& b = 10;
}

不同类型的常引用:

但是当我们用const int& rd=d;来进行引用时,编译会通过,而且当我们修改d的值之后,按照引用的规则,rd和d的值都应该修改,但是实际上打印出来的结果,只有d被修改,而rd并没有被修改,这是为什么呢?

上述问题,我们可以通过调试来看出问题所在,d和rd并非是同一块内存空间,修改d的值并不影响rd,为什么会这样呢?因为const int& rd=d;执行时候,编译器发现double和int之间可以发生隐式转换,于是重新创建了一块整形的空间,将d变量中整形部分放入到临时空间中,而临时空间又是编译器在栈上开辟的,用户并不知道这块空间的名字和地址,自然空间中的值就修改不了了,即临时空间具有常性。

 二、指针和引用的区别

在语法概念上,引用就是一个别名,没有独立空间,和其引用实体共同使用同一块内存空间

但是对于底层实现来说,实际上是有空间的,我们可以发现底层实现引用和指针的方式一模一样,这就说明引用时按照指针的方式实现的。

#include<iostream>
using namespace std;
int main()
{int a = 10;int* pa = &a;*pa = 100;int& ra = a;ra = 100;return 0;
}

 不同点:

1. 引用概念上定义一个变量的别名,指针存储一个变量地址

2. 引用在定义时必须初始化,指针没有要求

3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型 实体

4. 没有NULL引用,但有NULL指针

5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占 4个字节)

6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小

7. 指针有多级指针,但是引用没有多级引用

8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

9. 引用比指针使用起来相对更安全

引用和指针概念及区别相关推荐

  1. C++ 引用和指针有什么区别?

    引用和指针有什么区别? 本质:引用是别名,指针是地址,具体的: ①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变.这句话可以理解为:指针可以被重新赋值以指向另一个不 ...

  2. 引用与指针有什么区别?

    引用与指针有什么区别? 指针和引用都是地址的概念,指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. 程序为指针变量分配内存区域,而不为引用分配内存区域. 指针使用时要在前加 * ,引 ...

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

    为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针.不止C/C++使用指针. 每一种编程语言都使用指针.C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来 ...

  4. 【C语言】引用和指针的区别?

    首先解释在C语言中,什么是引用:  1.引用概念 引用是别名,必须在声明的时候初始化.即:是指一个已定义变量的别名.(一个内存空间,有两个名字都可以操作) 引用:在函数调用时,是变量的别名,不可以单独 ...

  5. 每日一题(28)—— 引用与指针的区别

    引用与指针有什么区别? (1)引用必须被初始化,指针不必: (2)引用初始化以后不能被改变,指针可以: (3)不存在指向空值的引用,但是存在指向空值的指针.NULL.

  6. c++引用与指针的区别

    ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需 ...

  7. 引用和指针的区别?传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?

    引用和指针的区别 (1) 引用在创建的同时必须初始化,即引用到一个有效的对象:而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值. (2) 不存在NULL引用,引用必须与合法的存储单元关联 ...

  8. C++中 *(指针引用)与*(指针)的区别

    转自:http://blog.sina.com.cn/s/blog_673ef8130100imsp.html 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调函数的形式参 ...

  9. C++中引用与指针的区别(详细介绍)

    转载:http://www.cnblogs.com/tracylee/archive/2012/12/04/2801519.html C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可 ...

最新文章

  1. mac-phpstorm 快捷键
  2. 如何面对边缘计算10个痛点?
  3. python如何计算分子描述符_Python——描述符(descriptor)解密
  4. Spring 教程03
  5. python自动寻路模板_Python实现的简单模板引擎功能示例
  6. python http get 请求_Python:编写HTTP Server处理GET请求
  7. redux-actions入门
  8. 查看oracle数据库是否归档和修改归档模式(转)
  9. C#点餐系统源码,在线订餐系统源码
  10. 数学建模入门-matlab实现偏微分方程数值解
  11. 汽车自动驾驶技术与产品研发仿真测试软件—panosim(一)
  12. NLP专题:LSA浅层语义分析
  13. android 音视频录制
  14. Spring Cloud (四):断路器(Hystrix)
  15. 鸿蒙手机如何录屏,两种方式教你如何在微信时录制屏幕视频。
  16. “德阳造”水上智能清污机器人 一次可收集500公斤垃圾
  17. linux编辑登录欢迎界面
  18. Python函数复习
  19. 解决Ubunt20.04安装Sogou输入法失败进不去桌面 及 中文输入法安装
  20. 计算机主板上的fan,电脑主板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT接口知识科普

热门文章

  1. Office系列及WPS等常用办公软件学习教程
  2. 高数————思维导图(上岸必备)(积分部分)
  3. gma 气象气候函数包的简要介绍及运算过程主要问题说明(内存不足、出现 nan 等)及解决方法
  4. 移动平均线SMA/EMA/SMMA/LWMA
  5. 【Delphi 篇】CodeGear 问题与解决方式
  6. 【网络安全】内网介绍+windows信息收集(含命令)
  7. pdf怎么加书签步骤介绍
  8. 疫情之下的远程办公解决方案
  9. 读书笔记- 韩鹏杰 -《道德经》
  10. 排序算法-插入排序的时间复杂度分析