首页 > 编程语言 >【c++】引用的用法

【c++】引用的用法

时间:2024-01-31 19:00:43浏览次数:27  
标签:10 main int c++ 用法 引用 using include

一、引用的介绍

引用还有一个别的叫法:取别名

通俗点说:每个人都有一个大名,可能也有一个小名,但是都是指一个人,引用也就是一个变量的别名。

1.引用的概念:

引用不是定义一个别的变量,而是给一个变量取别名

注:引用变量编译器不会为这个变量单独开辟一块内存,它和它引用的变量使用同一块内存

2.引用的定义方法

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

#include<iostream>
using namespace std;
int main()
{
  int a=10;
  int& p=a;
  cout<<"a="<<a<<endl;
  cout<<"p="<<p<<endl;
}

输出:

a=10

b=10

#include<iostream>
using namespace std;
int main()
{
  int a=10;
  int& p=a;
  cout<<"&a="<<a<<endl;
  cout<<"&p="<<p<<endl;
}

输出结果 a和p的地址是一模一样的

所以说明:a和p指向的空间是一置的,a改变p也会改变

注:引用类型和引用实体必须是同种类型的

二、引用的特性

1.注:引用在定义时要初始化

#include<iostream>
using namespace std;
int main(void)
{
  int a=10;
  //int& p;//不初始化会报错
  int& p=a;
}

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

#include<iostream>
int main()
{
  int a=10;
  int& b=a;
  int& c=a;
  int& d=a;
}

3.引用不能多次初始化

#include<iostream>
using namespace std;
int main(void)
{
  int a=10;
  int& pe=a;
  int b=20;//这样编译器就会报错,错误:pe多次初始化
  int& pe=b;
}

三、引用与指针(重要)

 前言:我在讲引用的定义方法的时候,得出了引用变量名和实体所指向的空间是一样的,所以我们再计算一下引用和指针的大小等一些问题

#include<iostream>
using namespace std;
int main(void)
{
  int a=10;
  int& re=a;
  int* p=&a;
  cout<<sizeof(re)<<endl;
  cout<<sizeof(p)<<endl;
  cout<<"----------------"<<endl;
  char b='a';
  char& rb=b;
  cout<<sizeof(rb)<<endl;
}

由此我们可以得出,引用的大小和类型有关系,int类型的引用大小就为4,char类型的引用大小就为1

看似引用和指针确实关系不大,但是引用和指针在底层的实现没有任何区别,如果不信就看下面这段代码:

#include<iostream>
using namespace std;
int main(void)
{
  int a=10;
  int& ra=a;
  ra=20;
  int* pa=&a;
  *pa=20;
}

以下是该代码的反汇编:

【c++】引用的用法_ios

我们可以发现指针和引用的实现是完全一致的

注:其实我们就可以认为当给引用重新赋值时,编译器自动将*这一操作符补上了。






















标签:10,main,int,c++,用法,引用,using,include
From: https://blog.51cto.com/u_16351083/9514538

相关文章

  • C++ 使用单调时钟按一定时间间隔执行任务
    使用condition_variable实现定时执行任务遇到一个开发任务,需要按一定的时间间隔执行任务,本来是一个简单的功能,直接使用condition_variable就可以了最开始是直接使用condition_variable实现的定时触发机制,代码的大致实现类似于:#include<condition_variable>#include<chrono......
  • 如何在Visual Studio新C++项目中调用之前配置过的库?
      本文介绍在VisualStudio软件中调用C++各种配置、编译完毕的第三方库的方法。  在撰写C++代码时,如果需要用到他人撰写的第三方库(例如地理数据处理库GDAL、矩阵运算库Armadillo等),并不能像Python等语言那样,安装好库后直接在不同代码文件中使用;而是需要每一次新建一个代码文件......
  • 深入理解Java引用类型
    深入理解Java引用类型在Java中类型可分为两大类:值类型与引用类型。值类型就是基本数据类型(如int,double等),而引用类型,是指除了基本的变量类型之外的所有类型(如通过class定义的类型)。所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用......
  • 从C向C++——运算符重载
    本文的主要知识点是C++中的运算符重载。1.运算符重载所谓重载,就是赋予新的含义。函数重载(FunctionOverloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。**运算符重载(OperatorOverloading)**也是一个道理,同一个运算符可以有不同的功能。实际上,我们已经在不知不觉中......
  • 《C++ Primer Plus》(第六版)中文版——思维导图+附录PDF+源代码
    说明,以下文件可在异步社区免费下载不同之处在于原附录PDF文件没有书签,而本文分享的附录文件带有书签本文所有文件下载链接:https://www.123pan.com/s/lO3uVv-uaEKv.html思维导图(图片)以下仅为预览,高清图片可从文章开头下载链接中下载另外后续本人有空会制作XMind脑图版本,会添加......
  • jQuery引用教程,CDN或下载教程
    如何在网页中添加jQuery?jQuery库是一个JavaScript文件,可以使用HTML的<script>标签引用它,通过其他云厂商提供的CDN在网页中添加jQuery。阿腾云atengyun.com分享多种安装jQuery的方法:下载jQuery并引用jQuery有两个版本的可供下载:Productionversion–用于实际的网站中,已被精简和......
  • 深入解析CompletableFuture的功能和用法
    https://zhuanlan.zhihu.com/p/650390185?utm_id=01.CompletableFuture简介1.1概述CompletableFuture是Java8中引入的一个类,它实现了CompletionStage接口,提供了一组丰富的方法来处理异步操作和多个任务的结果。它支持链式操作,可以方便地处理任务的依赖关系和结果转换......
  • 【侯捷C++面向对象笔记】补充5-new & delete重载
    平时所使用的new和delete操作,称之为表达式,一般由好几个步骤组成。如上图所示,new表达式会被编译器转化为三个步骤。new表达式不能重载,但其中operatornew是可以重载的。➡️全局::operatornew的重载why不能放在namespace内?因为全局operatornew是放在defaultglobalnamespac......
  • C#中问号(?)运算符的历代新增用法
    本文是B站up主十月的寒流的相应视频的学习笔记,可以直接访问该视频获取更详细的讲解:C#中问号(?)运算符的历代新增用法C#1.0三目运算符stringres=x>5?"goood":"no"C#2.0可为空的值类型(NullableValueTypes)int?x=null;上述代码本质上是Nullable<int>x=nul......
  • 【侯捷C++面向对象笔记】补充2-pointer-like & function-like class
    关键词:仿函数pointer-like:将一个类设计得像指针一样,通常通过重载*和->操作符实现。function-like:将类的成员设计得能像函数一样使用,通过重载()操作符实现。TipDemo应用:智能指针注意:->符号在作用一次后,会继续作用下去(不同于*号)Foof(*sp):f为一个Foo对象本体,使用时f.m......