代码之家  ›  专栏  ›  技术社区  ›  ImRobb

为什么int**m不等于int m[][]?[关闭]

  •  -3
  • ImRobb  · 技术社区  · 11 月前

    我想澄清一个我还没有完全理解的概念。

    为什么在C中是类型 int **m 兼容 int *m[N] ,但不是与 int m[N][N] ? 2D数组可以被视为指向整数数组的指针,因此 int (*m)[N] 然而,它也可以被视为一个指向整数的指针数组,因此 int*m[N] 我不明白的是为什么 int**m 不能被视为 int m[][] 但是as int *M[] ,而 int m[][] 可以看作 int (*m)[] 但并非如此 int **m.

    如果这个解释有点令人困惑,我深表歉意。

    1 回复  |  直到 11 月前
        1
  •  5
  •   ikegami Gilles Quénot    11 月前

    阵列 T m[X] 当用作指针时,衰减为指向其第一个元素的指针。由于元素具有类型 T ,此指针显然具有以下类型 T * .

    例子 m T T 类型 m[0] 类型 &m[0]
    int m[X] int int * int int*
    int m[X][Y] int[Y] int (*)[Y] int[Y] int(*)[Y]

    int m[X][Y] 不可能腐烂成 int ** 自从 m 不包含指向的指针 int** 可以指出。