【C++】引用符&

1、注意:

(1)引用必须初始化
(2)引用在初始化后,不可以改变

	int a = 10;		
	int &b = a;        //int &b;为错误,必须初始化
	int c = 20;
	b = c;			//赋值操作,而非更改引用

2、引用做函数参数

void swap(int &a,int &b)
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 10;
	int b = 20;
	swap(a,b);            //注意这里不用写引用符号了
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	return 0;
 }

3、引用做函数返回值

注意:a不要返回局部变量的引用   b函数的调用可以作为左值

int& test1()
{
	//引用做函数的返回值
	//不要返回局部变量的引用
	int a = 10;			//局部变量存放在栈区
	return a;
}

int& test2()
{
    //可以返回静态变量的引用
	static int b = 20;    //静态变量存放在全局区
	return b;
}
int main()
{
	int &ref1 = test1();
	cout << "ref1=" << ref1 << endl;		//输出结果为ref1=10
	cout << "ref1=" << ref1 << endl;		//输出结果为ref1=1378401248
											//因为第二次的内存已经释放
	
	int &ref2 = test2();
	cout << "ref2=" << ref2 << endl;		//输出结果为ref2=20
	cout << "ref2=" << ref2 << endl;		//输出结果为ref2=20
	test2() = 30;
	cout << "ref2=" << ref2 << endl;		//输出结果为ref2=30
	cout << "ref2=" << ref2 << endl;		//输出结果为ref2=30
	return 0;
 }

4、引用的本质:

(1)int &b = a; 类似于 int * const b = &a;
(2)C++标准并没有规定引用是否占用内存空间,但是大多数编译器都把引用实现为const指针,所以大部分编译器中引用也是要占内存空间的;
(3)引用是天然const的,所以定义时必须初始化指向变量,否则就没意义了;
(4)引用本质是指针,是地址,所以才能实现传址调用的效果;
总结:功能上来说,引用是受限制的指针,相当于用const修饰的指针变量类型;

5、常量引用

int& a=10;//错误,引用本身需要合法的内存空间,因此直接赋值是非法操作

const int& a=10;//正确,加入const后,编译器优化为int temp =10;const int& a = temp;

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

void Print(const int& a)
{
    //a = 20;为错误
    cout << a << endl;
}
int main()
{
    int a = 10;
    Print(a);
    return 0;
 }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值