int& a = b 的思考

本文解析了C++中引用(int &a = b)的概念及其与指针的区别,通过实例说明引用如何实现变量间的值同步更新。进一步探讨了在PCL(Point Cloud Library)中引用用于操作点云数据的具体应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在PCL显示点云部分程序中,涉及到了如下程序

1 // 定义相关变量
2 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);
3 pcl::PointCloud<pcl::PointXYZ>& cloud = *cloud_ptr;    //点云

出现了<Type> & a = *b; 的表达式,笔者很少见到过这样的表达式,经常见到<Type> * a = b;类型,即定义了一个指向b的指针,a 的值(value)为b的地址。通过谷歌搜索,得到以下结果:

以上结果原网页链接:http://www.cplusplus.com/forum/windows/17153/
得知:int& a = b; 就是把b的地址赋给a的地址,即a,b变量拥有同一地址,他们的值必定相等,并且改变a的大小,也同时在改变b的大小。

笔者做了简单的测试。如图:

得到程序的运行结果如右侧。

这和定义int b = a 是不一样的。

再分析在PCL中遇到的这段程序:

    // 定义相关变量
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>& cloud = *cloud_ptr;    //点云

cloud_ptr 代表指向点云的指针(不代表其指向了点云数据块,其实应该是指向了“指向点云数据块的指针变量(点云数据名变量)”的指针),那么*cloud_ptr相当于点云数据类型变量,那么<Type>& cloud = *cloud_ptr 就相当于把点云变量的地址赋给了cloud的地址,那么cloud其实就是一个点云变量。

-----------------------------------2014-09-17 补充编辑------------------------------------------------

在定义函数时,如果在函数中改变形参的值,并且在实参中体现,也用到了同样的表达。如:void fun(ina a, int &b) {...},在调用函数时,只需要将int类型的实参传给b,这样在函数中对b的改变,同时a得到同样的改变。本质是将实参的地址传给了形参b作为其地址。

转载于:https://www.cnblogs.com/xzd1575/p/3958372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值