C++ 指针引用 *&

C++ 指针引用 *&文章目录指针引用的作用示例仅一级指针实现二级指针实现指针引用实现指针引用的作用指针引用 amp 可以替代二级指针 使用时 更简单 可以被重新赋值 示例如下示例 要求在 func p 中 m value 值和参数 p 指代的实际内容值相同 且之后 m value 值的改变 会影响 p 的实际内容 仅一级指针实现 include iostream iostream


指针引用的作用

指针引用 *& 可以 替代 二级指针
使用时,更简单;
可以被重新赋值。





示例

仅一级指针实现

#include  
       using namespace std; int m_value = 1; //一级指针参数 void func(int * p, int dest) { 
      m_value = dest; *p = m_value; } int main(int argc, char *argv[]) { 
      int n = 2; int *pn = &n; cout << *pn << endl; //初始值 func(pn, 77); cout << *pn <<endl; //经过 func 函数后 m_value = 88; cout << *pn <<endl; //改变 m_value 后 } 

输出:

2 77 77 

发现 后面改变了 m_value 值 ,并不影响 *pn。 这不合要求

二级指针实现

#include  
       using namespace std; int m_value = 1; //二级指针参数 void func(int ** p, int dest) { 
      m_value = dest; *p = &m_value; //*p 表示一级指针 ,指向 m_value 内容的地址 } int main(int argc, char *argv[]) { 
      int n = 2; int *pn = &n; cout << *pn << endl; //初始值 func(&pn, 77); //pn 是指针变量, &pn 就是二级指针 cout << *pn <<endl; //经过 func 函数后 m_value = 88; cout << *pn <<endl; //改变 m_value 后 } 

输出:

2 77 88 

满足要求。

指针引用实现

#include  
       using namespace std; int m_value = 1; //指针引用参数 void func(int *& p, int dest) { 
      m_value = dest; p = &m_value; } int main(int argc, char *argv[]) { 
      int n = 2; int *pn = &n; cout << *pn << endl; //初始值 func(pn, 77); //传递一级指针 cout << *pn <<endl; //经过 func 函数后 m_value = 88; cout << *pn <<endl; //改变 m_value 后 } 

输出:

2 77 88 

满足要求。


一级指针改变地址(2020.01.30)

void func(const int *p, int dest) { 
       m_value = dest; p = &m_value; //直接对一级指针变量p 赋值一个地址。 } int main(int argc, char *argv[]) { 
       int n = 2; int *pn = &n; cout << *pn << endl; //初始值 func(pn, 77); //传递一级指针 cout << *pn <<endl; //经过 func 函数后 m_value = 88; cout << *pn <<endl; //改变 m_value 后 } 

输出

2 2 2 

从结果看,直接改变形参一级指针地址,并不影响实参一级指针。 仅在形参所在函数内部有效。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203750.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午9:40
下一篇 2026年3月19日 下午9:41


相关推荐

  • Springboot源码_pe启动制作源码

    Springboot源码_pe启动制作源码我们在使用SpringBoot启动项目的时候,可能只需加一个注解,然后启动main,整个项目就运行了起来,但事实真的是所见即所得吗,还是SpringBoot在背后默默做了很多?本文会通过源码解析的方式深入理解SpringBoot启动全过程SpringBoot启动过程流程图源码解析大家不要抗拒源码解析,这个非常优秀的代码,我们如果能够学会对自己代码编写水平大有裨益首先,我们先来看下SpringBoot项目的启动类@SpringBootApplicationpublicclassSp.

    2022年8月21日
    7
  • 讯飞星火(iFlytek Spark):科大讯飞打造的国产AI大模型平台

    讯飞星火(iFlytek Spark):科大讯飞打造的国产AI大模型平台

    2026年3月14日
    3
  • PyCharm+SVN「建议收藏」

    PyCharm+SVN「建议收藏」首先电脑安装svn,并且确svn/bin下面有svn.exe文件没有bin/svn.exe解决方法:重新打开TortoiseSVN安装文件-Modify-Next后在commandlineclienttools选项修改为Willbeinstalledonlocalharddrive,等待安装完成,SVN目录会出现svn.exe文件如果以上解决…

    2022年8月29日
    6
  • 一文带你了解常见的数据指标都有哪些【数据分析】[通俗易懂]

    一文带你了解常见的数据指标都有哪些【数据分析】[通俗易懂]为了进一步提升自己分析业务的能力,首先得先了解好在日常业务分析当中往往会用到那些数据指标。接下来我给大家整理了常见的一些数据指标,建议收藏后慢慢阅读。目录用户获取渠道到达量渠道转化率渠道ROI日应用下载量日新增用户数用户获取成本一次会话用户数用户活跃活跃用户PV和UV用户会话次数用户访问时长功能使用率用户留存留存率用户流失率退出率和跳出率市场营销用户生命周期用户生命周期价值用户忠诚指数用户流失指数用户价值指数结束语用户获取渠道到达量这个俗称曝光量,如果在CSDN有发过博客的朋友应该知道“展现量”这

    2022年5月10日
    56
  • OpenClaw 远程访问配置指南

    OpenClaw 远程访问配置指南

    2026年3月15日
    2
  • LeetCode[5]-最长回文子串_leetcode 合并区间

    LeetCode[5]-最长回文子串_leetcode 合并区间给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,”a”,”b”],[“aa”,”b”]]示例 2:输入:s = “a”输出:[[“a”]] 提示:1 <= s.length <= 16s 仅由小写英文字母组成题解暴搜class Solution {public: vector<vector<st

    2022年8月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号