【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )
文章目录
- I . 引用概念
- II . 引用声明
- III . 引用 地址 内存 分析
- IV . 常引用
- V . 引用作为参数
- VI . 引用 与 指针 对比
I . 引用概念
C++ 对 C 扩充 : 引用 ( Reference ) 概念 , 是 C++ 在 C 的基础上进行的扩充 , 在 C 语言中是没有引用的 ;
引用本质 : 引用的本质就是为一个变量指定一个别名 , 这个别名与变量的使用方式是相同的 ;
II . 引用声明
引用声明 :
① 引用声明格式 : 类型标识符 &引用别名 = 目标变量 ;
② 示例代码 :
int a = 0;
int &b = a;
③ 引用标识 : 此处的 & 操作不是取地址运算 , 只是起一个引用标识的作用 ;
④ 类型标识符 : int 是类型标识符 , 注意引用的类型标识符要与被引用的变量相同 ;
⑤ 初始化 : 声明引用的同时 , 必须进行初始化 , 因为引用定义的是一个变量的别名 , 这个变量必须在声明的时候指定 ;
//引用相当于常量指针 , 必须在声明的时候就初始化 , 声明完毕后初始化是无效的 , 编译执行会报错
//错误示例 , 引用声明后必须马上初始化
int a = 0;
//声明的时候必须初始化 , 此时的声明时错误的
int &b;
//此时对引用进行赋值就是错误的
b = a;
⑥ 引用使用 : 引用声明后 , 该引用 b 与 a 是等价的 , 凡是可以使用 a 的地方都可以使用 b ;
注意 : 引用声明完成之后 , 不能讲该引用名称再次声明为其它变量的名称 ;
III . 引用 地址 内存 分析
int a = 0;
int &b = a;
变量 与其 引用地址相同 : 对 变量 a 和 引用 b 取地址操作 , &a 与 &b 的值是相等的 ;
( 引用名称 是 变量名称 的一个别名 )
编译器实现 : 编译器将引用实现为 int * const b 指针 , 其指针本身是常量 , 即存储的地址是不可变的 , 指针指向的内容是可变的 ;
( 既然引用是一个 指针常量 , 说明其还是需要占用内存的 )
const 修饰指针规则 : 左数 右指 (const 在 * 左边数据是常量, const 在 * 右边指针是常量);
左数 ( 常量指针 ) : const 出现在 * 左边时, 指针指向的数据为常量, 指向的数据不可改变;
右指 ( 指针常量 ) : const 出现在 * 右边时, 指针地址本身是常量, 指针地址不可改变;
指针常量 : 表示该指针本身是一个常量 ;
常量指针 : 表示指向一个常量的指针 ;
IV . 常引用
常引用 :
① 常引用简介 : 引用本身是一个常量指针 , 指针本身的地址不可改变 , 常引用 在常量指针的基础上 , 将指向的数据也设置成常量 , 即不能通过该引用修改变量的值 ;
( 引用代表的地址不能修改 <引用自带属性> , 常引用 在引用的基础上 , 指向的数据也不能修改 )
② 常引用声明格式 : const 类型标识符 &引用别名 = 目标变量 ;
③ 示例代码 :
int a = 0;
const int &b = a;
④ 等价说明 : 上述常引用 b 等价于 const * int * b
, 即该常引用的引用本身 , 以及其代表的变量 , 都不能通过该引用进行修改 ;
这里注意 , 不同通过引用进行修改 , 但是可以通过变量名称 a 进行修改 ;
⑤ 作用及意义 : 使用 引用数据类型 作为 函数参数 , 如果不需要在 函数中 修改该引用变量的值 ( 指针指向的数据的值 ) , 就将该参数声明为常引用 , 这样能最大限度增加安全性 , 避免因为误操作导致不必要的问题出现 ;
V . 引用作为参数
C 语言中的参数 分类 :
① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ;
② 指针变量参数 : C 语言中 , 如果要让函数的参数可以将结果返回 , 则必须使用指针作为参数 ;
C++ 中的引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数的情况 , 使参数具有返回结果的能力 ;
作用及意义 :
① 具有返回值能力 : 使用引用作参数 , 可以将参数当做返回值使用 ;
② 提高参数传递效率 : 大型对象作参数时 , 使用引用类型 , 可以提高参数传递效率 ;
VI . 引用 与 指针 对比
引用与指针的相同点 : 都具有地址的概念 ;
① 指针 : 指针指向内存中的一块空间 , 指针变量的内容是一个内存地址 ;
② 引用 : 引用是变量的别名 , 即某块内存空间的别名 , 相当于一个 指针常量 , 也指向一块内存空间 ;
引用与指针的不同点 :
① 引用比指针更严格 :
引用在定义时必须被初始化 , 而且只能初始化这一次 , 相当于 指针常量 ;
指针 是可变的 , 指针指向的地址 , 以及 地址中的数据 都是可变的 ;
引用的变量值内容可变 , 变量的地址不可变 ;
② 是否可以为空 : 指针可以为空 , 但是引用必须不能为空 , 因其在声明时必须进行初始化操作 ;
③ sizeof 操作区别 : sizeof ( 引用 ) 获取的是被引用的变量的大小 ( 随变量类型变化 ) , sizeof ( 指针 ) 获取的是指针变量本身的大小 ( 固定的 ) ;
④ 类型安全性 : 引用是类型安全的 , 指针类型不安全 , 引用比指针多了类型检查机制 ;
【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )相关推荐
- 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)
文章目录 一.指针与函数之间的关系 二.复制传参 三.地址传参 四.传一维数组(地址) 五.传二维数组(地址) 六.传指针数组(地址) 七.指针函数和函数指针 一.指针与函数之间的关系 1.我们可以给 ...
- C语言程序设计 | 指针(二):常量指针和指针常量、数组参数和指针参数、函数指针数组
指针的进阶(二)目录: 常量指针和指针常量 数组参数和指针参数 函数指针数组 常量指针和指针常量 在我们日常中,经常会用到一个关键字const const是一个C语言(ANSI C)的关键字,具有着举 ...
- 初识C语言(1)(2)(3)(4) C语言入门 保姆级教程 变量 常量 字符串 转义字符 操作符 关键字 字符串 指针 函数 结构体 数组 选择语句 循环语句
一.如何写C语言代码 1.编译器 2.创建项目 3.创建源文件 4.写代码 5.编译+链接+运行 项目名字不要汉语,不要特殊字符,不要加空格,项目路径一般为你想要的路径 C语言中,一般创建.c源文件, ...
- 非常量引用的初始值必须是左值_C++核心编程--引用
2 引用 2.1 引用的基本使用 作用: 给变量起别名 语法: 数据类型 &别名 = 原名 示例: int main() {int a = 10;int &b = a;cout < ...
- vue引用自定义.js文件 (常量抛出 + 地址三级联动为例)- 语法篇
文章目录 vue如何引用`自定义封装的` `.js`文件? `如何操作,详细如下.`(注意代码注释部分:注意1/2/3/4/5) 一.效果图预览: 二.以自定义`area.min.js`文件为例: 三 ...
- 11深入理解C指针之---指针和常量
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为C语言的左膀右臂,使用方便,修改容易,引用数据快速都是很有前景的应用.C语言中 ...
- Go语言学习十二 变量和常量
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验 Go 使用var关键字声明变量:使用关键字const声明常量.变量可以像常量一样初始化. 一 变量 1.1 变量声明 语法: var 变量名 ...
- C语言入门教程之一变量和常量
编译环境设置好以后,就可以正式学习C语言了. 一.变量 (一).变量类型和表示方法 1.什么是变量?一句话,变量是存储数据的值的空间.由于数值的类型有多种,有整数.小数(浮点数 ...
- 【C语言入门教程】2.2 常量 与 变量
2.2 常量 与 变量 顾名思义,常量是运算中不能改变数值的数据类型,变量是可改变数值的数据类型.根据需要,可将一些在程序中不必改变数值的类型定义为常量,这样也可避免因修改数值造成程序错误.任何改变常 ...
最新文章
- Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏
- python函数注释 参数 省略号_解决python 输出是省略号的问题
- [YTU]_2424 C语言习题 字符串比较
- 防止UI界面被输入法遮挡(画面随输入法自适应)
- flask小demo-数据查询
- 费城中餐馆奇葩鸡翅定价引爆网络,数万网友想要破解数学谜题
- Tensorflow快餐教程(4) - 矩阵
- flash 用 html 播放,使用flash插件在HTML上播放音频
- python内建函数调用,Python 内建函数
- 用fileupload处理文件上传
- spark笔记之Scala中的协变、逆变、非变
- ASP.NET基本对象介绍
- unable to find setter method for attribute:[commandName]
- centos journalctl日志查看
- SnapGene快速入门,界面及常用操作教程
- 删除用户账户|win7系统怎么删除用户账户
- web打印模板神器reportbro—汉化及中文字体配置(上)
- 本次技术博客平台的选择
- 客户体验决胜2022,低代码是快速取胜之道
- 电子DIY:用单片机设计一款USB游戏手柄