C++引用部分注意事项

注意事项:

引用的本质:

常量引用:

1、引用做函数参数:

#include<iostream>
using namespace std;

//交换函数

//1、值传递
void test01(int a,int b)
{
	int temp=a;
	a = b;
	b = temp;
}

//2、地址传递
void test02(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

//3、引用传递
void test03(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}



int main()
{
	int a = 1;
	int b = 10;

	//test01(a,b);//值传递,形参不会修饰实参

	//test02(&a, &b);//地址传递,形参会修饰实参

	test03(a, b);//引用传递,形参会修饰实参

	cout << "a=  " << a << endl;
	cout << "b=  " << b << endl;




	system("pause");
	return 0;
}

2、引用做函数返回值:

#include<iostream>
using namespace std;


//引用做函数的返回值

int& FHZ()
{
	int a = 10;//创建局部变量——在栈区
	return a;

}

int& FHZ2()
{
	static int a = 20;//创建静态变量——在全局区
	return a;

}

void test01()
{
	int &ref = FHZ();
	cout << "ref=  "<<ref << endl;//第一次结果正确,因为编译器做了保留
	cout << "ref=  " << ref << endl;//第二次错误,因为a的内存已经释放
}

void test02()
{
	int& ref2 = FHZ2();
	cout << "ref2=  " << ref2 << endl;//结果正确
	cout << "ref2=  " << ref2 << endl;

	FHZ2() = 2000;//如果函数的返回值是引用,这个函数可以作为左值

	cout << "ref2=  " << ref2 << endl;
	cout << "ref2=  " << ref2 << endl;
}

int main()
{

//1、不要返回局部变量的引用
	//test01();


//2、函数的调用可以作为左值
	test02();


	system("pause");
	return 0;
}

3、常量引用:

#include<iostream>
using namespace std;


//常量引用
//使用场景:用来修饰形参,防止误操作

//打印数据的函数
void showValue1(int &Val)
{
	Val = 1000;//重新定义引用,变量会发生改变
	cout << "Val=  " << Val << endl;
}

void showValue2(const int& Val)
{
	//Val = 1000;//报错,显示不可修改
	cout << "Val=  " << Val << endl;
}


int main()
{
	//int a = 10;

	//加上const之后,编译器将代码修改  int temp=a;  const int &ret=temp;
	//const int& ret = 10;//引用必须引一块合法的内存空间
	//ref=20;加入const之后变为只读,不可以修改

	int a = 100;

	showValue1(a);
	cout << "a=  " << a << endl;

	showValue2(a);

	cout << "a=  " << a << endl;

	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值