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

时间:2019-03-14 15:40:53

标签: c

我试图获取一个指向数组整数的指针,以便稍后在函数中临时重新映射以节省自己的指针数学。我试图查看是否还有其他问题可以回答,但是我无法重现hereherehere中描述的方法。

从根本上讲,我只想暂时性地处理一个整数组和一个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的{​​{1}}处理为group3d,而我似乎无法将自己包裹在演员表上。我目前拥有执行指针数学运算的宏,以强制执行正确的结构,但是如果所有代码都在代码中,那么将其传递出去时效果会更好。任何建议将不胜感激。

注释: 3D强制转换应以功能方式在程序的肠子中使用。该示例只是我尝试整理代码的最低可行程序。

3 个答案:

答案 0 :(得分:1)

group3d定义int (*group3d)[GROUPCOUNT][SENSORCOUNT][SENSORDIM]时,*group3d是三维数组。这样您就可以将其与(*group3d)[1][5][1]一起使用了。

要将其与group3d[1][5][1]一起使用,您需要group3d作为指向二维数组的指针:

int (*group3d)[SENSORCOUNT][SENSORDIM] = (int (*)[SENSORCOUNT][SENSORDIM]) groupdata;

(关于C语义的一些技术问题是将int的数组别名为int的数组的数组,但这在具有默认设置的普通编译器中不是问题。但是,最好始终将内存用作int数组的数组而不是int的数组。)

答案 1 :(得分:1)

  int l = 5, w = 10, h = 15;
  int Data = 45;
  int *k = malloc(l * w * h * sizeof *k);
  // not use this k[a][b][c] = Data;
  //use this is right
   k[a*l*w + b*l + c] = Data;

答案 2 :(得分:0)

  

在上面的示例中,我想将groupdata作为group3d处理   暂时去做作业,我似乎无法包裹自己   在铸件周围。

一种可能的解决方案是像这样动态创建多维数组。这样,您就不必投放任何东西或担心尺寸。

try:
    from google.appengine.tools.devappserver2.python.runtime.stubs import FakeFile
    FakeFile._allowed_dirs.update(['/System/Library/CoreServices/'])    
except ImportError:
    pass