c - 将 C 指针重新映射到 3D 数组

标签 c

我正在尝试获取一个指向数组整数的指针,以便稍后在函数中临时重新映射以节省我自己的指针数学运算。我试图查看是否有任何其他问题回答了它,但我一直无法重现描述的方法 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/

相关文章:

客户端/服务器 C 连接

C释放内存的问题,valgrind错误

c - 为什么这不能在 C18 中编译?

c++ - Tandy 1000 PC SX 的 C 或 C++ 编译器?

c - 下面是我的代码,以参数 n 表示的函数返回是什么?

c - 使用 KeyBlob(以字节格式存储)进行加密操作的任何可能性

c - 将字符串返回到需要在屏幕上打印的 C 程序形式的 Bash 脚本

c++ - 如果两个数据之间的不变量必须在所有线程上保持不变,它是否会强制对这些数据的读/写处于临界区?

C编程: Linked Lists

C编程,将一个 block 填充到最接近的32位