//以下三个函数都是实现将变量 i 和 j 的值交换
/*=========================方式一=====================================*/
/****************下面的函数无法实现此功能********************************/
/*==================================================================*/
#include <iostream>
using namespace std;
int main()
{
void swap(int, int); //函数声明
int i=3;
int j=5;
swap(i,j);
cout << i << " "<<j <<endl;
return 0;
}
void swap(int a,int b)
{
int temp;
temp=a;
a = b;
a=temp;
}
/*=========================方式二====================================*/
/********************使用指针变量作形参,实现两个变量的值的交换********/
/*==================================================================*/
#include <iostream>
using namespace std;
int main()
{
void swap(int *, int *);
int i=3;
int j=5;
swap(&i, &j);
cout << i << " "<< j <<endl;
return 0;
}
void swap(int *p1,int *p2)
{
int temp=0;
temp=*p1;
*p1=*p2;
*p2=temp;
}
/*==========================方式三==================================*/
/**********************实现两个变量的值的交换,用“引用”作形参**************/
/*==================================================================*/
#include <iostream>
using namespace std;
int main()
{
void swap(int &, int &);
int i=3;
int j=5;
swap(i, j);
cout << i << " "<< j <<endl;
return 0;
}
void swap(int &a, int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
总结:
1、方式一未能实现两个参数的交换。
2、前两种方式传递的是实参的值。即是传值方式
3、前两种方式在调用swap函数时,对形参要分配存储单元,方式三对引用型形参a和b不分配存储单元,它们分别与实参i和j共享同一存储单元。而方式三swap函数传递的是实参变量的地址而不是实参变量的值。即传址方式。
4、在方式三中,&a不是"a的地址",而是指“a是一个整形变量的(引用)别名”,&是引用声明符。由于是形参,不必对其初始化,即未指定它们是哪个变量的别名。当main函数调用swap函数时,进行虚实结合,把实参变量i和j的地址传给形参a和b.这样i和j的地址传给a and b.这样i和a的地址相同,二者是同一变量,即a成为i别名。同理,b成为j的别名。在swap函数中,a和b的值交换,那么i和j的值也交换了。
原文链接: https://www.cnblogs.com/zxwAAA/archive/2013/04/02/2996207.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/82995
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!