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

如何创建指向三维数组二维的指针?

  •  0
  • poby  · 技术社区  · 5 年前

    我有一个三维数组,想创建一个指向二维的指针。

    uint32_t m0[4096][256][8];
    uint32_t (*m1)[256][8] = &m0[0];
    uint32_t *m2 = m1[2];      //<- warning: initialization from incompatible pointer type
    
    // do something with m2[0], m2[1].... m2[7]
    

    显然上面的代码有点问题。这是怎么一回事?

    3 回复  |  直到 5 年前
        1
  •  2
  •   R Sahu    5 年前

    m1[2] *(m1+2) .
    类型 *(M1+2) 与类型相同 *m1 ,这是 unit32_t [256][8] 是的。

    因此,下面的一行是错误的。

    uint32_t* m2 = m1[2];
    

    您需要使用的是:

    uint32_t* m2 = (*m1)[2];
    
        2
  •  0
  •   LoztInSpace    5 年前

    你的第二维度不是 uint32_t * 很简单 m[n] ,或完全按照您声明的那样 m1 是的。 m1[n] uint32_t[8]

        3
  •  0
  •   Nico    5 年前

    这是不可能的,因为第二个维度的值没有存储在内存中。