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. 【Microsoft Azure 的1024种玩法】二.基于Azure云平台的安全攻防靶场系统构建

    简介 本篇文章将基于在Microsoft Azure云平台上使用Pikachu去构建安全攻防靶场,Pikachu使用世界上最好的语言PHP进行开发,数据库使用的是mysql,因此运行Pikachu需要 ...

  2. PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台

    系统和系统之间,少不了数据的互联互通.随着微服务的流行,一个系统内的不同应用进行互联互通也是常态. PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix.这个项目借鉴了工作过的 ...

  3. [atARC116F]Deque Game

    假设两个操作者分别为$A$和$B$,其中$A$希望最大.$B$希望最小 (并不默认$A$为整局游戏的先手,仅是最终的结果考虑$A$为先手时) 记第$i$个队列第$j$个元素为$a_{i,j}$(其中$ ...

  4. [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer

    [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 目录 [源码解析] PyTorch 分布式(11) ----- Dis ...

  5. Maven pom常用plugins配置说明

    maven-compiler-plugin 编译Java源码,一般只需设置编译的jdk版本 <plugin> <groupId>org.apache.maven.plugins ...

  6. vite的项目,使用 rollup 打包的方法

    官网资料 构建生产版本--库模式 https://cn.vitejs.dev/guide/build.html#library-mode 详细设置 https://cn.vitejs.dev/conf ...

  7. 在Ubuntu上安装Docker Engine

    在Ubuntu上安装Docker Engine 这篇文章是介绍如何在在Ubuntu上安装Docker Engine,就是Google翻译官方文档的版本,英语好的直接官方原文.原文 要在Ubuntu上开 ...

  8. Codeforces 1149C - Tree Generator™(线段树+转化+标记维护)

    Codeforces 题目传送门 & 洛谷题目传送门 首先考虑这个所谓的"括号树"与直径的本质是什么.考虑括号树上两点 \(x,y\),我们不妨用一个"DFS&q ...

  9. Break up CF700C

    Break up CF700C 首先考虑只能删一条边的做法,我们可以找出所有的桥,然后随便跑一条 S 到 T 路径,如果这条路径上有桥就说明可以,否则不行 发现这个做法其实是 O(M) 的 那么可以先 ...

  10. 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)

    题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ...