网站首页 > 技术教程 正文
1 指针常量的一个实例
#include <iostream> using namespace std; void main() { int j=3; int var=4; int* p = &var; int* const pf = &var; *pf=8; int i = 5; cout<<&j<<endl; cout<<&var<<endl; cout<<&p<<endl; cout<<&pf<<endl; cout<<&i<<endl; system("pause"); } /*输出: 0012FF44 0012FF40 0012FF3C 0012FF38 0012FF34 */
2 上述指针常量写成引用的形式
#include <iostream> using namespace std; void main() { int j=3; int var=4; int* p = &var; int& f = var; f=8; int i = 5; cout<<&j<<endl; cout<<&var<<endl; cout<<&p<<endl; cout<<&f<<endl; cout<<&i<<endl; system("pause"); } /*输出 0012FF44 0012FF40 0012FF3C 0012FF40 0012FF34 */
3 引用的本质是一个指针常量
从以上两个实例可以看出,引用是占用一个指针的内存空间的,但其引用本身的地址被编译器隐藏了,& f是其指向的变量的地址,而f由编译器实现的自动解引用,f自动解引用为其指向的变量的数据值。所以, 引用的本质是一个指针常量,一个由编译器实现了自动解引用的指针常量。
查看上面两个实例对应的汇编代码,发现其完全一致:
凡是使用了引用变量的代码,都可以转换成使用指针常量对应形式的代码,只不过书写形式上要烦琐一些。反过来,由于对引用变量使用方式上的限制,所以使用指针常量实现的功能不一定能够用引用来实现。
函数返回一个引用可以用作左值:
#include <iostream> using namespace std; int& g2(void) { static int a = 10; a++; printf("a:%d \n", a); return a; } int main(void) { g2() = 100; //函数返回值是一个引用,当左值。 g2(); system("pause"); return 0; } /* a:11 a:101 */
也可以写成返回指针的形式,只是写起来繁琐一些:
#include <iostream> using namespace std; int* const g2(void) { static int a = 10; a++; printf("a:%d \n", a); int* const p = &a; return p; } int main(void) { *(g2()) = 100; //函数返回值是一个引用,当左值。 g2(); system("pause"); return 0; } /* a:11 a:101 */
4 引用语法引入的理由或合理性
4.1 常量要求初始化,增强了其安全性;
4.2 实现了自动解引用,使用上更简洁;
-End-
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)