ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++中形式参数和实际参数的问题

2020-02-22 21:10:00  阅读:271  来源: 互联网

标签:10 变量 int void c++ 参数 swap 形式参数


今天做c++例题的时候发现一个问题

有以下问题

输入两个整数后交换并输出结果

以下是原代码:

#include <iostream>
using namespace std;
void swap(int a, int b ){
	int t = a;
	a = b;
	b = t;
}

int main(){
	int x = 5, y = 10;
	cout << "x = " << x << "y = " << y << endl;
	swap(x,y);
	cout << "x = " << x << "y = " << y << endl;
	return 0;
}

这是输出后的结果,发现两个数字并没有交换

x = 5 y = 10
x = 5 y = 10

网上查了一下,发现是这个问题:

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

在这块内容中t、a、b只是这个函数的形式参数,并没有影响到代码的主体部分中调用的函数:

swap(x,y);

即这一行根本没有作用,只是交换了函数块中a、b的数值,如果我们想要将变量x、y交换的话,有如下两种办法:

法1:

可以使用指针的概念:

#include <iostream>
using namespace std;
void swap(int *a, int *b ){
	int t = *a;
	*a = *b;
	*b = t;
}

int main(){
	int x = 5, y = 10;
	cout << "x = " << x << "y = " << y << endl;
	swap(&x,&y);
	cout << "x = " << x << "y = " << y << endl;
	return 0;
}

我们可以调用x、y两个变量的地址作为swap()中的参数。
由于函数在写的时候,使用了指针:

void swap(int *a, int *b);

在调用的时候

swap(&x,&y);

当输入x,y的值后,swap()调用了两者的地址,而指针指向了x、y地址中的内容,通过这个函数将x、y的值调换了。


法2:

#include <iostream>
using namespace std;
void swap(int &a, int &b ){
	int t = a;
	a = b;
	b = t;
}

int main(){
	int x = 5, y = 10;
	cout << "x = " << x << "y = " << y << endl;
	swap(x,y);
	cout << "x = " << x << "y = " << y << endl;
	return 0;
}

这里可以用到c++中对于变量的引用

void swap(int &a, int &b ){
swap(x,y);

这里就涉及到了变量引用的概念。变量引用,打个比方就是给x取一个别名,叫a;给y取一个别名,叫b;
在c++中,我们可以使用“&”符号表达这层关系:

int x;
int &a = x;
int y;
int &b = y;

在主体部分函数调用x,y的时候

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

当输入x,y的值后,可认为将x的值传递了a,y的值传递了b,实现了两数的交换。

天下5912 发布了4 篇原创文章 · 获赞 0 · 访问量 43 私信 关注

标签:10,变量,int,void,c++,参数,swap,形式参数
来源: https://blog.csdn.net/qq251031557/article/details/104449476

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有