C++的引用变量作为函数参数

一、问题引入

C++的中新增一个特性:按引用传递变量,虽然与按传递变量的地址可以实现相同的结果,但引用有其独特的地方。

引用传递: 引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量的别名。

通过引用变量用作参数,函数将使用原始数据,而不是其副本。

二、解决过程

举例说明:

#include <iostream>

using namespace std;


void swapv(int a, int b)    // 传变量的值
{
    int temp = a;
    a = b;
    b = temp;
}
void swapp(int *a, int *b)  // 传变量的地址
{
    int temp = *a;
    *a = *b;
    *b= temp;
}
void swapq(int & a, int & b) // 传引用变量
{
    int temp = a;
    a = b;
    b = temp;
}

int main(void)
{
    int wallet1 = 120;
    int wallet2 = 50;
    cout << "source wallet1:" << wallet1 << endl;
    cout << "source wallet2:" << wallet2 << endl;
    cout << endl;

    swapv(wallet1, wallet2);
    cout << "传变量的值" << endl;
    cout << "wallet1:" << wallet1 << endl;
    cout << "wallet2:" << wallet2 << endl;
    cout << endl;

    wallet1 = 120;
    wallet2 = 50;
    swapp(&wallet1, &wallet2);
    cout << "传变量的地址" << endl;
    cout << "wallet1:" << wallet1 << endl;
    cout << "wallet2:" << wallet2 << endl;
    cout << endl;

    wallet1 = 120;
    wallet2 = 50;
    swapq(wallet1, wallet2);
    cout << "传引用变量" << endl;
    cout << "wallet1:" << wallet1 << endl;
    cout << "wallet2:" << wallet2 << endl;
    cout << endl;

    return 0;
}

? 运行结果

C++的引用变量作为函数参数

三、反思总结

C++新增的这项特性时对C语言的超越,C语言只能按值传递。

在使用传递变量的地址, 在函数使用的整个过程中, 都需要使用解引用运算符 * ,而 传递引用变量, 则可以使用使用变量。

因为引用参数实际上是基于指针的代码的另一个接口,那么什么时候应使用引用?、什么时候应使用指针?、什么时候应按值传递?

C++的引用变量作为函数参数

四、参考引用

C++ Primer Plus:中文版 (第六版) 第8章

原文链接:https://www.cnblogs.com/caojun97/p/17317803.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++的引用变量作为函数参数 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • C++/Qt网络通讯模块设计与实现(总结)

    至此,C++/Qt网络通讯模块设计与实现已分析完毕,代码已应用于实际产品中。 C++/Qt网络通讯模块设计与实现(一) 该章节从模块的功能需求以及非功能需求进行分析,即网络通讯模块负责网络数据包的发送、接收以及对外提供功能调用以及接口回调,其不进行产品业务的实现,达到平台化复用的目的,给出了类图,如下所示::   符合先设计再开发的思想,各类的功能也有详细描…

    C++ 2023年4月18日
    00
  • C++ 学习笔记

    堆,栈,RAII 堆:分配内存之后需要手动释放,否则,将要造成内存泄漏 new和delete操作的是free store malloc和free操作的是heap new的底层就是malloc 动态获取内存都是在堆中进行的auto ptr = new std::vector<int>() 智能指针 unique_ptr 独享它所指向的指针,也就是说…

    C++ 2023年4月18日
    00
  • 顺序表的实现:Book_Manage_System

    一、问题引入 图书信息管理系统:出版社有一些图书数据保存在一个文本文件book.txt 中,为简单起见,在此假设每种图书只包括三部分信息:ISBN (书号)、书名和价格,文件中的部分数据如图2.1 所示。现要求实现一个图书信息管理系统,包括以下6个具体功能。 (1) 查找:根据指定的ISBN 或书名查找相应图书的有关信息, 并返回该图书在表中的位置序号。(2…

    C语言 2023年4月18日
    00
  • 高效c语言1快速入门

    本章将开发你的第一个C语言程序:传统的 “Hello, world!”程序。然后讨论一些编辑器和编译器的选项,并阐述移植性问题。 Hello, world! #include <stdio.h> #include <stdlib.h> int main(void) { puts(“Hello, world!”); return EXI…

    C++ 2023年5月10日
    00
  • 【Visual Leak Detector】使用注意事项

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍使用 VLD 时的注意事项。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 官网文档 2. 注意事项 1. 官网文档 可以在 Using-Visual-Leak-Detector 官方文档里看到如何使用 VLD,里面介绍了如何在 Visual C++ 2003/2005/2…

    C++ 2023年4月17日
    00
  • C++文件处理

    ? 新建文件 //这是要操作的文件名称 string str_filename = “E:/data/t/haha.txt”; //创建一个流对象 o 就是从这个流对象出去, 出到哪里, 当然是我们要建立的文件 ofstream ofs; //out会覆盖 ofs.open(str_filename, ios::out); ofs << “我创建…

    C++ 2023年4月17日
    00
  • 前缀和

      一、什么是前缀和 前缀和是一种预处理,用于降低查询时的时间复杂度。 举个例子:给定 n 个整数,然后进行 m 次询问,每次询问求一个区间内值的和。 如果用暴力写法,那每次询问都需要从区间左端点循环到区间右端点求和,时间复杂度较大。 这种时候就可以预先求出该数组的一维前缀和。 则 ans=s[R]-s[L-1] ,其中 L 和 R 是给定的区间。每次询问可…

    C++ 2023年4月17日
    00
  • 第四部分:Spdlog日志库的核心组件分析-logger

    Spdlog是一个快速且可扩展的C++日志库,它支持多线程和异步日志记录。在本文中,我们将分析Spdlog日志库的核心代码,探究其实现原理和代码结构。 Spdlog的基本架构 上一篇文章介绍了spdlog的五个主要组件,其中最重要是Logger、Sink和Formatter其中,Logger负责日志的记录和管理,Sink负责将日志输出到不同的目标(比如控制台…

    C++ 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部