C++中*&(指针引用)与*(指针)的区别
*指针是一个存放地址的变量,指针引用指的是这个存放地址的变量的引用。
C++中如果参数不是引用的话,会调用参数对象的拷贝构造函数,
所以如果有需求想改变指针所指的对象即想要改变指针变量里存放的地址,就要使用指针引用。
下面用一个测试例子和过程图结合进行说明:

#include <iostream>
using namespace std;
struct Node {int data;
};void ChangeNode1(Node*& pnode) {pnode = new Node;pnode->data = 5;
}void ChangeNode2(Node *pnode) {pnode = new Node;pnode->data = 5;
}void Test1() {Node *node = new Node;node->data = 10;ChangeNode1(node);std::cout << "指针引用" << node->data << endl;
}void Test2() {Node *node = new Node;node->data = 10;ChangeNode2(node);std::cout << "指针" << node->data << endl;
}int main() {Test1();Test2();return 0;
}


分析:在Test1中,第一步先创建了一个对象,假设该对象的首地址是1231,则将地址1231存放在node指针变量中,并赋值该对象data属性值为10,当调用ChangeNode1(Node*& pnode)时,如图步骤二,pnode此时可以理解为node的别名,即pnode指针指向的就是node中的地址。pnode=new Node;表示创建一个新对象(假设新对象的首地址为1233),则将该新对象的首地址存放到指针pnode中,也就是指针node中。如图步骤三,node指针和pnode指针中存放的地址均为1233了,即新对象的首地址。

分析:在Test2中,第一步先创建了一个对象,假设该对象的首地址是1231,则将地址1231存放在node指针变量中,并赋值该对象data属性值为10,当调用ChangeNode1(Node* pnode)时,如图步骤二,将node指针中存放的地址拷贝给了pnode,即pnode指针存放的也是1231。pnode=new Node;表示创建一个新对象(假设新对象的首地址为1233),则将该新对象的首地址存放到指针pnode中。如图步骤三,node指针存放的地址还是之前旧对象的首地址1231,pnode指针存放的是新对象的首地址1233。

参考这篇文章https://www.cnblogs.com/jiasq/p/8637982.html
更多人工智能技术干货请关注:

C++中指针*与指针引用*的区别说明相关推荐

  1. Python中值传递和引用传递区别

    原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...

  2. 【C++】21.函数传参 传指针和传引用的区别

    指针传参 向函数传指针参数时,注意区分指针的指向(地址) 与 指针指向的地址中存放的值的区别: 改变形参指针的指向,实参指针指向不会变,实参指向的地址存放的值也不会变: 改变形参指针指向的地址中存放的 ...

  3. 传指针和传引用的区别

    指针参数传递本质上是值传递,它所传递的是一个地址值.值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身). ...

  4. php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...

    java中的this与super的区别 java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Ba ...

  5. 【Unity3D】Unity3D中Material与ShareMaterial引用的区别

    我们在使用Unity引擎的时候,有时候需要去修改某个物体上的Material,在Unity的Renderer类里,提供了两个方法接口供我们使用. Renderer.material和Renderer. ...

  6. 指针和 php引用的区别,c的指针和php中的引用的区别

    https://blog.csdn.net/yangfanzn/article/details/44731391 1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量 ...

  7. PHP面试题:请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?

    按值传递:函数范围内对值的任何改变在函数外部都会被忽略 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改 优缺点:按值传递时,php必须复制值.特别是对于大型的字符串和对象来说,这将会 ...

  8. 2020-12-6(从反汇编理解指针和引用的区别)

    这是我10个月前看到的一篇博客吧,感觉分析指针和引用的文章这是我目前见过讲解得最清晰的一篇: 本文主要基于反汇编代码,从初始化.赋值以及取地址三个角度来理解指针和引用的区别. 初始化 写出以下代码并查 ...

  9. python引用传递的区别_php传值引用的区别

    PHP传值与传址(引用) 传值和传引用的区别在于,如果一个参数比较大,占用大量的内存空间,那么传引用的话就会节省拷贝空间. 传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值 传引用 ...

  10. 关于php变量的赋值和引用的区别

    刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...

最新文章

  1. 【Linux - mysql】 unknown variable ‘sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZER
  2. js获取select选中的内容
  3. LNMP部署(分享十七)
  4. @transactional注解失效情况
  5. pythondocumentation是什么_怎样阅读Python官方文档
  6. Spark2.x RPC解析
  7. Multi GET  API
  8. 云端调用android函数,【探坑】Bmob的云端逻辑
  9. spring-boot-route(十二)整合redis做为缓存
  10. 推荐系统(Recommendation system )
  11. oracle12162错误,ORA-12162: TNS:net service name is incorrectly specified报错问题如何解决?...
  12. 百度地图多点路线规划_期待已久的多地点路线规划功能
  13. wordpress显示文章浏览量并且动态更新浏览量
  14. HTL5 JavaScript里的DOM节点简单思维导图(元素节点,文本节点,节点的增删改查) 高清可打印
  15. 红孩儿编辑器的详细设计第四部分
  16. Sign in with Apple (通过Apple 登录)
  17. 远程登录工具Putty下载,并连接服务器(详细笔记)
  18. pip查看安装包的可安装版本
  19. 常见的登录逻辑漏洞总结
  20. 重新启航--第一篇博客

热门文章

  1. 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题
  2. Failed to read schema document ‘http://code.alibabatech.com/schema/dubbo/dubbo.xsd‘问题解决方法
  3. 解决jenkins控制台中文乱码问题
  4. phpmyadmin登录报错crypt_random_string requires at least one symmetric cipher be loaded 解决方法
  5. 如何防止锚标签上的默认值?
  6. 视图的getWidth()和getHeight()返回0
  7. HTML输入 - 名称与ID
  8. 检查列表中是否存在值的最快方法
  9. Android开发笔记——常见BUG类型之内存泄露与线程安全
  10. 大数据5年规模将达8000亿