我正在尝试获取一个指向数组整数的指针,以便稍后在函数中临时重新映射以节省我自己的指针数学运算。我试图查看是否有任何其他问题回答了它,但我一直无法重现描述的方法 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 模型将在程序的内部以功能方式使用。该示例只是我尝试整理代码的最小可行程序。
最佳答案
当 group3d
定义为 int (*group3d)[GROUPCOUNT][SENSORCOUNT][SENSORDIM]
时,*group3d
是一个三维数组。这样您就可以将它与 (*group3d)[1][5][1]
一起使用。
要将它与 group3d[1][5][1]
一起使用,您需要 group3d
是指向二维数组的指针:
int (*group3d)[SENSORCOUNT][SENSORDIM] = (int (*)[SENSORCOUNT][SENSORDIM]) groupdata;
(在将 int
数组别名为 int
数组的数组时,存在一些关于 C 语义的技术问题,但这不是常见问题具有默认设置的编译器。但是,最好始终将内存用作 int
数组的数组,而不是 int
数组。)
关于c - 将 C 指针重新映射到 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55166623/