菜鸟教程 -- 学的不仅是技术,更是梦想!

C++ 教程
C++ 教程 C++ 简介 C++ 环境设置 C++ 基本语法 C++ 注释 C++ 数据类型 C++ 变量类型 C++ 变量作用域 C++ 常量 C++ 修饰符类型 C++ 存储类 C++ 运算符 C++ 循环 C++ 判断 C++ 函数 C++ 数字 C++ 数组 C++ 字符串 C++ 指针 C++ 引用 C++ 日期 & 时间 C++ 基本的输入输出 C++ 结构体(struct) C++ vector 容器 C++ 数据结构

C++ 面向对象

C++ 类 & 对象 C++ 继承 C++ 重载运算符和重载函数 C++ 多态 C++ 数据抽象 C++ 数据封装 C++ 接口(抽象类)

C++ 高级教程

C++ 文件和流 C++ 异常处理 C++ 动态内存 C++ 命名空间 C++ 模板 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程

C++ 资源库

C++ STL 教程 C++ 导入标准库 C++ 标准库 C++ 有用的资源 C++ 实例 C++ 测验 C++ <iostream> C++ <fstream> C++ <sstream> C++ <iomanip> C++ <array> C++ <vector> C++ <list> C++ <forward_list> C++ <deque> C++ <stack> C++ <queue> C++ <priority_queue> C++ <set> C++ <unordered_set> C++ <map> C++ <unordered_map> C++ <bitset> C++ <algorithm> C++ <iterator> C++ <functional> C++ <numeric> C++ <complex> C++ <valarray> C++ <cmath> C++ <string> C++ <regex> C++ <ctime> C++ <chrono> C++ <thread> C++ <mutex> C++ <condition_variable> C++ <future> C++ <atomic> C++ <type_traits> C++ <typeinfo> C++ <exception> C++ <stdexcept> C++ <cstdio> C++ <cstdint> C++ <memory> C++ <new> C++ <utility> C++ <random> C++ <locale> C++ <codecvt> C++ <cassert> C++ <cwchar> C++ <climits> C++ <cfloat> C++ <cstdlib> C++ <numbers> C++ OpenCV
(追記) (追記ここまで)

C++ 引用调用

C++ 函数 C++ 函数

向函数传递参数的引用调用方法,把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

按引用传递值,参数引用被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为引用类型,该函数用于交换参数所指向的两个整数变量的值。

// 函数定义
void swap(int &x, int &y)
{
 int temp;
 temp = x; /* 保存地址 x 的值 */
 x = y; /* 把 y 赋值给 x */
 y = temp; /* 把 x 赋值给 y */
 
 return;
}

现在,让我们通过引用传值来调用函数 swap():

实例

#include<iostream>usingnamespacestd; // 函数声明voidswap(int &x, int &y); intmain(){// 局部变量声明inta = 100; intb = 200; cout << "交换前,a 的值:" << a << endl; cout << "交换前,b 的值:" << b << endl; /* 调用函数来交换值 */swap(a, b); cout << "交换后,a 的值:" << a << endl; cout << "交换后,b 的值:" << b << endl; return0; }// 函数定义voidswap(int &x, int &y){inttemp; temp = x; /* 保存地址 x 的值 */x = y; /* 把 y 赋值给 x */y = temp; /* 把 x 赋值给 y */return; }

当上面的代码被编译和执行时,它会产生下列结果:

交换前,a 的值: 100
交换前,b 的值: 200
交换后,a 的值: 200
交换后,b 的值: 100

关键点

  1. 引用定义:通过使用&符号来定义引用类型,例如int &ref
  2. 传递引用:在函数参数列表中使用引用类型,这样函数内部的修改会影响到实际传递的变量。
  3. 避免拷贝开销:引用传递避免了传递大对象时的拷贝开销,提高了效率。

引用调用的应用场景

  • 修改外部变量:如上例所示,通过函数修改传入的变量。
  • 减少开销:特别是在传递大对象或复杂数据结构时,引用传递可以避免不必要的拷贝操作。
  • 返回值优化:通过引用返回函数的局部变量,避免了返回值拷贝的开销。

引用调用是C++中的一种重要技术,可以提高代码的效率和灵活性。了解和熟练使用引用调用对于编写高效的C++程序非常有帮助。

C++ 函数 C++ 函数

AI 思考中...

3 篇笔记 写笔记

  1. #0
    199

    这里利用了数异或的性质,一个数与其本身异或等于 0,0 与一个数异或不改变该数。说到 swap,我想起了优化的 swap,可能稍微难理解一点。

    int swap(int& a, int& b)
    {
     int temp;
     temp = a ^ b;
     a = temp ^ a;
     b = temp ^ b;
     return 0;
    }

    这里利用了数异或的性质,一个数与其本身异或等于 0,0 与一个数异或不改变该数。

    7年前 (2019年03月12日)
  2. #0

    快点常驻定轨

    fxx***[email protected]

    22

    顺手翻到,回一下上面那个人的笔记:

    原笔记:

    int swap(int& a, int& b) {
     int temp;
     temp = a ^ b;
     a = temp ^ a;
     b = temp ^ b;
     return 0;
    }

    一般直接写成一行命令:

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

    虽然就一行感觉没必要封装就是了。

    快点常驻定轨

    fxx***[email protected]

    3年前 (2023年08月21日)
  3. #0

    Fungus

    fun***[email protected]

    4

    接第二篇笔记。没必要封装成函数,不过可以写成宏:

    #define swap(x, y) ((x)^=(y)^=(x)^=(y))

    但昰注意一下,给这种宏"函数"传参的时候,不要传入带有副作用的表达式,即表达式自身会改变其中参数的值。举个例子

    swap(++x, y*=2);

    后果昰什么可以猜出来。

    Fungus

    fun***[email protected]

    2年前 (2024年06月14日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /