【问题标题】:Dereferencing multi-level pointers [duplicate]取消引用多级指针[重复]
【发布时间】:2015-10-30 15:52:29
【问题描述】:

这可能与其他一些问题/答案(我找不到)重复,但在我看来,对于 为什么以及何时 使用多指针有很好的解释,但是没有关于指向指针的指针是如何取消引用的简单解释。

我试图做一个简单(和模糊)的解释,它应该只给读者关于如何取消引用指针到指向指针的指针的最基本知识......

【问题讨论】:

    标签: c++ c pointers dereference


    【解决方案1】:

    不应该需要这样的解释。如您所知,* 取消引用指针,这是一个简单的归纳,如果指向的变量也是一个指针,您只需取消引用 两次 即可获得 this价值。以此类推。

    不要忘记一个简单的经验法则:如果您曾经需要的不仅仅是双重间接(例如发现自己在写 *** 或更糟),很可能设计有缺陷,您应该退后一步,重新设计解决问题的方法,然后再次实施。

    【讨论】:

    • 目的是对阅读包含多级指针的代码给出一个易于理解的解释。不一定是你自己设计的——(因为在你自己使用它之前你应该知道什么是多级指针)。
    • 我仍然认为这不是必需的。鉴于* 取消引用指针(以及 dereference 的含义)以及指针可能指向其他指针的信息,任何无法推断出他可以只写 ** 的人都不符合一个程序员。但这只是我的意见......
    • 这显然是反对意见,但我的经验是一些新程序员(我知道他们经常使用这个网站)很难掌握指针的概念,而且你偶然发现并不少见学习编程时跨越多级指针。
    • @MaltePedersen 玩多级间接非常好,实际上应该在学习时这样做。 Felix 正在谈论生产代码。
    【解决方案2】:

    假设你有以下代码:

    int *p;
    int **p2;
    int k;
    

    然后我们可以初始化k 并使p 指向它。之后我们可以让p2 指向指针 p:

    k = 10;
    p = &i;
    p2 = &p;
    

    我们现在将取消引用p2 两次以查看指针p2 指向的值 所指向的值(使用简单的C++):

    #include <iostream>
    ...
    std::cout << "What is k? Answer: " << **p2;
    

    -->什么是k?答案:10

    也可以通过取消引用来更改k 的值

    **p2 = 19;
    std::cout << "What is k now? Answer: " << **p2;
    

    --> k 现在是什么?答案:19

    我希望这可以帮助新程序员了解如何取消引用指向指针的指针。如果需要三重(或更多)指针,只需取消引用更多级别

    int ***p3 = &p2;
    ***p3 = 60;
    std::cout << "What is k now? Answer: " << ***p3;
    

    --> k 现在是什么?答案:60

    关于取消引用的真正含义的更多信息可以在

    中找到

    What does "dereferencing" a pointer mean?

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2021-07-04
      • 1970-01-01
      • 2023-03-18
      • 2020-06-05
      相关资源
      最近更新 更多