方式一: 传值
/*
Copyright (c) 2015,烟台大学计算机与控制工程学院
All righs reserved
文件名称:replace.cpp
作者: 李哲
完成日期:2015年9月7日
*/
#include <stdio.h>
void myswap(int , int );
int main()
{
int a, b; //定义变量a,b
printf("请输入待交换的两个整数:"); //输出“请输入待交换的两个整数”
scanf("%d %d", &a, &b); //输入a,b的值
myswap(a,b); //调用myswap交换函数
printf("调用交换函数后的结果是:%d 和 %d\n", a, b); //输出a,b的值
return 0;
}
void myswap(int x, int y) //交换数值
{
int t; //定义变量
t=x;
x=y;
y=t;
}
运行结果:
失败原因:x,y作为a和b的形参,拥有和a,b相同的值,但并不是保存于同一地址上的变量,所以调用myswap()函数交换的是x,y的值,并不是a,b的值。
方式二:传地址
/*
Copyright (c) 2015,烟台大学计算机与控制工程学院
All righs reserved
文件名称:replace.cpp
作者: 李哲
完成日期:2015年9月7日
*/
#include <stdio.h>
void myswap(int *, int *);
int main()
{
int a, b; //定义变量a,b
printf("请输入待交换的两个整数:"); //输出“请输入待交换的两个整数”
scanf("%d %d", &a, &b); //输入a,b的值
myswap(&a,&b); //调用myswap交换函数
printf("调用交换函数后的结果是:%d 和 %d\n", a, b); //输出a,b的值
return 0;
}
void myswap(int *p1, int *p2) //调用交换函数,形参为指针变量,指向a,b的地址
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
运行结果:
成功原因: 交换函数直接继承a,b变量的地址,所以交换函数myswap()实际上交换的是a,b变量的地址。
方式三:引用做形参
/*
Copyright (c) 2015,烟台大学计算机与控制工程学院
All righs reserved
文件名称:replace.cpp
作者: 李哲
完成日期:2015年9月7日
*/
#include <stdio.h>
void myswap(int &, int &);
int main()
{
int a, b; //定义变量a,b
printf("请输入待交换的两个整数:"); //输出“请输入待交换的两个整数”
scanf("%d %d", &a, &b); //输入a,b的值
myswap(a,b); //调用myswap交换函数
printf("调用交换函数后的结果是:%d 和 %d\n", a, b); //输出a,b的值
return 0;
}
void myswap(int &x, int &y) //调用交换函数,x,y为a,b的引用
{
int t;
t=x;
x=y;
y=t;
}
运行结果:
成功原因:交换函数的形参x,y是作为a,b的引用出现的,作用类似于直接以实参做交换。