引用及其本质

#include <iostream>
//#include <cstring>
using namespace std;

//1.引用没有定义,是一种关系型声明,声明它和某一变量(实体)的关系,因此类型与原类型保持一致
//且不分配内存,与被引用的变量有相同地址
//2.声明的时候必须初始化,一旦声明,不可变更
//3.可对引用进行再次引用,多次引用的结果,是某一变量具有多个别名
//4. &符号前有数据类型时为引用关系,其他皆为取址操作
//5. 研究引用 可将其作为常指针 编程使用时 将其理解为变量的别名

struct ta{

	int *a;
};
struct tb{

	int &a;
};

void changev(int *p){

	*p=45;
}
void changev(int &p){ //将引用作为函数参数传递时,编译器将实参取地址给引用 &p = main::a
	p=666;  //赋值操作时,编译器隐藏了*取值 赋值操作 *p =666
}
int main(){
	int a = 10;
	int b = 50;
	int *p = &a;
	*p = 30;
	cout<<"a: "<<a<<endl;
	int &re = a;
	int &re6 = re;//引用一定要初始化 类似于常量
	re6 = 1000;
	re = b;//re=50;只是将b的值赋给了re
	cout<<"b: "<<&b<<endl;//b地址 00EFFDCC
	cout<<"re: "<<&re<<endl;//a地址 00EFFDD8
	cout<<"a: "<<a<<endl; //a:50
	cout<<"p: "<<p<<endl; //00EFFDD8
	cout<<"re: "<<&re<<endl;//00EFFDD8
	cout<<"re6: "<<&re6<<endl;//00EFFDD8
	cout << "--------------------" << endl;
	cout<<"src a: "<<a<<endl; //50
	changev(&a);
	cout<<"a: "<<a<<endl; //45
	changev(a);
	cout<<"a: "<<a<<endl; //666
	cout << "sizeof struct ta: " << sizeof(struct ta) << endl; //4
	cout << "sizeof struct tb: " << sizeof(struct tb) << endl; //4 引用所占用的大小与指针相同
	//引用必须初始化 引用可能是一个常指针
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值