• 为什么使用了指针形参,但是返回值还是没有改变


    今天遇到一个问题,如题,下面上例子

     1 void Get(Node* head)
     2 {
     3     Node* temp = new Node();
     4     temp->a = 5;
     5     head = temp;
     6 }
     7 
     8 int main()
     9 {
    10     Node* head = nullptr;
    11     Get(head);
    12 
    13     std::cout << head->a;
    14 
    15     std::cin.get();
    16     return 0;
    17 }

    程序一运行就会报错,后来想了想,想明白了,修改代码如下

     1 Node* Get(Node* head)
     2 {
     3     Node* temp = new Node();
     4     temp->a = 5;
     5     head = temp;
     6     return head;
     7 }
     8 
     9 int main()
    10 {
    11     Node* head = nullptr;
    12     head = Get(head);
    13 
    14     std::cout << head->a;
    15 
    16     std::cin.get();
    17     return 0;
    18 }

    两个代码主要修改就是Get函数增加了返回值。那为什么就正确了呢,我们的指针形参不应该直接返回我们修改后的值吗。你仔细想想我们指针在主函数中被赋值为空,也就是并没有指向任何内存,然后到了Get函数,我们的指针被赋值了,指向了一个新的内存块。

    我们仅仅只看这些代码,你就会发现我们在Get函数中,其实是对指针这个类型的值进行了改变,而这个我们所说的指针形参是对我们指针指向的内存中的元素进行改变。所以这里的我们的指针head就像int一样是个值传递。如果你把Node*改成int,就很清晰了。所以说到底还是概念和理解的不到位。

  • 相关阅读:
    python学习:设计一个算法将缺失的数字找出来。
    zabbix如何监控进程
    centos7 网桥的配置
    Zabbix 3.0 监控Web
    一个监控进程的脚本,若进程异常重启进程
    centos 6.8 下安装redmine(缺陷跟踪系统)
    iOS UICollectionView简单使用
    ios开发图片点击放大
    IOS中实现图片点击全屏预览
    iOS 中有用的开源库
  • 原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/12674678.html
Copyright © 2020-2023  润新知