【问题标题】:Explanation about the address of a pointer [duplicate]关于指针地址的解释[重复]
【发布时间】:2016-05-17 09:02:25
【问题描述】:

我只是在学习 c++ 中指针的概念。根据我的研究,我了解到& 用于查找变量的内存地址。我想问一下是否还有指针的内存地址。看看我下面的代码

#include <iostream>

using namespace std;

int main() {

int fish=5;
int *fishpointer=&fish;

cout << fishpointer << endl;
cout << &fishpointer << endl;

return 0;
}

上面的代码运行打印如下

0x7fff64cc1f14
0x7fff64cc1f18

每次我运行它时,两个地址都会发生变化,但我认为第二个地址的价值比第一个高 4。为什么会这样?我知道第一个地址是可变的鱼,但无法理解第二个地址。它只是垃圾值吗?

【问题讨论】:

  • ' 如果还有指针的内存地址' - 是的,有。
  • 指针只是一个变量,其值为地址。因此,fishpointer 有一个地址 - 就像任何其他变量一样。所以你可以用&amp;fishpointer获取它的地址。
  • 不,这不是垃圾。你正确理解为指针变量的地址。
  • “指针”可用于通俗地引用指针类型的变量,但从技术上讲,它是一个值,而不是一个变量——你不能取值的地址,但你可以获取包含值的变量的地址。分叉,我知道,但是在学习这些东西时区分是很重要的。
  • @Cameron 我将值称为地址,而不是指针。

标签: c++


【解决方案1】:

&amp;fishpointer是指针的地址。

查看指针指向的指针:

http://www.tutorialspoint.com/cprogramming/c_pointer_to_pointer.htm

【讨论】:

    【解决方案2】:

    第二个值是变量fishpointer的地址。

    编译器决定将这两个变量放在内存中,这就是它们的地址如此相似的原因。该语言不保证会发生这种情况 - 如果您开启优化,您甚至可能会看到不同的行为。

    【讨论】:

      【解决方案3】:

      指针是一个值(对象所在的内存地址)。但是fishpointer 是一个变量(其类型恰好是包含指针值的类型)。

      因此,您可以将fishpointer 的地址与&amp; 一起获取,它会为您提供包含fish 地址的变量的地址。

      由于fishfishpointer 是两个局部变量,编译器将它们都放在堆栈上,在这种情况下它们最终彼此相邻(内存中变量的确切布局取决于实现)。在您的平台上,每个指针似乎都是 4 字节 - 因此变量地址有 4 字节差异。

      【讨论】:

      • 谢谢,明白了。
      猜你喜欢
      • 2020-12-30
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多