c++引用基础

本文介绍了C++中的引用概念,包括基础语法(指针别名与内存共享),引用作为函数参数和返回值的使用,以及注意事项,如引用必须初始化且不可更改,以及常量引用防止误操作。
摘要由CSDN通过智能技术生成

一、基础语法

引用,简单来说就是起个别名,通过不同的变量名指向同一个内存,读取同一个数据。本质上来说,是个指针常量(类似int* const b = &a)。基础语法如下:

int a = 10;
int& b = a;

与int c = a不同的是,这个方法会单独开辟一个新的内存空间,用于存储c的数据,但是引用方法不会。因此,对引用方法创建的新变量名b进行修改数据(类似 *b  = 20),会使得a 的数据也进行更改。但是对c进行修改数据,对a没有影响。

	int a = 10;
	int& b = a;
	int c = a;
	b = 20;
	c = 30;
	cout << a;		//输出结果a = 20

或者更直观的感受,直接输出&a,&b,会发现两者的地址完全一样。

注意事项:

  • 创建引用的时候必须初始化        即,写成int &b;是错误的。
  • 引用初始化后不可以在更改        即,写成int &b = a; &b = c;是错误的。
  • 初始化不能直接赋值,必须是指向内存空间        即,写成int &b = 10;是错误的
  • 加上常量后可以初始化赋值        即,写成const int &b = 10;是正确的。(编译器中自动转换成int temp =  10;   const int &b = temp;)

二、引用做函数参数

以指针(地址)为形参传递时,可以对实参进行修改,因此下述代码可以将a和b的值进行交换。

#include<bits/stdc++.h>
using namespace std;

void swap_p(int* p1, int* p2) {
	int temp = *p2;
	*p2 = *p1;
	*p1 = temp;
}

int main() {
	int a = 10, b = 20;
	swap_p(&a, &b);
	cout << a << " " << b << endl;
	return 0;
}

以引用为形参传递时,效果和地址传递几乎一样。

#include<bits/stdc++.h>
using namespace std;

void swap_y(int& y1, int& y2) {
	int temp = y2;
	y2 = y1;
	y1 = temp;
}

int main() {
	int a = 10, b = 20;
	swap_y(a, b);
	cout << a << " " << b << endl;

	return 0;
}

可以用常量const 修饰,防止误操作。

const int &r = 10;

void func(const int& r) {
    //防止出现 r = 20; 等语句使得a被更改
	cout<<r<<endl;
}


int main(){
    int a = 10;
    func(a)
}

三、引用做函数返回值

注意事项:

  • 不能返回局部变量的引用        类似返回栈区数据的地址,函数调用结束后内存释放导致错误
  • 函数调用可以作为左值
#include<bits/stdc++.h>
using namespace std;

int& test() {
	static int a = 10;	//静态变量存放在全局区
	return a;
}


int main() {
	int& r = test();	//test()是a的别名,r是test()的别名,所以r也指向了a
	cout << r << endl;
	test() = 1000;	//相当于 a = 1000
	cout << r << endl;
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值