参考:http://t.csdnimg.cn/TsXoF
1、C++ 引用调用
引用可以看成是一种特殊类型的变量可以被认为是另一个变量的别名,就好比人的绰号一样,虽然名字不同;
就好比诸葛亮与诸葛孔明是同一个人,改变诸葛亮的值就等同于改变诸葛孔明的值。
案例:
#include <iostream>
using namespace std;
// 函数声明
void swap(int &诸葛孔明);
int main ()
{
// 局部变量声明
int 诸葛亮 = 100;
cout << "交换前,诸葛亮的值:" << 诸葛亮 << endl;
/* 调用函数来交换值 */
swap(诸葛亮);
cout << "交换后,诸葛亮的值:" << 诸葛亮 << endl;
return 0;
}
// 函数定义
void swap(int &诸葛孔明)//意思是int &诸葛孔明 = 诸葛亮,建立一个int型的引用诸葛孔明,并将其初始化为变量诸葛亮的一个别名诸葛孔明
{
int temp = 200;
诸葛孔明 = temp; /* 把 temp的值赋值给诸葛孔明 */
/* 诸葛孔明是诸葛亮的引用,或者说是别名,所以改变诸葛孔明的值,就是改变诸葛亮的值 */
return;
}
输出:
交换前,诸葛亮 的值:100
交换后,诸葛亮 的值:200
2、C++ 指针调用
向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
int *x=&a //把a的地址传给x
案例:
#include <iostream>
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;
/* 调用函数来交换值
* &a 表示指向 a 的指针,即变量 a 的地址
* &b 表示指向 b 的指针,即变量 b 的地址
*/
swap(&a, &b);
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
return 0;
}
// 函数定义
void swap(int *x, int *y)
{
int temp;
temp = *x; /* 保存地址 x 的值 */
*x = *y; /* 把 y 赋值给 x */
*y = temp; /* 把 x 赋值给 y */
return;
}
输出:
交换前,a 的值: 100
交换前,b 的值: 200
交换后,a 的值: 200
交换后,b 的值: 100
3、C++ 传值调用
向函数传递参数的传值调用方法,把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
int x=a ; 函数里面x的值变了但是a并没有变
案例:
#include <iostream>
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;
temp = x; /* 保存 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
return;
}
输出:
交换前,a 的值: 100
交换前,b 的值: 200
交换后,a 的值: 100
交换后,b 的值: 200