一、传值
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
//传值方式(形参为普通变量类型)
void exchange(int a, int b)
{
int z;
z = a;
a = b;
b = z;
cout << "a的值为:" << a << " b的值为:" << b << endl;
}
int main()
{
int a = 5;
int b = 8;
//调用exchange函数前a与b的值
cout << "a的值为:" << a << " b的值为:" << b << endl; //a为5,b为8
exchange(a, b); //a为8,b为5
//调用exchange函数后a与b的值
cout << "a的值为:" << a << " b的值为:" << b << endl; //a为5,b为8
return 0;
}
输出结果:
二、传引用
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
//传引用方式(函数形参为引用类型)
void exchange(int &e, int &f)
{
int z;
z = e;
e = f;
f = z;
cout << "a的值为:" << e << " b的值为:" << f << endl;
}
int main()
{
int a = 5;
int b = 8;
//调用exchange函数前a与b的值
cout << "a的值为:" << a << " b的值为:" << b << endl; //a为5,b为8
exchange(a, b); //a为8,b为5
//调用exchange函数后a与b的值
cout << "a的值为:" << a << " b的值为:" << b << endl; //a为5,b为8
return 0;
}
输出结果:
三、传地址
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
//传地址方式(函数形参是指针)
void exchange(int* c, int* d)
{
int z;
z = *c;
*c = *d;
*d = z;
cout << "a的值为:" << c << " b的值为:" << d << endl;
//输出a, 所指向的地址
cout << c << " " << d << endl;
}
int main()
{
int a = 5;
int b = 8;
//调用exchange函数前a与b的值
cout << "a的值为:" << a << " b的值为:" << b << endl; //a为5,b为8
exchange(&a, &b); //a为8,b为5
//调用exchange函数后a与b的值
cout << "a的值为:" << a << " b的值为:" << b << endl; //a为5,b为8
return 0;
}
输出结果:
总结
传值:参数的原始值不会在变量被使用的过程中改变。
传引用:参数的原始值在被调用的过程中会覆盖,参数值变成了最后被赋值的结果。
传地址:参数的原始地址指向被改变后,参数地址为最后一次指向的地址,与传引用类似,原始参数地址会被覆盖。
传引用和传地址比较类似,都是原始参数值会被覆盖。只不过引用涉及到的是值,传地址涉及到的是地址。