《语法篇》按值传递和按地址传递

按值传递和按地址传递

参考链接:https://blog.csdn.net/scrence/article/details/79835572
参考链接:https://www.jb51.net/article/250343.htm
1、按值传递

#include<iostream>
using namespace std;
void changeNumber(int x);
int main(void)
{
	int a = 10;
	cout << "a = " << a << endl;
	changeNumber(a);
	cout << "Now a = " << a << endl;
	return 0;
}
void changeNumber(int x)
{
	x = x + 5;
}

其中a的值不变化,输出两次都为10。
原理是调用方法时,会重新找一块内存空间复制a,这个空间就是x,所以对x任何操作不会影响a。
2、按地址传递(指针参数)

#include<iostream>
using namespace std;
void changeNumber(int* x);
int main(void)
{
	int a = 10;
	cout << "a = " << a << endl;
	changeNumber(&a);
	cout << "Now a = " << a << endl;
	return 0;
}
void changeNumber(int* x)
{
	*x = *x + 5;
}

其中a的值变化,第一次为10,第二次为15
原理是changeNumber(int* x)声明中的int* 指参数地址,所以在调用时,使用&a取其地址,把地址传给方法中的x,这里x和a存的就是地址,并且地址相同,对x操作会影响到a。

3、按引用传递
什么是引用?引用就是给已有的变量取个别名。

// 引用必须在定义时就初始化,初始化后不能修改
int num=10;
int &a = num;// 其中a就是num的别名
// 下面这种就会报错
// int &b;
// b = num;
// 下面这种就会报错
// int count = 10;
// a = count;

按引用传递

void swap_int01(int a1, int b1)
{
	int tmp  = a1;
	a1 = b1;
	b1 = tmp;
}
void swap_int02(int *a1, int *b1)//a1=&a, b1=&b
{
	//*a1 == a, *b1 == b
	int tmp  = *a1;
	*a1 = *b1;
	*b1 = tmp;
}
void swap_int03(int &a1, int &b1)//int &a1 = a, int &b1=b
{
	//a1 == a, b1 == b
	int tmp  = a1;
	a1 = b1;
	b1 = tmp;
}
void test07()
{
	int a = 10;
	int b = 20;
	cout<<"a = "<<a<<", b = "<<b<<endl;
//    swap_int01(a, b);//交换 不成功
//    swap_int02(&a, &b);//交换 成功
	 swap_int03(a, b);//交换 成功
	cout<<"a = "<<a<<", b = "<<b<<endl;
}
int main(int argc, char *argv[])
{
	test07();
	return 0;
}

其中交换成功,是因为swap_int03(int &a1, int &b1)中int& 是声明引用,传入a后,a1就是a的别名,对a1操作会影响a。

posted @ 2024-01-16 10:31  Fusio  阅读(22)  评论(0编辑  收藏  举报