C/C++中关于交换(Swap)函数的三种方法

这篇具有很好参考价值的文章主要介绍了C/C++中关于交换(Swap)函数的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

文章目录

前言

一、交换函数的说明

二、三种情况的说明

1.值传递

1.1值传递的运行结果

 2.传址调用

运行结果:

3.引用作为函数参数

运行结果:

 对于引用变量的说明

总结


前言

在学习编程中,交换函数是我们一定要理解的例子,以下是我的一些理解,希望可以帮助到大家。


一、交换函数的说明

在main函数中创建两个值,通过调用函数对其进行交换。

二、三种情况的说明

1.值传递

代码如下(示例):

#include<iostream>
using namespace std;
//1.值传递
void Swap1(int x,int y)
{
    int temp = x;     //定义中间变量,用于交换两个数值的中间媒介
    x = y;
    y = temp;
}
int main()
{
    int a = 20, b = 30;
    Swap1(a,b);        //调用交换函数1
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
    system("pause");
    return 0;
}

1.1值传递的运行结果

C/C++中关于交换(Swap)函数的三种方法

由此可见我们想要交换两个函数的数值,但是并没有实现交换,这是为什么呢?

C/C++中关于交换(Swap)函数的三种方法

由图可知,因为:传值函数并没有改变实参(a,b)的数值,只是改变了形参的数值(为了验证我们可以在函数中加入输出语句来验证形参是否改变)

C/C++中关于交换(Swap)函数的三种方法

 C/C++中关于交换(Swap)函数的三种方法

 可见形参被改变了。当函数调用结束后,x,y相应内存就会被清除。之后代码继续顺序执行,回到main函数执行输出语句。

 2.传址调用

#include<iostream>
using namespace std;
//2.地址传递
void Swap1(int *p1,int *p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
	//cout << "x=" << *p1 << endl;
	//cout << "y=" << *p2 << endl;
}
int main()
{
	int a = 20, b = 30;
	Swap1(&a,&b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	system("pause");
	return 0;
}

运行结果:

C/C++中关于交换(Swap)函数的三种方法

 由图可见,传址调用实现了两个数值的交换。Swap1(&a,&b),把地址传递过去,所以我们用指针进行接收void Swap1(int *p1,int *p2)。可以这样理解,指针p1指向a的那块内存,指针p2指向b的那块内存。*p1和*p2是对a和b的内存内数据进行操作,改变了实参的数值,所以在调用函数结束后a和b数值进行交换了。

3.引用作为函数参数

#include<iostream>
using namespace std;
//3.引用作为函数参数
void Swap1(int &x,int &y)
{
	int temp=x;
	x = y;
	y = temp;
}
int main()
{
	int a = 20, b = 30;
	Swap1(a,b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	system("pause");
	return 0;
}

运行结果:

C/C++中关于交换(Swap)函数的三种方法

 由图可见实现了两个数的交换,引用可以理解为给a起了一个”别名“同时可以操作一块地址a和x可以同时操作这块内存中的数据。所以在内存中的实参会被改变无论形参是否被释放。

C/C++中关于交换(Swap)函数的三种方法

 对于引用变量的说明

#include<iostream>
using namespace std;
//对于引用变量的解释
int main()
{
	int a = 10;
//创建引用变量的语法:“ 数据类型 &别名=原名;”
	int& b = a; //a和 b可以同时操作a这块内存的数值
	int c = 20;
	b = c;
	cout <<"a=" << a << endl;
	system("pause");
	return 0;
}


总结

分享一下我对这三种方法的理解,希望对大家有所帮助。有不正确的或不准确的地方希望各位大佬留言指点一下,谢谢啦。文章来源地址https://www.toymoban.com/news/detail-506772.html

到了这里,关于C/C++中关于交换(Swap)函数的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++基础与深度解析01——函数基本组成+函数传参的三种方法

    请安装Visual Studio 并学习基本的新建项目、新建CPP文件以及运行代码。 函数功能:打印“Hello World” 1.函数构成 输入参数列表+函数名+返回类型+函数主体 如下图所示,但是main函数稍有特殊,其为cpp 现举一个简单函数的例子,z= 2x-3y+3,其中xy均为浮点型小数,取函数名为CalBi

    2024年02月16日
    浏览(46)
  • OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形绘制) OpenCV函数简记_第三章数字图像的滤波处理(方框,均值,高斯,中值和双边滤波) OpenC

    2024年02月05日
    浏览(53)
  • 关于学习STM32的三种方式

    一、配置寄存器 不少先学了51的朋友可能会知道,会有一小部分人或是教程是通过汇编语言直接操作寄存器实现功能的,这种方法到了STM32就变得不太容易行得通了,因为STM32的寄存器数量是51单片机的十数倍,如此多的寄存器根本无法全部记忆,开发时需要经常的翻查芯片的

    2024年02月06日
    浏览(39)
  • swap分区详解(创建swap分区,启用swap交换空间,关闭swap交换空间)

    swap分区 是指在Linux操作系统中为了提高系统运行效率而设置的一块特殊的硬盘空间,也称为虚拟内存。当系统内存不足时,会将一部分不常用的内存数据存储到swap分区中,以释放内存空间,从而保证系统的稳定运行。 swap分区的大小一般设置为物理内存大小的两倍,但也可以

    2024年02月10日
    浏览(38)
  • flink的ProcessWindowFunction函数的三种状态

    在处理窗口函数时,ProcessWindowFunction处理函数可以定义三个状态: 富函数getRuntimeContext.getState, 每个key+每个窗口的状态context.windowState(),每个key的状态context.globalState,那么这几个状态之间有什么关系呢? 1.getRuntimeContext.getState这个定义的状态是每个key维度的,也就是可以跨时间

    2024年02月13日
    浏览(40)
  • C语言中函数宏的三种封装方式详解

      目录 ​编辑 1. 函数宏介绍 3. do{...}while(0) 方式 4. ({}) 方式 5. 总结 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。 函数宏本质上为宏,可以直接进行定义,例如: 但上述的宏具有一

    2024年02月02日
    浏览(48)
  • 动态VALN的三种划分方法

    VLAN的概念 VLAN(Virtual Local Area Network)的中文名为\\\"虚拟局域网\\\"。VLAN是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。这一新兴技术主要应用于交换机和路由器中,但主流应用还是在交换机之中。但又不是所有交换机都具有此功能,

    2024年02月07日
    浏览(81)
  • 脱离文档流的三种方法

            什么是脱离文档流呢?可以这样理解,本来这个标签是属于文档流管理的,那么它应该按照文档流的正常布局方式从左至右从上之下,并且符合标签本身的含义。         脱离文档流是指,这个标签脱离了文档流的管理。不受文档流的布局约束了,并且更重要

    2024年02月15日
    浏览(32)
  • 快速排序的三种实现方法

    快速排序的单趟排序 快速排序的单趟排序:是以一个数作为基准值,实现将数组中比基准数小的数放在基准值的左侧,比基准值大的数放在基准值的右侧。 方法一:霍尔法 霍尔法的由来:霍尔是一个人的名字,他是最初发现快速排序的人,所以,它使用的单趟排序算法被称为

    2024年01月25日
    浏览(41)
  • 提取人脸特征的三种方法

    安装dlib方法: https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/121470556 思路: 1、使用dlib.get_frontal_face_detector()方法检测人脸的位置。 2、使用 dlib.shape_predictor()方法得到人脸的关键点。 3、使用dlib.face_recognition_model_v1()方法提取特征。 新建face_embedding1.py,插入代码: predictor_path是

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包