C++基础(05)——引用

1、引用就是给变量起一个别名。其本质就是一个指针常量(指针指向的地址不可以修改)

int a = 10;
// b 是a的别名。b和a所访问的内存是相同的
int &b = a;

2、注意事项:

  • 引用在创建的时候必须要初始化。
  • 引用一旦初始化就不可以再更改了。

3、引用作为函数的参数:

(1)、函数的参数传递可以为:值传递地址传递引用传递。 其中值传递不会改变原来的变量内容,其相当于将原来的变量进行复制;后两种传递方式都会改变原来变量中的内容,相当于直接操作原来变量中的内容。

#include<iostream>
using namespace std;

// 值传递
void swap01(int x,int y) {
	int temp = x;
	x = y;
	y = temp;
}

// 地址传递
void swap02(int *p1, int *p2) {
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

// 引用传递
void swap03(int &x,int &y) {
	int temp = x;
	x = y;
	y = temp;
}

int main() {
	int a = 10, b = 20;
    
	//swap01(a, b);
	swap02(&a, &b);
	//swap03(a, b);
	cout << "a= " << a << "\n" << "b= " << b << endl;

	cin.get();

}

4、引用作为函数的返回值:

(1)、引用是可以作为函数的返回值

(2)、不要返回局部变量的引用

#include<iostream>
using namespace std;

int& func1() {
	int a = 10; //a 为局部变量,存放在栈区中。
	return a; // 返回a的引用
}

int main() {

	int &ref = func1(); //当该函数调用完毕后,栈区中的局部变量就会被释放
	cout << "ref = " << ref << endl; //第一次返回正确,因为编译器做了保留
	cout << "ref = " << ref << endl; //第二次结果错误,因为a的内存已经释放了
	cin.get();

}

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

#include<iostream>
using namespace std;

int& func1() {
	static int a = 10; //静态变量存放在全局区,在程序运行结束之后才会释放
	return a; // 返回a的引用
}

int main() {

	int &ref = func1(); //此时ref相当于静态变量a的别名
	cout << "ref = " << ref << endl; 
	cout << "ref = " << ref << endl; 
	func1() = 1000;// 此时函数的调用作为左值,
	cout << "ref = " << ref << endl; 
	cout << "ref = " << ref << endl;
	cin.get();

}

  

5、常量引用

(1)、常量引用主要用来修饰形参,防止误操作。

#include<iostream>
using namespace std;

// 保证传入的参数不被意外修改
void PrintValue(const int &a) 
{
	cout << a << endl;
}

int main() 
{
	int s = 10;
	PrintValue(s);

	cin.get();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值