【对象】

C++primer中对 对象的定义:对象是指一块能存储数据具有某种类型的内存空间。

一个对象a,它有地址&a,运行程序时,计算机会为该对象分配存储空间,来存储该对象的值,我们通过该对象(的存储空间)的地址,来访问存储空间中的值。

【指针】

指针p也是对象,它同样有地址&p存储的值p,只不过,p存储的数据类型是数据的地址。如果我们要以p中存储的数据为地址,来访问对象的值,则要在p前加解引用操作符" * ",即*p。

对象有常量(const)和变量之分,既然指针本身是对象,那么指针所存储的地址也有常量和变量之分。
指针常量是指指针本身是常量,指针这个对象所存储的地址是不可以改变的,但地址里的内容可以通过指针改变(不能改变指针所指地址,但能改变指针所指地址中的内容);

int * const p //指针常量

int a,b;
int * const p=&a //指针常量
//那么分为一下两种操作
*p = 9;//操作成功
p = &b;//操作错误

常量指针是指指向常量的指针,指针所指的地址中的值是不可以改变的,但是指针所指的地址(指针本身的值)可以改变(不能通过指针来改变指针所指对象)。

const int *p = &a; //常量指针
int const *p = &a; //同上

int a,b;
const int *p=&a //常量指针
//那么分为一下两种操作
*p = 9;//操作错误
p = &b;//操作成功

指向常量的指针常量:

const int * const b = &a;//指向常量的指针常量

规则:

  1. const离谁近,谁就不能被修改。
  2. 因为常量在定义以后就不能被修改,所以使用const定义变量时必须初始化。

【引用】

我们可以把引用理解成变量的别名。定义一个引用的时候,程序把该引用和它的初始值绑定在一起,而不是拷贝它。计算机必须在声明r的同时就要对它初始化,并且r一经声明,就不可以再和其它对象绑定在一起了

实际上,可以把引用看做是通过一个指针常量来实现的(指针所指方向不能变),它只能绑定到初始化它的对象上。

  1. const int & e ; 相当于 const int * const e ;
    //e是指向常量的指针常量,既不能修改其值,也不能修改让其指向其他内存空间;

  2. 普通引用 相当于 int *const e ;

因为引用在定义时必须初始化,所以引用的一个优点是它一定不为空,因此相对于指针,它不用检查它所指对象是否为空,这增加了效率。
比如下面的代码:

int a,b,*p,&r=a;//正确
r = 3;//正确:等价于a=3
int &rr;//出错:引用必须初始化
p=&a;//正确:p中存储a的地址,即p指向a
*p=4;//正确:p中存的是a的地址,对a所对应的存储空间存入值4
p=&b//正确:p可以多次赋值,p存储b的地址
void fun1(int *point){// 为了代码的稳健和安全,我们需要判断指针是否有效,通常做法是判断指针是否为空//其他的判断就需要根据函数的具体功能来判断了 if(!point) { return; } // 函数实现 } void fun2(int &refence){ // 在这里,我们就不用担心refence是否为空}

由以上可以,当我们需要某个是否指向为空的时候,我们就需要使用指针了,还有指向的对象需要变化的时候,我们也需要使用指针,其他地方一般推荐引用。

【C语言】指针和引用的区别相关推荐

  1. C语言_指针和引用的区别

    文章目录 指针和引用的区别 0.前言 1.指针.指针变量和引用 2.指针变量和引用变量的定义 3.引用的用途 4.引用和指针的区别 5.引用的底层原理 6.代码示例 6.1.示例程序1 6.2.示例程 ...

  2. 【转】指针和引用的区别

    c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使 ...

  3. C++中指针和引用的区别与联系

    原文地址:http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址 ...

  4. c++值传递,指针传递,引用传递以及指针与引用的区别

    值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出.当函数内部需要修改参数,并且不希望这个改变影 ...

  5. 24.指针和引用的区别

    在面试时经常会被问到 指针和引用的区别,虽然问题很简单但还是总结一下! 指针和引用的区别其实有太多了,主要的区别大概是这样子: 1)指针声明的时候可以不被初始化(有可能成为野指针),但是引用必须要进行 ...

  6. 2020-12-6(从反汇编理解指针和引用的区别)

    这是我10个月前看到的一篇博客吧,感觉分析指针和引用的文章这是我目前见过讲解得最清晰的一篇: 本文主要基于反汇编代码,从初始化.赋值以及取地址三个角度来理解指针和引用的区别. 初始化 写出以下代码并查 ...

  7. C/C++ 中指针和引用的区别

    C/C++ 中指针和引用的区别 1.指针有自己的一块空间,而引用只是一个别名: 2.使用 sizeof 看一个指针的大小是 4,而引用则是被引用对象的大小: 3.指针可以被初始化为 NULL,而引用必 ...

  8. python指针引用的区别_C++基础:指针和引用的区别

    C++基础:指针和引用的区别 *例 int a; int &b = a; 其中b是a的引用,b引用了a,a被b引用.b 相当于 a 的别名,对 b 的任何操作就是对a的操作.所以b既不是a的拷 ...

  9. C++中指针与引用的区别

    指针的本质 指针p也是对象,只不过p存储的数据类型是它所指的对象的地址.可以通过解引用操作符""来访问对象的值,即p. 对象有常量(const)和非常量之分,如果指针本身是常量,即 ...

  10. C++指针和引用的区别

    从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...

最新文章

  1. Git remote 修改源
  2. java list详解_Java 中 list 用法案例详解
  3. 深度学习auc_机器学习集成学习与模型融合!
  4. MySQL explain 命令
  5. I/O操作不占用CPU的任何线程
  6. Java:MySQL5.5安装教程
  7. l360清零软件无响应_爱普生epson l360清零软件免费版
  8. 计算机设备管理没有打印机,win7电脑的设备和打印机选项无法打开怎么办?
  9. 2022新阅读:nmn有用吗?nmn注意事项有哪些?
  10. 机器学习笔记(17)使用XGBoost完成高维数据的分类任务
  11. 智慧城市建设方案建议书——如何打造智慧城市
  12. Delphi中的线程类--之(1)
  13. Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)
  14. unity抠人像原理_PS 抠人像如何抠得干净?
  15. JNI NDK入门详解
  16. 《西部世界》S2E9:蝶化庄周,浮生若梦
  17. 高职计算机文化基础考试试题,计算机文化基础期末试题(高职)新.doc
  18. 解除浏览器不能切屏和不能复制粘贴的操作
  19. 图吧为什么叫图拉丁_垃圾佬是什么梗?图吧垃圾佬什么意思
  20. 解决会声会影x9关闭后UEIP.dll找不到指定模块的方法

热门文章

  1. selenium IE浏览器爬虫小结
  2. creo打不开stp文件_proe(creo)转为STP格式保证颜色不变方法
  3. 校准小知识2-直流电源校准
  4. 【校准教程】数字万用表校准操作视频
  5. keepalived配置手册(V1.2.24)中文版
  6. python字符串去掉空行_Python从字符串中删除空格
  7. AtCoder Beginner Contest 286——E - Souvenir
  8. 在Mac上将模糊的照片变清晰的方法
  9. 蓝桥杯.地宫取宝(记忆化搜索)
  10. “射同余异”或“射同基反”?揭秘三端式正弦波振荡器