【问题标题】:Why pointer Data Types have 2 different Addresses C++为什么指针数据类型有 2 个不同的地址 C++
【发布时间】:2022-07-22 18:27:35
【问题描述】:

我遇到了这个问题,我不明白为什么

当我尝试这个时:

int* a = new int{5};
std::cout << a << '\n' << &a;

输出是:a 有地址,而 &a 有不同的地址,这是为什么?

&a 和 a 不是应该有相同的地址 5 吗?

你写的时候我就知道了

int b = 6;
std::cout << &b;

这将输出6的地址

但在第一个代码中它有不同的地址,这是否意味着指针有 2 个地址?还是什么?

感谢阅读

【问题讨论】:

  • a 本身就是一个对象并且有一个地址,所以&amp;a 给出了a 的地址,而a 给出了指向动态分配的int 的指针。
  • a 是一个 int* 指向 int 的指针。 &amp;a 是一个 int** 一个指向 int 的指针。
  • 指针和其他变量一样。它们具有一定的价值,并且存储在某个地方。
  • 尝试同时打印*a*&amp;a,您会发现它们非常不同。或查看typeid(a).name()typeid(&amp;a).name()

标签: c++ pointers memory-address


【解决方案1】:

a 有地址,而 &a 有不同的地址,这是为什么?

a 本身是一个指针对象并且有一个地址,所以&amp;a 给出了a 的地址,而打印a 给出了指向动态分配的int 的指针值。

这是 C++ 的基础知识,在任何初学者级别都有解释 C++ book

【讨论】:

    【解决方案2】:

    在您的示例中,a 是指向整数(或整数数组)的指针。

    例如

    int a* = new int{5};
    
    printf("a: %p -> %p\n", a, &a); // prints out the address of a
    printf("&a: %p\n", &a); // prints out the address of the pointer to a
    

    基本上你所做的是使用&amp;a,你已经“创建”了一个int a**

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多