1. 含义

    引用不产生副本,只是给原变量起了别名。

    对引用变量的操作就是对原变量的操作。

  2. 基本语法

    数据类型 &别名 = 原名

    e.g.

int a = 10;
int &b = a; //引用必须要初始化,一旦初始化后不可以更改:因为本指是指针常量,不可以修改指针的指向

可以通过赋值修改:

int main()
{
int a = 10;
int &b = a;
int c = 20;
b = c; //可以赋值,但是不能更改引用
cout << "a" << a << endl;
cout << "b" << b << endl;
system("pause");
}



发现更改了引用b的值之后,a的值也跟着改变了。

对引用变量的操作就是对原变量的操作。

  1. 引用作为函数参数

    作用:传参让形参修饰实参

    优点:简化指针修改实参。

    void test01(&a)

  2. 引用作为函数返回值

#include <iostream>
using namespace std; //返回局部变量引用
int& test01()
{
int a = 10; //局部变量存放在 栈区
return a;
} //函数调用可以作为左值,调用完后返回a的引用。
//左值必须为可修改的值
int& test02()
{
static int a = 10; //静态变量,存放在全局区,全局区数据在程序结束后系统释放
return a;
} int main()
{
// 不能返回局部变量的引用
// int &ref = test01();
// cout << ref << endl; int &ref2 = test02();
cout << ref2 << endl; test02() = 1000; //如果函数的返回值是引用,这个函数调用可作为左值,因为引用相当于返回了变量,可以被修改
cout << ref2 << endl; system("pause");
}
  1. 引用的本质

    在C++内部实现一个指针常量。

    指针常量:指针的指向不可以修改,指针指向的地址的内存中的值可以修改。
//发现是引用,转换为 int* const ref = &a;
void func(int& ref)
{
ref = 100; // ref是引用,转换为*ref = 100
}
int main()
{
int a = 10; //自动转换为 int* const ref = &a; 创建引用相当于创建了一个指针常量:指针的**指向固定**
int& ref = a; ref = 20; //内部发现ref是引用,自动转换为:*ref = 20; func(a);
}
  1. 常量引用

    作用:修饰形参,防止误操作
#include <iostream>
using namespace std; //打印数据函数
void showValue (const int& val)
{
//作用2: 防止误操作
//val = 1000; 报错,不能修改
cout << val << endl;
} int main()
{
//常量引用
//使用场景:用来修饰形参,防止误操作 //作用1: 直接赋值(常值)
//加上const之后 编译器将代码修改 int temp = 10; const int &ref = temp;
//int& ref = 10; 报错,引用必须引一块合法的内存空间
const int& ref = 10;
//ref = 20; 报错,加入const之后变为只读,不可以修改 int a = 100;
showValue(a);
cout << a << endl; system("pause");
}

【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用的更多相关文章

  1. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  2. JS基础语法---函数---介绍、定义、函数参数、返回值

    函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...

  3. Python基础之函数参数与返回值进阶

    参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...

  4. javascript函数参数、返回值类型检查

    实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.de ...

  5. 04 python学习笔记-函数、函数参数和返回值(四)

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print(),我们也可以自己创建函数,这叫做用户自定 ...

  6. Java中能否利用函数参数来返回值

    转自https://blog.csdn.net/da_da_xiong/article/details/70039532 我们在写代码时通常会遇到一种情况,就是我们可能希望在一个函数操作完成后返回两个 ...

  7. c++函数参数或返回值为函数指针

    C++中函数指针的形式为:返回值类型 + 参数类型,函数没有值类型,但是却可以声明函数的指针,因为函数是可寻址的,存放在内存中的代码段,可以从指针访问. 函数指针可以声明为: void (*pF)(v ...

  8. ajax中error函数参数与返回值详解 200 300 400 500

    201-206:都表示服务器成功处理了请求的状态代码,说明网页可以正常访问. 200:(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. 201:(已创建) 请求成功且服务器已创建 ...

  9. python中函数的参数和返回值

    目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...

随机推荐

  1. 常见yaml写法-deployment

    apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata: name: cango-demo #Deployment名称 ...

  2. 我罗斯方块第二次作业(Block类)

    负责任务 完善Block类的相关函数及变量: 对Block类的函数功能进行调试: github项目地址. 开发日记 2020.5.11 今天和朋友们讨论了如何分工的工作,我负责的部分是Block类的完 ...

  3. redis集群安装搭建

    vi redis-6379.conf   #包含通用配置 include "/usr/local/redis/conf/redis-common.conf" pidfile &qu ...

  4. [luogu7418]Counting Graphs P

    参考[luogu7417],同样求出最短路,得到二元组$(x,y)$并排序,记$tot_{(x,y)}$为$(x,y)$的数量 其中所给的两个条件,即分别要求: 1.$(x,y)$只能和$(x\pm ...

  5. 基于echarts 24种数据可视化展示,填充数据就可用,动手能力强的还可以DIY(演示地址+下载地址)

    前言 我们先跟随百度百科了解一下什么是"数据可视化 [1]". 数据可视化,是关于数据视觉表现形式的科学技术研究. 其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来 ...

  6. ISIJ2021 游记

    Day -419 ~ ? - 2020.5.8 ~ ? 咦?ISIJ2021 怎么会扯到 2020 年的事情呢? 好吧这似乎真的是一个长篇大论,事情真的要从那一天开始讲起-- 仍依稀记得 2020 年 ...

  7. Codeforces 1396D - Rainbow Rectangles(扫描线+线段树)

    Codeforces 题面传送门 & 洛谷题面传送门 一道鸽了整整一年的题目,上一次提交好像是 2020 年 9 月 13 日来着的(?) 乍一看以为第 2 个提交和第 3 个提交只差了 43 ...

  8. seq生成格式化字符

    [root@ansz.quan.bbs ~]$seq -s "+" 10 1+2+3+4+5+6+7+8+9+10 seq为生成数字序列 -s 分隔符

  9. LInkedList总结及部分底层源码分析

    LInkedList总结及部分底层源码分析 1. LinkedList的实现与继承关系 继承:AbstractSequentialList 抽象类 实现:List 接口 实现:Deque 接口 实现: ...

  10. javaSE高级篇1 — 异常与多线程基础

    1.异常的体系结构  注:Throwable是一个类,不是一个接口,这个类里面是描述的一些Error和Exception的共性,如图所示: 异常 / 错误是什么意思? 定义:指的是程序运行过程中,可能 ...