【发布时间】:2019-03-14 15:40:52
【问题描述】:
我正在尝试获取指向数组整数的指针,以便稍后在函数中临时重新映射,以节省自己的指针数学。我试图查看是否有其他问题回答了它,但我无法重现 here、here 和 here 描述的方法。
从根本上说,我只想暂时处理一个整数组和一个 3D 数组,以确保我不会弄乱指针数学。 (我目前正在查看这个,因为之前的代码对内存的分配不一致)。
#include <stdlib.h>
#define GROUPCOUNT 16
#define SENSORCOUNT 6
#define SENSORDIM 3
int main()
{
int *groupdata = (int *)calloc(GROUPCOUNT * SENSORCOUNT * SENSORDIM,sizeof(int));
int sensordata[SENSORCOUNT*SENSORDIM];
sensordata[7] = 42; //assign some data
int (*group3d)[GROUPCOUNT][SENSORCOUNT][SENSORDIM] = groupdata; //<---Here is the problem
group3d[1][5][1] = sensordata[7]; //I want to do this
free(groupdata);
}
在上面的示例中,我想暂时将 groupdata 处理为 group3d 以进行分配,但我似乎无法将自己包裹在演员阵容中。我目前有宏来执行指针数学以强制执行正确的结构,但如果它只是在代码中,那么当我传递它时会更好。任何建议将不胜感激。
注意: 3D cast 将在程序内部以函数方式使用。该示例只是我尝试整理代码的最小可行程序。
【问题讨论】:
-
到底是什么错误?尝试使用种姓。为什么要动态创建 3 维数组?而是将内存分配给
int *? -
@Mazhar 该数组被分配了一个
int *,但被传递,并且深度中的函数方式将由3D演员提供。有道理的错误是main.c:11:7: warning: incompatible pointer types initializing 'int (*)[16][6][3]' with an expression of type 'int *' -
是的,这是预期的。您正在为
int (*)[16][6][3]分配一个简单的int *。或者更具体地说,group3d的类型为int (*)[16][6][3],而groupdata的类型为int *。所以你不能直接分配它。虽然你可以使用演员表。在您的情况下,如果您将group3d直接分配为 3D 数组,您仍然可以将此单个指针传递给其他函数,就像您传递groupdata一样,但这次您不必担心尺寸。此外,group3d是一个大小为普通指针的单指针。它不是任何 3d 指针数组。
标签: c