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

时间:2018-07-10 05:24:39

标签: c arrays pointers

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

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 个答案:

答案 0 :(得分:2)

m1[2]*(m1+2)
*(m1+2)的类型与*m1的类型unit32_t [256][8]相同。

因此,以下行是错误的。

uint32_t* m2 = m1[2];

您需要使用的是:

uint32_t* m2 = (*m1)[2];

答案 1 :(得分:0)

您的第二维不是uint32_t *,而仅仅是m[n],或者与您声明的m1完全不同。 m1[n]uint32_t[8]

答案 2 :(得分:0)

这是不可能的,因为第二维的值不会紧挨着存储在内存中。