【问题标题】:What does int** mean in C in this context?在这种情况下,int** 在 C 中是什么意思?
【发布时间】:2019-10-25 22:56:54
【问题描述】:

这里是上下文:

int *t[10];
int n;

有人告诉我t-n 的类型是 int**。 我不完全明白 int** 是什么意思,它是指针的指针吗?为什么指针表的减法 - int 会给出一个 int 指针的指针?当我们引用*t[0] 时,我们是否将int* p 引用到指针本身,因为它是表的一个元素,还是我们隐含地需要一个指向插槽的指针而不是指向另一个位置的指针?

提前感谢您向我解释这一点。

【问题讨论】:

  • 是指针中的指针吗? 是的。就是这样。我猜对初学者来说有点奇怪,但就是这样。基本上你需要取消引用它。但是,如果没有Minimal, Reproducible, Example,我们真的无法为您提供更多帮助。

标签: c++ c pointers


【解决方案1】:

我不完全明白int** 的意思,它是指针的指针吗?

是的。

  • int = 整数
  • int * = 指向整数的指针
  • int ** = 指针指向(指针指向整数)
  • int *** = 指针指向(指针指向(指针指向整数))
  • (等等)

为什么指针表的减法 - int 会给出一个 int 指针的指针?

因为在 C(和 C++)中,数组在必要时会衰减为指向第一项的指针。例如,int *t[10] 是一个包含 10 个指向 int 项的指针的数组。 t 可以衰减为指向t[0] 的指针,即指向(pointer-to-int) 的指针int **。然后可以将该指针用于指针算术(如减法)。

因此,从t 中减去n 将得到一个int **,它指向n 10 项数组开头“之前”的项(顺便说一句,这不是一个安全的使用指针,除非n 是零或一个小的负数,因为它会指向数组内存的有效边界之外)。

当我们引用*t[0] 时,我们是否将int* p 引用到指针本身 因为它是表格的一个元素,还是我们隐含地需要一个 指向插槽的指针比指向插槽的指针 另一个地方?

我不确定我是否理解这个问题。由于t[10] 是一个由 10 个指针组成的数组(即 10 个int *),这意味着t[0] 是该数组中的一个项目,因此具有int * 类型。因此*t[0] 取消引用数组中的第一个指针,产生指针所指向的实际int 值。

【讨论】:

    【解决方案2】:

    int** 是什么意思

    它是指向int 的指针的类型。如果您取消引用此类型的变量t(例如:*t),您将获得指向int 的指针。如果你取消引用它两次(像这样:**t),你会得到一个int

    【讨论】:

      【解决方案3】:

      如果您有TYPE a[N];,则数组表达式a,如果求值,会产生一个T * 类型的指针,指向a[0]。这有时被称为 C 的数组到指针“衰减”规则。

      如果TYPEint *,就像你的情况一样,那么TYPE *int **

      由于您的数组是int * 指针,因此索引到数组的指针必然是指向该元素类型的指针。

      【讨论】:

        猜你喜欢
        • 2020-04-04
        • 2017-03-28
        • 2016-08-26
        • 2014-10-27
        • 2019-10-15
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        相关资源
        最近更新 更多