【问题标题】:A pointer holding 2 memory locations?一个持有 2 个内存位置的指针?
【发布时间】:2021-09-25 15:54:55
【问题描述】:

为什么一个指针包含两个内存位置?第二个内存位置的用例是什么?

#include <iostream>

using std::cout;

int main()
{
    string animal;
    string *rabbit = &animal;
    
    cout << rabbit  << " 1st memory location \n" 
         << &rabbit << " 2nd memory location";

    return 0;
}

【问题讨论】:

  • 你需要一个物理的地方来存储指针本身。它不是“免费的”。
  • 你会说animal 包含一个字符串和一个内存位置吗?您可以轻松地输出animal&amp;animal,其中第二个输出是内存位置。这是否意味着animal“持有”一个内存位置?
  • 相关,但从不同的角度来看:Pointer in C++ Same variable have two different address

标签: c++ pointers


【解决方案1】:

一个指针保存一个内存地址。 &amp;rabbitrabbit 变量本身的地址。

【讨论】:

  • 这意味着即使是指针也有内存地址?
  • @yuiamanda 每个变量都有一个内存地址,甚至指针。毕竟,您需要将它们存储在某个地方:-)
  • 如果是,rabbit 是动物的地址。 &rabbit 是兔子的地址。我尝试创建另一个指针来保存兔子地址。我得到编译错误。 string *hold = &amp;rabbit; cout &lt;&lt; hold &lt;&lt; " " &lt;&lt; &amp;rabbit;
  • @yuiamanda int 的地址是int*string 的地址是 string*。添加一个星号。 rabbit的类型是string *,所以它的地址是string **
  • @JaMiT 哇,每个指针链接都会创建级别指针。它由多少个星号决定。好的,我明白了。
【解决方案2】:

如上图所示,pointer p 保存着另一个值为 50 的变量的内存地址。

例如。

cout<<p; //fff4 address of number 
cout<<*p; //value at location fff4 will be printed that is 50
cout<<&p; //address of pointer p which is aaa3 will be printed

了解更多关于pointers

【讨论】:

    【解决方案3】:

    当我们声明指针rabbit时,它会在内存中保留一些空间。而当我们调用&amp;rabbit时,它会保存rabbit的地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2021-11-10
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多