C++学习引用

引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
一个引用占一个指针的大小
#include<iostream>
using namespace std;

/*
在C语言中,使用指针可以间接获取、修改某个变量的值
在C++中,使用引用可以起到跟指针类似的功能
*/

int main() {

	int age = 10;
	int height = 20;

	//指针方式
	//int *p = &age;
	//*p = 20;
	//cout << age << endl;//20

	//引用方式
	//引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
	int &ref = age;//定义了一个age的引用,refAge相当于是age的别名
	ref = 20;
	cout << age << endl;//20
	//对引用做计算,就是对引用所指向的变量作计算
	ref += 30;
	cout << age << endl;//50
	//在定义的时候就必须初始化,一旦指向了某个变量,就不可以在改变,“从一而终”
	ref = height;//赋值,没有改变ref=age(相当于把20赋值给age)
	ref = 11;//11赋值给age,而不是height
	cout << height << endl;//20,
	//可以利用引用初始化另一个引用,相当于某个变量的多个别名
	int &ref = age;
	int &ref1 = ref;
	int &ref2 = ref1;//ref、ref1、ref2都是age的别名
	//不存在【引用的引用、指向引用的指针、引用数组】
	//引用比指针更安全,函数返回值可以被赋值
	getchar();
	return 0;
}
  • 用指针和引用实现数值交换
 #include<iostream>
using namespace std;

void test() {
	int age = 10;
	int height = 20;

	int &ref = age;
	int &ref1 = ref;
	int &ref2 = ref1;

	ref += 10;
	ref1 += 10;
	ref2 += 10;

	cout << age << endl;

}
//指针方式实现数值交换
//void swap(int *v1, int *v2) {
//	int tmp = *v1;
//	*v1 = *v2;
//	*v2 = tmp;
//
//}

//引用方式
void swap(int &v1, int &v2) {
	int tmp = v1;
	v1 = v2;
	v2 = tmp;

}

int main(){

	int a = 10;
	int b = 20;
	//swap(&a, &b);
	swap(a, b);
	cout << "a=" << a << ",b=" << b << endl;//a=20,b=10

	getchar();
	return 0;
}
#include<iostream>
using namespace std;

struct Date{
	int year;
	int month;
	int day;
};

int main(){
	//1.结构体
	Date d = { 2021, 9, 17 };
	Date &ref1 = d;//结构体的引用
	ref1.year = 2022;

	//2.指针
	int age = 10;
	int *p = &age;
	int *&ref2 = p;//指针的引用,ref是p的别名
	*ref2 = 30;//相当于*p = 30,即age为30

	int height = 30;
	ref2 = &height;//修改指针的指向

	//3.数组
	int array[] = { 1, 2, 3 };
	int(&ref3)[3] = array;//对数组的引用
	int * const &ref3 = array;//同上。原因:数组名可以看作是指向数首元素的指针(此处为int *型,常量),常引用才能引用常量

	//指针数组,数组里面可以存放3个int *指针
	int *arr1[3];
	//用于指向数组的指针
	int(*arr2)[3];//arr2是指针

	//【不存在】
	//1.引用的引用
	int age = 10;
	int &ref = age;
	//int &&ref2 = ref;//不存在

	//2.指向引用的指针
	//int &*ref2 = &ref;//不存在

	//3.引用数组
	//int &arr[4]//不存在

	getchar();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值