C++引用(1)

1. 引用的基本语法:数据类型 &新变量名=原变量名。通过新变量名可以对原始值进行修改,因为两个名称指向的地址都相同。

 2. 引用的注意事项:(1)引用必须初始化。(2)引用初始化之后,不可以再改变。(一旦被确定,不可以再修改)

 

 

 3. 引用做函数参数:简化指针,用引用可以实现形参修饰实参。

//主函数中函数的调用,传参直接就是原始参数的名称
swap(a, b);
//交换函数
void swap(int& a, int& b){}
//注意这里的形参列表应该用引用的形式进行接收!!!

 

 

#include<iostream>
using namespace std;

//值传递
void swap1(int a, int b) {
	int temp = b;
	b = a;
	a = temp;
	cout << "值传递内部:\t" << a << " " << b << endl;
}
//地址传递
void swap2(int* a, int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << "地址传递内部:\t" << *a << " " << *b << endl;
}
//引用传递
//将原名赋值给引用,通过引用的修改,可以修改原值
void swap3(int& a, int& b) {
	int temp = b;
	b = a;
	a = temp;
	cout << "引用传递内部:\t" << a << " " << b << endl;

}

int main() {

	int a = 3;
	int b = 4;
	cout << "原始数据:\t" << a << " " << b << endl;
	swap1(a, b);
	cout << "值传递外部:\t" << a << " " << b << endl;
	swap2(&a, &b);
	cout << "地址传递外部:\t" << a << " " << b << endl;

	//重新赋值
	a = 3;
	b = 4;
	cout << "赋值后的数据:\t" << a << " " << b << endl;

	swap3(a, b);
	cout << "引用传递外部:\t" << a << " " << b << endl;


	system("pause");
	return 0;
}

 最后发现,用引用作为函数的形参列表,即使是值传递形式,也可以修改原值。

4. 引用做函数的返回值:(1)局部变量的引用不能作为函数返回值,原因与局部变量不能作为函数返回值一样,因为引用和本体是等效的,局部变量存放在栈区,函数执行完毕就会被销毁,因此不可以做为返回。(2)函数同样可以作为被赋值的左值,其中返回值是引用的函数就可以,相当于是将一个数赋值给了一个引用(同时赋值给了引用的本体)

#include<iostream>
using namespace std;
//1. 不可以返回局部变量(在函数内部生命的变量)的引用
//2. 函数的带哦用可以作为左值被赋值

int& test1() {
	int a = 10;
	//返回a没有意义,因为a的内容已经释放。和返回局部变量的原因一样,不可以返回局部变量。
	return a;
}
int& test2() {
	//静态变量全局区,在程序结束后才释放
	static int a = 10;
	//返回a没有意义,因为a的内容已经释放。和返回局部变量的原因一样,不可以返回局部变量。
	return a;
}
int main() {
	
	//倘若成立,此举等于int& ref = a;
	int& ref = test1();
	cout << ref << endl;
	//再次运行就是乱码,因为编译器在第一次时做了保留。
	cout << ref << endl;

	int& ref2 = test2();
	//不会出现问题
	cout << ref2 << endl;
	cout << ref2 << endl;

	//作为函数左值
	test2() = 100;
	cout << ref2 << endl;
	cout << ref2 << endl;


	system("pause");
	return 0;
}

第一次打印输出:

 

原因:

 第二次输出:

原因:静态变量,即使函数执行完毕,也不会销毁。a一直等于10.

第三次输出:

 原因:

简而言之,引用作为函数的参数还是比较方便,但是我依然喜欢用传地址指针接收的形式进行书写

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值