C++:传递

一、值传递

拿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;
}

两个值不会进行交换!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值