4401: 【例7-5】交换两个变量的值

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:24 解决:12

题目描述

输入两个整数变量a和b,设计一个交换函数将其交换后再输出。注意:不能直接输出b和a。

样例输入 复制

1 2

样例输出 复制

2 1

提示

#include<bits/stdc++.h>
using namespace std;
void swap(int x,int y) {
	int t=x;
	x=y;
	y=t;
}
int main(){
    int a,b;
    cin>>a>>b;
    swap(a,b);
    cout<<a<<" "<<b<<endl;
	return 0;
}

经过测试,发现完全不起作用!这是因为在swap()函数中,x和y都是局部变量,所以怎么变都不会影响到外面了。经过改正的函数如下:

#include<bits/stdc++.h>
using namespace std;
void swap(int &x,int &y) {
	int t=x;
	x=y;
	y=x;
}
int main(){
    int a,b;
    cin>>a>>b;
    swap(a,b);
    cout<<a<<" "<<b<<endl;
	return 0;
}

在参数的变量名前面加上一个&符号,代表引用传参,相当于告诉swap()函数a和b这两个碗放在了什么地方,而不是直接把食材丢入机器中。如果这样,x就是a的别名,y就是b的别名,修改x和y的值,就会影响到a和b。
回想一下 scanf()函数,比如 scanf(“%d”,&n),这里加上&是一样的道理。将变量n的地址告诉给这个函数,这样才能让输入函数直到将读到的数据放入那个碗里。