1、单纯的传值
#include
using namespace std;
// 函数声明
void swap(int x, int y);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;
/* 调用函数来交换值 */
swap(a, b);
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
return 0;
}
// 函数定义
void swap(int x, int y)
{
int temp;
cout << "调用的函数中的交换:"<
cout << x <
cout << y <
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
cout << x <
cout << y <
return;
}单纯的传值,只在调用的函数中改变值,原来的值并没有改变:
100
200
200
100
交换后,a 的值:100
交换后,b 的值:200
2、传引用
#include
using namespace std;
// 函数声明
void swap(int& x, int& y);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;
/* 调用函数来交换值 */
swap(a, b);
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
return 0;
}
// 函数定义
void swap(int& x, int& y)
{
int temp;
cout << "调用的函数中的交换:"<
cout << x <
cout << y <
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
cout << x <
cout << y <
return;
}
作为形参的引用会指向形参,类似于指针,调用函数后,实现了真正的交换:
100
200
200
100
交换后,a 的值:200
交换后,b 的值:100
3、传指针
#include
using namespace std;
// 函数声明
void swap(int *x, int *y);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int *c,*d;
c=&a;
d=&b;
cout << "交换前,a 的值:" << *c << endl;
cout << "交换前,b 的值:" << *d << endl;
/* 调用函数来交换值 */
swap(c, d);
//swap(&a,&b);
cout << "交换后,a 的值:" << *c << endl;
cout << "交换后,b 的值:" << *d << endl;
return 0;
}
// 函数定义
void swap(int *x, int *y)
{
int temp;
cout << "调用的函数中的交换:"<
cout << *x <
cout << *y <
temp = *x; /* 保存地址 x 的值 */
*x = *y; /* 把 y 赋值给 x */
*y = temp; /* 把 x 赋值给 y */
cout << *x <
cout << *y <
return;
}
传指针需要先将变量的地址赋值给声明的指针,增加了变量的个数,因此引用比指针要简洁一些。
交换前,a 的值:100
交换前,b 的值:200
调用的函数中的交换:
100
200
200
100
交换后,a 的值:200
交换后,b 的值:100
注意:
void swap(int *x, int *y)
{
int *temp;
cout << "调用的函数中的交换:"<
cout << *x <
cout << *y <
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
cout << *x <
cout << *y <
return;
}
这种交换指针指向的方式是不能达到实际的交换的,因为函数的结束、返回,这两个指针本身就消失了(它们的值并不会传回到 main() 函数中)所以,最后的结果没有交换。因此应该通过修改指针所指向的内容的值,从而达到交换,而不是通过采用交换指针的指向。
100
200
200
100
交换后,a 的值:100
交换后,b 的值:200
VALUE
VALUE
phj***89905610@163.com6个月前 (12-19)