一、值传递
拿int类型来举例!
#include <iostream>
using namespace std;
void modify(int pa); //值传递
int main(){
int sum=2;
modify(sum);
cout << sum << endl;
return 0;
}
void modify(int pa) {
pa = 5;
}
输出 2
结果sum仍旧等于2,后来我又将sum定义为全局变量,结果其值仍不改变
#include <iostream>
using namespace std;
int ArSize = 4; //全局变量
void modify(void);
int main() {
modify();
cout << ArSize << endl;
return 0;
}
void modify(void) {
ArSize = 7;
}
当是非值传递时,ArSize由4改变为7。
总结:对于值传递过程,被调用函数的形参作为被调用函数的局部变量处理,即开辟内存空间来存放实参的值,从而成为了实参的一个副本。因此不会影响主调函数的实参变量的值。
二、地址传递
拿int类型数组来举例!
#include <iostream>
const int ArSize = 8;
using namespace std;
void modify(int *pa); //地址传递、指针传递
int main(){
int sum[ArSize] = { 1,2,4,8,16,24,48,32 };
modify(sum); // #1
for (int i = 0; i < ArSize; i++)
cout << sum[i] << endl;
return 0;
}
void modify(int *pa) {
for (int i = 0; i < ArSize; i++)
*(pa + i) = i; // #2
//或者pa[i] = i;
}
注意点①: 在写上述程序最开始时,由于习惯使用const,即子函数modify定义成 void modify(const int *pa) ,导致出错,因为我需要修改数组的元素,故不能使用const;
注意点②: 在#1处,按正常都应该写成 modify(&sum); 但由于数组名就代表地址(特殊情况),若是一个int类型或其他类型的数,则地址传递时需要写成modify(&sum);
注意点③: 在#2处,由于是数组,修改值的话有两种写法。
三、引用传递
拿int类型来举例!
#include <iostream>
using namespace std;
void modify(int &pa); //引用传递
int main() {
int sum = 2;
modify(sum); // #1
cout << sum << endl;
return 0;
}
void modify(int &pa) // #2
pa++;
输出:3
注意点①: 与地址传递不同的是,定义改为 void modify(int &pa) ,并且实参也不是地址,可看#1与#2处;
注意点②: 对于数组就不需要使用引用传递,地址传递(指针传递)就能实现;
四、综合运用
#include "pch.h"
#include <iostream>
using namespace std;
void swapp(int* a,int* b); //指针point传递
void swapr(int& a,int& b); //引用reference传递
int main() {
int data1 = 300;
int data2 = 400;
cout << "data1:" << data1 << "data2:" << data2 << endl;
swapp(&data1, &data2);
cout << "data1:" << data1 << "data2:" << data2 << endl;
swapr(data1, data2);
cout << "data1:" << data1 << "data2:" << data2 << endl;
return 0;
}
void swapp(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void swapr(int& a, int& b) {
int temp;
temp = a;
a = b;
b = temp;
}
注意点①: 在写指针传递时,发现子函数若写成下面:
void swapp(int* a, int* b) {
int *temp;
temp = a;
a = b;
b = temp;
}
两个值不会进行交换!