网站首页 > 技术教程 正文
C和C ++支持与大多数其他编程语言不同的指针。其他语言包括C ++,Java,Python,Ruby,Perl和PHP。
从表面上看,引用和指针非常相似,都用于使一个变量提供对另一变量的访问。两者都提供了许多相同的功能,因此通常不清楚这些不同机制之间的区别。在本文中,我将尝试说明指针和引用之间的区别。
指针:指针是一个变量,用于保存另一个变量的内存地址。需要使用*运算符将指针取消引用,以访问其指向的内存位置。
引用:引用变量是别名,即已经存在的变量的另一个名称。引用(如指针)也通过存储对象的地址来实现。
可以将引用视为具有自动间接指向的常量指针(不要与指向常量值的指针混淆!),即编译器将应用*运算符。
差异:
1.初始化:
指针可以通过以下方式初始化:
int a = 10;int * p =&a;
或者int * p;p =&a;我们可以在同一步骤或多行中声明和初始化指针。
在引用中, int a = 10;int&p = a; //它是正确的 但int&p; p = a; //这是不正确的,因为我们应该一步一步声明和初始化引用。
注意:编译器之间的差异可能有所不同。以上差异是针对Turbo IDE的。
2.重新分配:可以重新分配指针。此属性对于实现数据结构(例如链表,树等)很有用。
请参见以下示例:
int a = 5;int b = 6;int * p;p =&a;p =&b;
另一方面,引用不能重新分配,必须在初始化时分配。
整数a = 5;int b = 6;int&p = a;int&p = b; //在这一行它将显示错误,因为“不允许多个声明”。但是,这是有效的声明,int&q = p;
3.内存地址:指针在堆栈上有其自己的内存地址和大小,而引用共享相同的内存地址(与原始变量),但也占用了堆栈上的一些空间。
int&p = a; cout <<&p << endl <<&a;
4.NULL值:指针可以直接分配为NULL,而引用则不能。与引用关联的约束(无NULL,无重新分配)确保基础操作不会遇到异常情况。
5.间接:您可以使用指向提供额外级别间接的指针。而引用仅提供一种间接级别。即,
在指针中整数a = 10;int * p;int ** q; //它是有效的。p =&a;q =&p;而在参考文献中,int&p = a;整数&& q = p; //它是对引用的引用,因此是错误。
6.算术运算:可以对指针执行各种算术运算,而没有所谓的引用算术。(但是您可以像引用&obj + 5那样获取引用指向的对象的地址并对其进行指针算术)。 )
何时使用什么
性能完全相同,因为引用在内部作为指针实现。但是,您仍然可以记住一些要点,以决定何时使用什么:
使用引用 :在函数参数和返回类型中。
使用指针: 如果需要使用指针算术或传递NULL指针,请使用指针。例如对于数组(请注意,数组访问是使用指针算术实现的)。
由于要指向不同的单元格,因此要实现诸如链表,树等的数据结构及其算法,我们必须使用指针的概念。
C ++ FAQ Lite中引用:可以使用引用,而必须使用指针。每当您不需要“重新放置”时,通常首选使用引用而不是使用指针。这通常意味着引用在类的公共接口中最有用。引用通常显示在对象的外观上,而指针则显示在对象的外观上。
上面的例外是函数的参数或返回值需要“reseating”引用,即不引用对象的引用。通常最好通过返回/获取一个指针,并赋予NULL指针特殊的意义来完成此操作(引用必须始终是别名对象,而不是取消引用的空指针)。
每天学点小知识,希望对你有帮助~
另外如果你想更好地提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
编程学习书籍分享:
编程学习视频分享:
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
点击下方【了解更多】获取更多学习资料帮助你学习成长哦~
猜你喜欢
- 2024-10-04 C++核心准则编译边学-F.43 永远不要返回局部对象的指针或引用
- 2024-10-04 C++|虚函数多态机制的虚函数表及其指针的内存布局及手动引用
- 2024-10-04 C|指针分类与void指针的赋值、解引用与算术运算
- 2024-10-04 第5课,引用方式(锁定) 锁定引用值
- 2024-10-04 C++函数参数采用变量、引用和指针的区别
- 2024-10-04 Java String 手工引用指针 java中指针和引用
- 2024-10-04 C++核心准则C.145:通过指针或引用访问多态对象
- 2024-10-04 C\C++语言11|引用做为函数参数与返回值及与指针的区别
- 2024-10-04 Excel中的引用方式,看过之后你就懂
- 2024-10-04 C++,常量及sizeof函数,传值调用、指针调用和引用调用的区别
你 发表评论:
欢迎- 05-05从virsh当中学习QEMU/KVM启动命令
- 05-05Win10 BCD文件损坏怎么修复?(bcd文件损坏win7)
- 05-05亚马逊春节假期期间的店铺管理设置
- 05-051分钟总结常用k8s常用诊断教程(k8s常见故障)
- 05-05VisiPics重复图片查找软件中文汉化教程
- 05-05微服务的发布实现方式1灰度实现(微服务实现原理)
- 05-05轻松掌握Java多线程 - 第二章:线程的生命周期
- 05-05德拉诺之王邪DK报告:PVE向小测试及分析
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)