C语言exchange函数,C++指针作为函数参数

函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送给被调用函数的形参。

【例6.3】题目同例6.2,即对输入的两个整数按大小顺序输出。这里用函数处理,而且用指针类型的数据作函数参数。程序如下:

#include

using namespace std;

int main( )

{

void swap(int *p1,int *p2); //函数声明

int *pointer_1,*pointer_2,a,b; //定义指针变量pointer_1,pointer_2,整型变量a,b

cin>>a>>b;

pointer_1=&a; //使pointer_1指向a

pointer_2=&b; //使pointer_2指向b

if(a

cout<

return 0;

}

void swap(int *p1,int *p2) //函数的作用是将*p1的值与*p2的值交换

{

int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

运行情况如下:

45 78↙

max=78 min=45

请注意:不要将main函数中的swap函数调用写成

if(a

1c147f82ac4c2d1a7342b175972a68fd.png

图6.9

请注意交换*p1和*p2的值是如何实现的。如果写成以下这样就有问题了:

void swap(int *p1, int *p2)

{

int *temp;

*temp=*p1; //此语句有问题

*p1=*p2;

*p2=*temp;

}

本例采取的方法是交换a和b的值,而p1和p2的值不变。这恰和例6.2相反。

可以看到,在执行swap函数后,主函数中的变量a和b的值改变了。这个改变不是通过将形参值传回实参来实现的。请读者考虑一下能否通过调用下面的函数实现a和b互换。

void swap(int x, int y)

{

int temp;

temp=x;

x=y;

y=temp;

}

在main函数中用“swap(a, b);”调用swap函数,会有什么结果呢?在函数调用时,a的值传送给x,b的值传送给y,如图6.10(a)所示。执行完swap函数最后一个语句后,x和y的值是互换了,但main函数中的a和b并未互换,如图6.10(b)所示。也就是说由于虚实结合是采取单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参。

40016aa53756519aca3d513176e35234.png

图6.10

为了使在函数中改变了的变量值能被main函数所用,不能采取把要改变值的变量作为参数的办法,而应该用指针变量作为函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了“通过调用函数使变量的值发生变化,在主调函数中使用这些改变了的值”的目的。

如果想通过函数调用得到n个要改变的值,可以采取下面的步骤:

在主调函数中设n个变量,用n个指针变量指向它们;

编写被调用函数,其形参为n个指针变量,这些形参指针变量应当与主调函数中的n个指针变量具有相同的基类型;

在主调函数中将n个指针变量作实参,将它们的值(是地址值)传给所调用函数的n个形参指针变量,这样,形参指针变量也指向这n个变量;

通过形参指针变量的指向,改变该n个变量的值;

在主调函数中就可以使用这些改变了值的变量。

请注意,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。请分析下面程序:

#include

using namespace std;

int main( )

{

void swap(int *p1,int *p2);

int *pointer_1,*pointer_2,a,b;

cin>>a>>b;

pointer_1=&a;

pointer_2=&b;

if(a

cout<

return 0;

}

void swap(int *p1,int *p2)

{

int *temp;

temp=p1;

p1=p2;

p2=temp;

}

bc1e0ca42c8cf15fd8a7152b85a901e2.png

图6.11

实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。

函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作函数参数,就可以通过指针变量改变主调函数中变量的值,相当于通过函数调用从被调用的函数中得到多个值。如果不用指针变量是难以做到这一点的。

【例6.4】输入a,b,c 3个整数,按由大到小的顺序输出。

用上面介绍的方法,用3个指针变量指向3个整型变量,然后用swap函数来实现互换3个整型变量的值。程序如下:

#include

using namespace std;

int main( )

{

void exchange(int *,int *,int *); //对exchange函数的声明

int a,b,c,*p1,*p2,*p3;

cin>>a>>b>>c; //输入3个整数

p1=&a;p2=&b;p3=&c; //指向3个整型变量

exchange(p1,p2,p3); //交换p1,p2,p3指向的3个整型变量的值

cout<

}

void exchange(int *q1,int *q2,int *q3)

{

void swap(int *,int *); //对swap函数的声明

if(*q1

if(*q1

if(*q2

}

void swap(int *pt1,int *pt2) //将pt1与pt2所指向的变量的值互换

{

int temp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

}

运行情况如下:

12 -56 87↙

87 12 -56

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android自定义阴影,Android自定义边框加阴影

一、前言Android自定义边框&#xff0c;可以设置任意边框的角度和阴影。我下面分为 四个角度设置边框、两个角度设置边框、半圆球设置边框加两层阴影等。二、边框分类&#xff1a;1、四个角度设置边框效果图&#xff1a;图片.png2、两个角度设置边框android:topLeftRadius"…

linux read recv,read()/ recv()成功,但缓冲区未更改且为空

我正在编写一个客户端&#xff0c;以使用LINUX上的C脚本读取TCP下通过套接字从服务器发送回的数据。该服务器永远运行&#xff0c;我验证是否可以得到答复netcat localhost [PORT_NUMBER]。使用以下命令检查时&#xff0c;服务器处于LISTEN状态netstat -naprecv()函数返回预期的…

android 代码阅读,代码阅读器手机版-代码阅读器appv1.0 安卓版-腾牛安卓网

代码阅读器app&#xff0c;一款非常不错的手机阅读开源代码软件&#xff0c;不但能够让你们在上面选择自己喜欢的阅读代码&#xff0c;还能够选择大量的阅读主题&#xff0c;方便你们在任何时候&#xff0c;都能够获得最佳的阅读环境。代码阅读器app简介一款简单的源码阅读器的…

android点击运行后无法显示设备,Android仿真器除了黑屏外什么都不显示,adb设备显示“设备离线”...

我只是想开始在Android中进行开发。因此&#xff0c;问题是当我尝试通过发出命令emulator A2来启动仿真器时&#xff0c;屏幕上会出现一个仿真器。但是即使等待了2-3个小时&#xff0c;它所显示的只是一个黑屏。甚至没有android主屏幕或android徽标。只是黑屏。最初&#xff0…

Android测量图像中物体大小,android – 加载图像后测量ImageView

我试图找到一种方法来测量ImageView后使用Glide或Picasso(或其他任何东西)加载图像.基本上,我试图在某些位置在图像顶部布局其他视图,但需要最终的ImageViews尺寸才能准确地完成.我不知道用于尝试这样做的最佳布局是什么,但我目前正在使用这个&#xff1a;android:layout_width…

android string参数最大长度,每日一问 | 我们经常用的 String类型,你知道它最大可以放多长的字符串吗?...

String被用作常量时&#xff0c;它被编译器当成字面量存放于常量池。常量池中主要存放两大类常量&#xff1a;字面量和符号引用&#xff1b;常量池中的每一个常量都是一个表&#xff0c;字符串常量存于CONSTANT_Utf8_info表(Tip:字节码文件由无符号数和表映射的数据构成&#x…

android物理健代码,Android 物理按键整理及实例代码

先给大家看一段代码&#xff0c;然后说明。import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.widget.Toast;public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle…

Android studio 按钮排版,Android Studio自动排版的两种方法

解决java compiler level does not match the version of the installed java project facet在项目目录的.setting文件夹下的org.eclipse.wst.common.project.facet.core.xml中 CSS长度单位及区别 em ex px pt in1. css相对长度单位 em 元素的字体高…

android 中自定义键盘,【图片】自定义属于自己的专属键盘的思路!!!(需要有android编程基础)【exagear吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼最近玩一些全键盘游戏,比如elona,nethack等等这类游戏,模拟器的键盘就很不够用,那个 游戏键盘 软件用起来体验也很不好,今天自己就琢磨着为这些游戏专门写一个键盘.1.首先尝试了写一个简单的键盘,发现无法实现跨进程用(也就是说只能…

linux sed 冒号,linux sed 总结

1.简介sed是一种行编辑器&#xff0c;它一次处理一行内容。2.sed调用方式sed [options] command file(s)sed [options] -f scriptfile file(s)第一种直接在命令行中执行&#xff0c;第二种把命令写到了脚本中&#xff0c;二者无本质区别。示例(1)&#xff1a;打印hello.txt的内…

wps office android,WPS Office

应用介绍安卓端办公软件&#xff0c;个人版免费使用用户多:全球用户600,000,000排名高:全球APP总榜同类产品榜首体积小:只安装一个应用即可打开所有格式文档云办公:免费云空间&#xff0c;安全高效&#xff0c;可以在任何设备.上及时查看和编辑远程办公推荐-远程会议&#xff0…

鸿蒙形容欣欣向荣发展,比喻事业蓬勃发展繁荣兴旺的成语蒸蒸日上

2020-03-13阅读(79)1.《RE从零开始的异世界生活》作者&#xff1a;长月达平。2.《魔法少女小圆》作者&#xff1a;新房昭之。3.《命运石之门》作者&#xff1a;冈部伦太郎。4.《寒蝉鸣泣之时》作者&#xff1a;前原圭一。5.《目隐都市的演绎者》作者&#xff1a;新房昭之。6.《…

android 照片特效,android触摸时扭曲变形图片照片,图片特效

【实例简介】在手指触摸照片图片时扭曲变形图片照片&#xff0c;用于变脸&#xff0c;哈哈镜&#xff0c;旗帜飘动特效的应用中【实例截图】【核心代码】MeshTest└── MeshTest├── AndroidManifest.xml├── bin│ ├── classes.dex│ ├── org│ │ └── …

c语言深度解剖 pdf,c语言深度解剖(解密).pdf.pdf

c语言深度解剖(解密).pdf.pdf还剩130页未读&#xff0c;继续阅读下载文档到电脑&#xff0c;马上远离加班熬夜&#xff01;亲&#xff0c;很抱歉&#xff0c;此页已超出免费预览范围啦&#xff01;如果喜欢就下载吧&#xff0c;价低环保&#xff01;内容要点&#xff1a;* Stru…

html中链接不自动变色,HTML 点击 标签 链接 点击之后变色-转发【已解决】

可以利用CSS的伪类实现&#xff1a;a:link&#xff0c;定义正常链接的样式&#xff1b;a:visited&#xff0c;定义已访问过链接的样式&#xff1b;a:hover&#xff0c;定义鼠标悬浮在链接上时的样式&#xff1b;a:active&#xff0c;定义鼠标点击链接时的样式。例子&#xff1a…

中秋主题html,中秋节活动主题标语

以下是出国留学网小编为大家精心挑选和整理的中秋节活动主题标语&#xff0c;供大家参考和借鉴&#xff0c;希望能帮助到大家!更多资讯尽在出国留学网!1. 庆中秋&#xff0c;迎国庆&#xff0c;送大礼!2. 万家团圆迎中秋&#xff0c;四海欢腾庆国庆3. 月是故乡明,饼表思亲情!4.…

一张纸厚度是多少毫米_大洼20毫米水泥纤维板多少钱一张追求至善

大洼20毫米水泥纤维板多少钱一张追求至善而且强度和硬度随时间而增强&#xff0c;保证有超长的使用寿命。近年来&#xff0c;我国对loft复式阁楼板的研究较为深入。与龙骨的配合&#xff0c;有效降低工程和装修成本&#xff0c;外观颜色均匀&#xff0c;表面平整&#xff0c;直…

html中删除代码怎么写,html空格代码怎么写?

html空格代码怎么写&#xff1f;html空格代码是 为html空格字符代码&#xff0c;由“ ”组成&#xff0c;记住最后一个分号不要忘记了。CSS中当 white-space 属性取值为pre时&#xff0c;浏览器会保留文本中的空格和换行,例如&#xff1a;AA BB显示效果为&#xff1a; AA BBCS…

管程由哪三部分组成_黄蜀葵烘干机是由哪几个部分组成的

黄蜀葵在近几年有大量的需求增加&#xff0c;市面上有大量的黄蜀葵烘干机的需求产生&#xff0c;黄蜀葵烘干机一般用的都是网带机的形式结构来对黄蜀葵进行烘干&#xff0c;那么黄蜀葵烘干机的重要组成部分有哪些呢&#xff1f;1 上料端上料端是黄蜀葵烘干机的前段部分&#xf…

在线js拼接html代码,关于js拼接html元素?

你的意思是 小明和 888888这样的学号都是从数据中来的&#xff1f;然后要展现到前端页面中其实有很多方法&#xff1a;一. 直接全HTML拼接(你可能想到的方法)// 假设 有 name 和 xueID 分别代表名字和学号的变量var HTMLbankname xueID name 上学校&#xff0c;天天不迟到&…