指针的进化----引用

指针是比较难理解的,所以就想出一个新的来代替指针,so,引用就诞生了。

一、引用

引用的定义:数据类型& 变量名;

注意:引用在定义时必须初始化,引用初始化之后不能改变其所指向的地址,但是可以改变指向地址的值。这个就和指针中的指针常量相似。

int a=9;
int& b=a;
int c=6;
b=c;//只是将c赋值给b

其实,引用就是指针常量

    //引用的特性     引用其实就是指针常量
	int& b = a;     // 0020191D  lea         eax,[a]  
	                // 00201920  mov         dword ptr[b], eax
	b = c;          // 00201923  mov         eax,dword ptr [b]  
	                // 00201926  mov         ecx, dword ptr[c]
		            // 00201929  mov         dword ptr[eax], ecx
	//指针常量
	int* const d = &a; // 008F192B  lea         eax,[a]  
                       // 008F192E  mov         dword ptr[d], eax
    *d = c;            // 008F1931  mov         eax,dword ptr [d]  
	                   // 008F1934  mov         ecx, dword ptr[c]
		               // 008F1937  mov         dword ptr[eax], ecx
	//可以看到引用和指针常量的反汇编码相同,所以引用就是指针常量

引用作为函数的参数,与指针的作用差不多

struct S {
	int q, w, e, r, t, y, u, i, o, p;
};
void printS(S& s) {    //引用作为函数参数时,和指针的作用差不多
	cout << s.q << s.w << s.e << endl;
}
int main() {
	S s = { 1,2,3,4,5,6,7,8,9,0 };
	printS(s);
	return 0;
}

引用作为函数的返回值,返回的是该值的地址,所以可以作为可修改的左值

int& getvalue(int arr[], int index) {
	return arr[index];
}
int main() {
	int arr[3] = { 1,2,3 };
	getvalue(arr, 1) = 99;  //当引用作为返回值时,返回的值为该值的地址,所以可以作为可修改的左值
	cout << arr[1] << endl;
	return 0;
}

指针引用

int main() {
	int a = 9;
	const int& b = a;     //不可以修改
	//引用=指针常量
	//常量引用=常量指针常量

	//指针引用
	//还是一个引用,只是它指向的是一个指针
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值