C语言------------c++中的引用(引用和多级指针的对比)

本文介绍了C++中的引用特性,强调其与C语言的区别,指出引用不是变量而是对象的别名。引用在声明时必须初始化,并且一旦绑定就不可改变,类似于常量。文章探讨了引用在函数传参中的高效性,以及不能定义指向引用的引用或指针。同时,解释了引用与指针的相似与不同,包括如何使用引用操作指针变量。
摘要由CSDN通过智能技术生成

说明:C语言中是没有引用的,c++中才有引用,本人的C语言的代码的文件后缀名是  .cpp。原因是c++语言的编译器兼容C语言

如果后缀名写成.c那么会有好多不便,尤其是老版本的c语言的编译器更是用起来气人。

引用

 

        定义:为对象起了另外一个名字,引用类型去引用另一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的引用类型的变量名&d:表示引用变量中存储的内容(即引用所指向的变量的地址);d:表示以引用变量中存储的内容为地址的变量中的值。引用变量和指针变量一样都是存的所指向变量的地址,不同点指针自身变量自身有地址,而引用变量没有地址(系统为引用变量自身分配了地址,只不过引用变量自身的地址我们连读的权限都没有,所以我们默认引用自身没有地址,即引用类似常量),所不能声明引用的引用,也不能声明指向引用的指针,但是可以声明指向指针的指针,也可以声明指向指针的引用

引用的实质:从汇编的角度来看,当使用到一个变量的引用时,编译器就把变量的地址(即引用)直接压入堆栈,函数从堆栈中取出这个地址就可以操作这个变量了。所以说引用不是变量是对的,这只是内存空间的一个地址。引用的作用机理

但是计算机真的就没有给引用用变量分配内存空间吗?其实引用变量系统是分配了内存空间的:当引用变量有所指向的时候,他就相当于一个操作受限的指针,引用的底层使用指针常量实现了让我们访问不到引用变量本身的地址,&r:表示引用变量中存储的内容(即引用所指向的变量的地址或者说被引用的目标变量的变量地址),r表示被引用目标变量的值。

&:什么时候当做引用标识符,什么时候当做取地址符

&出现在声明中时&当做是引用声明符,其他情况当做取地址符例如 i = 10;  int &r = i;此时&是一个引用声明符

 

 

                            分析两端段代码:

                              int i= 10;

                              int j = 20;

                              int &r = i;

                               r = j;//引用变量的r实际是以引用变量r中存的内容为地址的变量中的值,实质r就是i

                               代码二

                                int a = 10;

                                int *p = &a;

                                *P =5;//*运算是以指针变量p中存的内容为地址的变量中的值

引用系统为其分配内存空间,引用变量和指针变量一样都是存址(引用变量中存储的是他所指向的变量的地址)

#include<stdio.h>
int main()
{
	char k = 'a';
	int i = 10;
	double j = 20.0;


	
    char &r = k;
	char* p = &k;

	int &r1 = i;//引用
	int *p1 = &i;

	double &r2 = j;
	double *p2 = &j;


	
	printf("======存地址的变量系统会分配4个字节===\n");
	printf("char类型的引用变量分配了%d个字节\nchar*类型的指针变量分配了%d个字节\n",sizeof(&r),sizeof(p));
	printf("int
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值