【问题标题】:What’s the difference between a pointer to an int and a pointer to a pointer to an int in c++? [duplicate]在 c++ 中,指向 int 的指针和指向指向 int 的指针有什么区别? [复制]
【发布时间】:2017-06-19 00:08:16
【问题描述】:

我需要了解两者之间的区别:

指向 int 的指针

一个指向int的指针

我认为语言并不重要,但要知道我正在学习 c++。

谢谢!

【问题讨论】:

  • "a pointer to an int" 一个变量,可以包含int 的地址(在内存中可以找到的地址)。 “指向 int 指针的指针”一个变量,它可以包含一个变量的地址,该变量可以包含一个 int 的地址。第一个回答“我在哪里可以找到int?”这个问题。第二个回答问题“我在哪里可以找到int?”
  • 所以它不像指向 int 的指针意味着一维数组,而指向指针的指针是二维数组?!!
  • 不,但是如果您的代码被编写为将指针视为数组,则可以这样使用它们。在这种情况下,每个指针持有的地址被解释为数组的第一个元素。

标签: c++ arrays pointers


【解决方案1】:

指针只是内存地址。因此,指向 int 的指针意味着一个变量,其值是 int 的内存地址,指向 int 的指针意味着一个变量,其值是指向 int 的指针的内存地址,而该指针的值指向int 是 int 的内存地址。

假设您定义了三个变量,如下所示。

int a = 184;  // Plain int, value 184.
int *b = &a;  // Pointer to int, specifically pointing to a.
int **c = &b; // Pointer to pointer to int, which points to b, which points to a.

这是这些变量在内存中的样子。 (请注意,只有值实际存储在内存中。类型是从使用该内存的代码中推断出来的。)

        +------------+        +------------+        +------------+
type    | int        |        | int*       |        | int**      |
        +------------+        +------------+        +------------+
address | 0x02618368 |        | 0x02618372 |        | 0x02618376 |
        +------------+  <---  +------------+  <---  +------------+
value   | 184        |        | 0x02618368 |        | 0x02618372 |
        +------------+        +------------+        +------------+

因此,要从 c 中获取一个 int,您需要取消对它的两次引用。第一个 deference 从 c 获取值,将其解释为指向 int 的指针的地址,并查找该地址以获得指向 int 的指针,该指针等于 b。第二次取消引用从结果指针中获取值,指向 int,将其解释为 int 的地址,并查找该地址以获得等于 a 的 int。

【讨论】:

  • 是的,不清楚。我现在已经修好了。
猜你喜欢
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
相关资源
最近更新 更多