我试图获取一个指向数组整数的指针,以便稍后在函数中临时重新映射以节省自己的指针数学。我试图查看是否还有其他问题可以回答,但是我无法重现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
的{{1}}处理为group3d
,而我似乎无法将自己包裹在演员表上。我目前拥有执行指针数学运算的宏,以强制执行正确的结构,但是如果所有代码都在代码中,那么将其传递出去时效果会更好。任何建议将不胜感激。
注释: 3D强制转换应以功能方式在程序的肠子中使用。该示例只是我尝试整理代码的最低可行程序。
答案 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