我有一个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]
上面的代码显然有一些东西。什么事?
答案 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)
这是不可能的,因为第二维的值不会紧挨着存储在内存中。