C++ —— C++引用

C++引用

 

一、普通引用

【变量名】

变量名实质上是一段连续存储空间的别名,是一个标号

程序中通过变量来申请并命名内存空间

通过变量的名字可以使用存储空间

问题1:对一段连续的内存空间只能取一个别名吗?【不是】

1、引用是C++的概念

// 问题:C中可以编译通过吗?

int main(void)
{int a = 0;int &b= a; //int * const b = &ab=11;//*b = 11;return 0;
}

//  gcc编译结果 

// 错误: expected identifier or ‘(’ before ‘&’token

//‘b’未声明(在此函数内第一次使用)

// 结论:请不要用C的语法考虑 b=11

 

2、引用概念

(1)在C++中新增加了引用的概念

(2)引用可以看作一个已定义变量的别名

(3)引用的语法:Type& name = var;

(4)引用做函数参数?(引用作为函数参数声明时不进行初始化)

int main(void)
{int a = 1;int &b = a;//b是a的别名,请问c++编译器后面做了什么工作?b = 5;cout<< "b--->"<< a << endl; return 0;
}

【普通引用在声明时必须用其它的变量进行初始化】


3、引用的意义

(1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针

(2)引用相对于指针来说具有更好的可读性和实用性

void swap(int &a, int &b)
{int t = a;a = b;b = t;
}void swap(int*a, int *b)
{int t = *a;*a = *b;*b = t;
}

4、普通引用有自己的空间吗?

#include <stdio.h>struct stu
{int &a;int &b;
};int main(void)
{printf("sizeof(stu) =%d\n", sizeof(stu));return 0;
} // 8

引用是一个有地址,引用是常量(char *const p


5、引用的本质

(1)引用在C++中的内部实现是一个常指针

         Type&name çèType*const name

(2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。

(3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏


6、引用注意点

(1)当函数返回值为引用时

          若返回栈变量

         不能成为其它引用的初始值

         不能作为左值使用

(2)若返回静态变量或全局变量

         可以成为其他引用的初始值

         即可作为右值使用,也可作为左值使用 

【当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地址,传给了形参引用(常量指针)】

 

二、常引用

1、const引用(使用变量初始化)

【const在C中是只读变量,在C++中是常量】

const Type& name = var;【const引用让变量拥有只读属性】

#include <iostream>
using namespace std;int main(void)
{int a = 2;const int &b = a;b= 3;cout<< a << b << &a << &b << endl;return 0;
}

// 错误:向只读形参‘b’赋值


2、const引用(使用字符常量初始化)

(1)用变量对const引用初始化,const引用分配内存空间了吗?

(2)用常量对const引用初始化,const引用分配内存空间了吗?

#include <iostream>
using namespace std;int main(void)
{const int &a = 10;int *p = (int *)&a;*p = 12;cout << a<< endl;return 0;
}

//当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间,并将//引用名作为这段空间的别名

//使用常量对const引用初始化后将生成一个只读变量

 

const&相当于const int  *const a;

普通引用相当于int *const a;


三、引用与指针有什么区别

(1) 引用必须被初始化,指针不必。

(2) 引用初始化以后不能被改变,指针可以改变所指的对象。

(3) 不存在指向空值的引用,但是存在指向空值的指针。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信越滑越卡

这篇文章是我的朋友小二哥写的&#xff0c;他解决了一个问题并提交了一个补丁给google合入&#xff0c;当然了&#xff0c;这也是他第一次提交补丁被google采纳。我觉得这才是做技术的样子&#xff0c;二哥也很喜欢篮球&#xff0c;&#xff0c;为二哥吹一波。哈哈。关于这次补…

MFC中五个初始类的作用

MFC中五个初始类的作用 https://blog.csdn.net/thisispan/article/details/7393401

扁平化可伸展导航

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>扁平化可伸展导航[原创]</title><link rel"stylesheet" type"text/css" href"nav.css"><link rel"stylesheet" t…

重新整理了下mount/umount,免得老是不来新机忘记了

挂接就是将分离的文件系统附加到文件系统分成结构中。文件系统要附加到某个挂接点&#xff0c;也就是目录。 挂接和卸载文件系统发生在系统启动和关闭时。 系统启动时&#xff0c;将读取/etc/vfstab文件。这个文件记录系统要挂接的文件系统。因此/etc/vfstab文件中的文件系统…

C++ —— C++内联函数

C内联函数 一、内联函数 1、C中的const常量可以替代宏常数定义&#xff0c;如&#xff1a; const int A 3; #define A 3 C中是否有解决方案替代宏代码片段呢&#xff1f;&#xff08;替代宏代码片段就可以避免宏的副作用&#xff01;&#xff09; 2、C中推荐使用内联函数…

大佬为何可以把单片机描述得如此形象生动?

某年某日某产房&#xff0c;你诞生了&#xff08;power up , 上电运行&#xff09;&#xff0c;结果你不哭&#xff0c;医生把你提起来&#xff0c;屁股上狠狠一巴掌&#xff0c;你哇哇大哭&#xff08;reset, 复位成功&#xff09;&#xff0c;护士给你检查&#xff0c;看有没…

CWinThread

https://baike.baidu.com/item/CWinThread/5902501 https://blog.51cto.com/5412097/1643861 https://blog.csdn.net/thanklife/article/details/78677688 CWinThread&#xff1a;&#xff1a;SuspendThread https://blog.csdn.net/h315444352/article/details/22091361 工作者…

html总结:文本框填满表格

<style> input { width: 100%; }</style>转载于:https://www.cnblogs.com/iCheny/p/8798808.html

双硬盘奇怪问题...

今天下午打开文件夹....提示错误....指定的文件夹无法打开....汗...文件夹大小变成0KB..而有的文件夹又是正常的...可以打开,可以访问....一切正常...但是就是那么几个文件夹.里面放的东西比较的多....打不开...由于本人是双硬盘.上次出现了RAW 的错误...让我有一种一朝被蛇咬,…

51单片机温度控制系统报警器,不会做课程设计的就拿走

▌功能说明&#xff08;1&#xff09;单片机读取温度传感器当前的温度值并在LCD液晶显示屏上的第一行显示当前的温度值&#xff0c;如Temp&#xff1a;27.5℃。&#xff08;2&#xff09;单片机读取按键状态并通过人为手动按键部分来设置最低温度到最高温度的温度范围后&#x…

C++ —— C++数据类型

C—— C数据类型 1、数据类型分类 &#xff08;1&#xff09;基本数据类型 字符型&#xff08;char&#xff09;—— 1字节 整型&#xff08;int&#xff09; —— 4字节 浮点型&#xff08;实型&#xff09;—— 单精度float4字节&#xff1b;双精度&#xff08;double&a…

参加 CSDN 2009 英雄大会有感(一)

参加 CSDN 2009 英雄大会有感&#xff08;一&#xff09; 我作为 CSDN Blog 专家参加了本次盛会。今天可以算是本次大会的第一天。下午参观了 CSDN 的研发中心&#xff0c;感觉蛮不错&#xff0c;从个人工作环境布局到各会议室的空间布局上都很紧凑&#xff0c;合理、最大化地…

不要怕辛苦

先说点事情一直以来我都非常喜欢跟大家交流各种问题&#xff0c;自我觉得回答比较用心&#xff0c;可能最近因为很多人毕业&#xff0c;遇到抉择的问题比较多&#xff0c;所以这类的提问也偏多一些。从开始做公众号到现在&#xff0c;支持我的人很多。有些读者从开始关注到现在…

SQL Server 连接字符串和身份验证 学习

https://www.cnblogs.com/niuyjdz/p/7533439.html

Win7系统中用anaconda配置tensorflow运行环境

前言&#xff1a;anaconda是一个python Data Science Platform。安装它的契机是因为要用tensorflow。安装完后感觉用它来管理python运行环境还是挺方便的&#xff0c;常用的conda命令&#xff1a;升级conda: conda update conda安装conda环境&#xff1a; conda create -n env_…

区分JavaScript中的undefined,null和NaN

区分underfined,null和NaN 先看看下面语句的运行结果&#xff1a; 1: var a; 2: alert(a); //显示"undefined" 3: alert(typeof a); //显示"undefined" 4: alert(b); //显示"undefined" 以上说明a的值和类型都是underfined 1: var a null; …

C++ —— C++常量和变量

C——常量和变量 1、常量 &#xff08;1&#xff09;整型常量 指不带小数点的整数&#xff0c;整型常量后面加上l或L表示该数为长整型常量 整型常量后面加上u或U表示该数为无符号整型常量 十进制中&#xff0c;由&#xff0c;&#xff0d;&#xff0c;0~9组成 &#xff08…

拆解前苏联产荧光数码管计算器,内部电路结构彪悍!

荧光数码管是用来显示数字和符号的器件。它的数码字形由若千段分立的笔划构成。荧光数码管是一种电真空器件&#xff0c;其工作原理与普通的电子管相似&#xff0c;它的灯丝就是阴极&#xff08;为直热式阴极&#xff09;&#xff0c;当灯丝通电后灯丝就会发热&#xff08;即阴…

silverlight之datagrid的一个问题

this.myDataGrid.itemSourcesitems; 使用泛型数组给datagrid添加itemsource,我想添加一个textblock对象,上面text"sdfd",可运行显示是System.Windows.Controls.TextBlock,如图,请大侠们指点 转载于:https://www.cnblogs.com/wuli00/archive/2009/04/20/1439677.html

什么是套接字(Socket)

什么是套接字(Socket) 应用层通过传输层进行数据通信时&#xff0c;TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接&#xff0c;许多计算机操作系统为应用…