我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++引用的特点及与指针的区别是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++引用的特点及与指针的区别是什么

这篇文章主要讲解了“C++引用的特点及与指针的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++引用的特点及与指针的区别是什么”吧!

一.引入

在生活中,我们可能也会给一些同学起外号,以“张磊”同学为例,我们可以叫他“张三石”,当我们叫到这个外号的时候就会自然而然的想到“张磊”同学,”张三石”就是张磊的别名,而引用也可以这样简单理解:在语法层面上,引用就是取别名。

二.C++中较为麻烦的运算符

C++中的 * 和 & 有多重含义,在不同的使用条件下有不同的意思:

*

int *p = &a;   /1.指针a = a * b;     /2.乘法*p = 100;      /3.指向

&

int c = a&b;    /1.位运算 转换为二进制int *p = &a;    /2.取地址int  a = 100;int & ar = a;   /3.引用

三.引用的定义

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

格式如下:

类型 & 引用变量名(对象名) = 引用实体

注意这里的空格是可选的,即

  • &符号与前后均可以有一个空格;如下:int & ra=a;

  • &符号与类型挨着,如下:int& ra=a;

  • &符号与引用名称挨着,如下:int &ra=a;

int main(){int a =100; \\定义变量名int b = a;\\将a的值赋给变量int &c = a;\\引用 将c作为a的别名 c11中成为左值引用return 0;}

在这里就是相当于一个实体取了两个名字分别为a和c,并且在这个空间中不开辟新的空间。

C++引用的特点及与指针的区别是什么

四.引用的特点

  • 定义引用时必须给初始化

  • 没有空引用

  • 没有所谓的二级引用

  • 一个变量可以有多个引用(就相当于一个变量有好几个别名,这是可以的)

说明:

int main(){int a = 10;int& b = a;int& x;int& y = NULL;int&& c = a;}

C++引用的特点及与指针的区别是什么

总而言之:

引用本身是一个变量,但是这个变量又仅仅是另外一个变量一个别名,它不占用内存空间,它不是指针哦!仅仅是一个别名!

五.对比指针与引用

我们以交换函数为例

使用指针交换两个整型值:

int my _swap (int*ap, int*bp){assert(ap != NULL && bp != NULL);int tmp = *ap;*ap = *bp;*bp = *ap;}int main(){int x = 10, y = 20;my_swap{&x,&y);cout<< "x = " << x << " y = " << y << endl;return 0;}

使用引用交换两个指针:

void my_swap (int& a,int& b){int tmp = a;a = b;b = tmp;}int main (){int x = 10, y = 20;my_swap(x,y) ;cout << " x = " << x<< " y = " << y << endl;return 0;}

形参为指针时:第一句话一定要断言,必须判断空不空;并且在使用指针的时候 我们需要注意:是否为 野指针, 空指针 ,失效指针。

当我们使用引用时,不存在NULL引用,不需要判空,比指针更加安全

所以:能不使用指针就尽量不要使用指针! 

六.引用与指针的区别

1.语法层面的区别

从语法规则上讲,指针变量存储某个实例(变量或对象)的地址;

引用是某个实例的别名。

程序为指针变量分配内存区域;而不为引用分配内存区域。

int main(){int a = 10;int* ip = &a;int& b = a;  \\b是a的别名 并没有分配新的空间}

解引用是指针使用时要在前加“*”;引用可以直接使用。

int main(){int a = 10;int* ip = &a;int& b = a;  *ip = 100;//对于指针使用加“*”b = 200;  //引用不需要“*”}

指针变量的值可以发生改变,存储不同实例的地址;

引用在定义时就被初始化,之后无法改变(不能是其他实例的引用)。

int main(){int a = 10,b = 20;int* ip = &a;ip = &b ;int& c = a;c = b;   //b的值给c实则是把b的值给a,将a的值改为20}

指针变量的值可以为空(NULL,nullptr);没有空引用。

指针变量作为形参时需要测试它的合法性(判空NULL);引用不需要判空。

对指针变量使用"sizeof"得到的是指针变量的大小; 对引用变量使用"sizeof"得到的是变量的大小。

int main(){double dx = 10;double* dp = &dx;double& a = dx; printf("sizeof(dp):%d\n", sizeof(dp));printf("sizeof(a):%d", sizeof(a));}

运行结果:

C++引用的特点及与指针的区别是什么

理论上指针的级数没有限制;但引用只有一级。

即不存在引用的引用,但可以有指针的指针。

++引用与++指针的效果不一样。

例如就++操作而言:

int main()(int ar[5] = { 1,2,3,4,5 };int* ip = ar; //数组首元素地址int& b = ar[O]; //数组首元素的别名叫b++ip;  //由0下标的地址指向1下标的地址++b;  //由0下标指向1下标}

C++引用的特点及与指针的区别是什么

对引用的操作直接反应到所引用的实体(变量或对象)。对指针变量的操作,会使指针变量指向下一个实体(变量或对象)的地址;而不是改变所指实体(变量或对象)的内容。

int main()(int ar[5] = { 1,2,3,4,5 };int* ip = ar; //数组首元素地址int& b = ar[O]; //数组首元素的别名叫b++(*ip); //值由1>>2 (*ip)++; //所有表达式结束后 进行++ //有括号 先取ip的值与*结合 然后++为所指之物的++int x = *ip++;//没有括号 先将ip的值取出 与*结合 把所指之物取出(此时已与*结合完) 然后将ip取出进行++ ++后的值回写给ip 将值存储到x中//通过()提高了优先级}

不可以对函数中的局部变量或对象以引用或指针方式返回。

当变量的生存期不受函数的影响时就可以返回地址

2.汇编层面的区别

汇编层面来讲引用就是一个指针,但是引用并不是一个普通的指针是指针的语法槽,也可以看作是常性的指针 。

int main(){int a = 10;int* ip = &a;int& x = a;*ip = 100;x = 200;}

C++引用的特点及与指针的区别是什么

七.引用的其他使用

常引用

常引用实际上是一种万能引用既可以引用普通变量 ,常量,也可以引用字面常量。

(1)引用普通变量

int main(){int a = 10;int & b = a;    const int& c = a;    b += 10;    a += 10;    c += 10;    return 0;}

对于这块报错问题:是因为c是不可修改的

C++引用的特点及与指针的区别是什么

(2)引用常量

int main(){    int a = 10;    const int b =20;    int& x = a;    int& y = b;  //error 不安全    const int& y = b; //ok    const int& z =10; //ok    return 0;}

C++引用的特点及与指针的区别是什么

(3)引用字面常量

引用字面常量时,分两步走,首先定义一个临时量 去引用临时量 不是引用真实的字面常量10。

int main(){    int a = 10;    const int& z =10; //ok    //int tmp =10;    //const int &z = tmp;    return 0;}

数组引用

在引用数组时,必须知道数组的大小

int main(){    int a = 10;    int b = 10;    int ar[5] = { 1,2,3,4,5 };    int& x = ar[0];  //ok    int(&x)[5] = ar; //ok   没有[5]无法编译通过    return 0;}

指针引用

引用既然就是一个变量,那我同样也可以给指针变量取一个别名

int main(){int a = 100;int *p = &a;int * &rp = p;cout << a << endl;cout << *p << endl;cout << *rp << endl; //这里为什么要将*放在前面,因为p的类型是 int * 作为一个整体哦!!cout << p << endl;cout << rp << endl;getchar();return 0;}

我们发现这里的指针变量p和它的引用(别名)rp是完全一样的。但是由于引用的目的跟指针的目的是类似的,所以一般不需要对指针再起别名了。

感谢各位的阅读,以上就是“C++引用的特点及与指针的区别是什么”的内容了,经过本文的学习后,相信大家对C++引用的特点及与指针的区别是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++引用的特点及与指针的区别是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++引用的特点及与指针的区别是什么

这篇文章主要讲解了“C++引用的特点及与指针的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++引用的特点及与指针的区别是什么”吧!一.引入在生活中,我们可能也会给一些同学起外号
2023-06-30

Java引用与C指针的区别是什么

Java引用与C指针的区别如下:1、现象指针在运行时可以改变其所指向的值(地址)即指向其它变量,而引用一旦和某个对象绑定后就不能再改变,总是指向最初的对象。2、编译程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名以及变量所对应的地址。(相关视
Java引用与C指针的区别是什么
2022-03-17

C++中指针与引用的区别是什么

这篇文章主要介绍了C++中指针与引用的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中指针与引用的区别是什么文章都会有所收获,下面我们一起来看看吧。1、指针的声明上文中提到,指针和其所指向的变量
2023-06-19

C++指针与引用有什么区别

这篇文章将为大家详细讲解有关C++指针与引用有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、引用与指针的区别指针和引用的原理非常的相似,所以很多时候尤其是面试的时候经常会拿来比较。本文来梳理一
2023-06-25

c++中引用与指针的区别

引用和指针都是用于处理内存地址的机制。引用在编译时绑定,始终指向同一内存地址,与对象共享相同内存空间。指针在运行时绑定,可以指向不同的内存地址,不与对象共享相同内存空间。引用用于不修改对象的情况下操作对象,而指针用于处理动态分配的内存或修改
c++中引用与指针的区别
2024-05-06

C++中指针常量与常量指针的区别是什么

在C++中,指针常量和常量指针是不同的概念。1. 指针常量(Pointer to constant):指针本身是一个常量,即指针的值不能被修改,但是它所指向的值可以被修改。声明一个指针常量时,要在指针类型前加上const关键字。示例:```
2023-08-16

C/C++数组名与指针的区别是什么

这篇文章主要讲解了“C/C++数组名与指针的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C/C++数组名与指针的区别是什么”吧!指针是C/C++语言的特色,而数组名与指针有太多的
2023-06-17

java中的引用与c++中的指针的区别

Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对内存数据的操作,但是它们在实现,原理作用等方面却有区别。(1)类型:引用其值为地址的数据元素,Java封装了的地址,可以转换成字符串查看,长度也可以不必担心。C++指针是一个装地址的变量
java中的引用与c++中的指针的区别
2014-09-04

C++中指针与引用的区别有哪些

这篇文章主要介绍C++中指针与引用的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、指针的声明上文中提到,指针和其所指向的变量就像硬币的两面,因此通过取址符号"&"我们可以找到变量的地址,通过解引用符号"
2023-06-20

C++的引用和指针有哪些区别

本篇内容主要讲解“C++的引用和指针有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的引用和指针有哪些区别”吧!引用和指针有如下三种区别:1 引用必须在声明时初始化,而指针不用;2
2023-06-17

JAVA中的指针,引用及对象的clone分别是什么

本篇内容主要讲解“JAVA中的指针,引用及对象的clone分别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA中的指针,引用及对象的clone分别是什么”吧!Java语言的一个优点就
2023-06-03

C语言中指针常量和常量指针的区别是什么

这篇文章主要介绍了C语言中指针常量和常量指针的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中指针常量和常量指针的区别是什么文章都会有所收获,下面我们一起来看看吧。在面试中我们经常会被面试官问到
2023-06-26

Nginx和Apache的特点与区别是什么

这篇文章主要介绍“Nginx和Apache的特点与区别是什么”,在日常操作中,相信很多人在Nginx和Apache的特点与区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx和Apache的特点
2023-07-05

指针数组和数组指针的区别是什么

区别:对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录