0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

c++引用详细解说1

jf_78858299 来源:阿Q正砖 作者:阿Q 2023-02-15 09:40 次阅读

1、基本概念

百度百科是这样解释的:C++C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

引用(reference)就是C++对C语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。引用的声明方法:类型标识符 &引用名=目标变量名。

别名,又可以说是外号,代称,比如水浒传里几乎是别名最多的地方。林冲,在家称为"林教头",江湖上人称"豹子头"。教头和豹子头就是林冲的别名。

2、区分

&就是引用,但是&这个操作符和取地址&操作符是重叠的,所以它们需要不同的场景规范:

当 &b单独存在时,这时就代表取地址,为取出变量的地址。

但是如果这样:

int main(){            int a = 10;            int& b = a; // 引用            int* p = &b; // 取地址            return 0;}

当 & 位于类型和变量名之间时,为引用。

3、本质

调试查看一下 a 和 b 的关系:

图片

我们发现a和b的值不仅相等,连它的地址也是相同的。这就可以说明,b就是a ,但是在语法层面上,这里b并不是开辟的新空间,而是对原来的a取了一个新名称,叫做b。

就好比林冲被叫做豹子头一样,林冲还是林冲,豹子头也是它;而a就是a,但是b也是 a 。

图片

而如果这时候对 a 或 b 任意一个修改,那么 a 和 b 都会发生修改。

图片

4、特性

引用有以下3点是必须注意的!!!

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

图片

引用是取别名,所以在定义的时候必须明确是谁的别名。

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

就和林冲一样,他可以叫豹子头也可以叫林教头,这都是它。

所以一个变量也可以有多个别名。

图片

而对于一个起过别名的变量,对它的别名取别名也是可以的。

图片

而从根本上看,就可以这么理解:

图片

本质上还是一个变量。

但是别名不能和正式名字冲突,就比如取过别名,就不能定义和别名重名的变量,即使它们的类型并不相同。

图片

所以说这里的报错信息并不准确,实际上是命名冲突。

  1. 引用一旦引用一个实体,就不能引用其他实体
int main(){    int a = 10;            int& b = a;            int c = 20;           b = c;            return 0;}

对于下一组代码,有什么含义?

  • 让 b 变成 c 的别名?
  • 还是把 c 赋值给 b ?

这里的代码意思是第二个含义,就是赋值,我们调试看看:

图片

调试我们也可以看到,我们只是把 c 的值赋值给了 b ,b 的地址还是没变的 ,并且 a 的值也改变了。

这就说明引用一旦引用某一个实体,就不能引用其他的实体,引用是不会发生改变的。

因为它们是完全独立的两个变量,仅有的关联也只是值相等,改变 b 并不能影响 c ,但是此时 b 是 a 的别名,所以改变 b 就会影响 a 。

图:

图片

但是对于指针,则是截然不同的:

int main()
{        
    int a = 10;        
    int c = 20;        
    int* p = &a;        
    p = &c;        
    return 0;
}
对于指针来说,指针就可以时刻修改:

图片

p原本指向 a ,现在指向 c.

但是引用也有局限性,因为引用之后的变量是不可修改引用的,比如链表,节点是要不断更替迭代的,所以还需要指针配合,C++才可以写出一个链表。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136133
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73482
  • 面向对象
    +关注

    关注

    0

    文章

    64

    浏览量

    9978
收藏 人收藏

    评论

    相关推荐

    c引用和指针的区别

    is derived-declarator-type-list cv-qualifier-seq pointer to T。 The cv-qualifiers apply to the pointer and not to the object pointer to. 摘自《ANSI C++ Standard》
    发表于 09-27 15:19 1次下载
    <b class='flag-5'>c</b><b class='flag-5'>引用</b>和指针的区别

    Visual C++教程之C++的语言资料概述免费下载

    本文档详细介绍的是Visual C++教程之C++的语言资料概述免费下载主要内容包括了:1CC++
    发表于 02-15 15:59 3次下载
    Visual <b class='flag-5'>C++</b>教程之<b class='flag-5'>C++</b>的语言资料概述免费下载

    C++程序设计教程之数据类型的详细资料说明

    本文档的主要内容详细介绍的是C++程序设计教程之数据类型的详细资料说明。1. 整型 ( int Types ) , 2.整型子类 ( sub-int Types ) , 3.浮点型
    发表于 02-21 17:18 3次下载
    <b class='flag-5'>C++</b>程序设计教程之数据类型的<b class='flag-5'>详细</b>资料说明

    C++程序设计教程之C++的初步知识的详细资料说明

    C++程序设计教程之C++的初步知识的详细资料说明包括了:1. 从CC++,2 . 最简单的
    发表于 03-14 14:48 31次下载
    <b class='flag-5'>C++</b>程序设计教程之<b class='flag-5'>C++</b>的初步知识的<b class='flag-5'>详细</b>资料说明

    C++程序设计教程之数组的详细资料说明

    本文档详细介绍的是C++程序设计教程之数组的详细资料说明主要内容包括了:1. 数组的概念,2. 一维数组的定义和引用,3. 二维数组的定义和
    发表于 03-14 14:48 10次下载
    <b class='flag-5'>C++</b>程序设计教程之数组的<b class='flag-5'>详细</b>资料说明

    C++程序设计教程之指针的详细资料说明

    本文档详细介绍的是C++程序设计教程之指针的详细资料说明主要内容包括了:1. 指针的概念,2. 变量与指针,3. 数组与指针,4. 字符串与指针,5. 函数与指针,6. 返回指针值的函
    发表于 03-14 16:04 7次下载
    <b class='flag-5'>C++</b>程序设计教程之指针的<b class='flag-5'>详细</b>资料说明

    C++程序设计教程之C++工具的详细资料说明

    本文档的详细介绍的是C++程序设计教程之C++工具的详细资料说明主要内容包括了:1. 异常处理,2. 命名空间,3. 使用早期的函数库
    发表于 03-14 16:39 4次下载
    <b class='flag-5'>C++</b>程序设计教程之<b class='flag-5'>C++</b>工具的<b class='flag-5'>详细</b>资料说明

    C++引用的使用场景

    C++引用的使用场景
    的头像 发表于 06-29 15:18 4034次阅读
    <b class='flag-5'>C++</b>:<b class='flag-5'>引用</b>的使用场景

    C++中的const和引用的讨论

    今天给大家分享一下这段时间学习c++的总结学习:c++里面的const关键字和引用
    的头像 发表于 12-24 15:35 815次阅读

    C语言和C++的特点与用法详细说明

    本文档的主要内容详细介绍的是C语言和C++的特点与用法详细说明。
    的头像 发表于 12-26 10:58 4365次阅读

    C++基础语法中的引用、封装和多态

    本期是C++基础语法分享的第六节,今天给大家来分享一下: (1引用; (2)宏; (3)成员初始化列表; (4)封装; (5)继承; (6)多态; 引用 左值
    的头像 发表于 09-12 09:58 1288次阅读

    c++引用详细解说2

    C++C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
    的头像 发表于 02-15 09:43 481次阅读
    <b class='flag-5'>c++</b><b class='flag-5'>引用</b><b class='flag-5'>详细</b><b class='flag-5'>解说</b>2

    c++引用详细解说3

    C++C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
    的头像 发表于 02-15 09:43 513次阅读
    <b class='flag-5'>c++</b><b class='flag-5'>引用</b><b class='flag-5'>详细</b><b class='flag-5'>解说</b>3

    c++引用详细解说4

    C++C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
    的头像 发表于 02-15 09:43 490次阅读
    <b class='flag-5'>c++</b><b class='flag-5'>引用</b><b class='flag-5'>详细</b><b class='flag-5'>解说</b>4

    C++引用和指针

    之前的文章我们已经介绍了C++中的基本类型如int,bool和double等,除了基本类型C++还有一些更复杂的数据类型复合类型,所谓的复合类型就是通过其他类型定义的类型,本篇文章我们将会着重介绍C++的复合类型
    的头像 发表于 03-17 14:00 605次阅读