【发布时间】:2010-09-25 23:51:45
【问题描述】:
以下是我正在尝试做的简化版本,因为我确定您不想涉足粒子系统的一整套结构和函数原型。
float const materials[24][4][4] = {{{...}}};
typedef struct EmitterStruct { float *material[4][4]; } Emitter;
typedef struct ParticleStruct { float material[4][4]; } Particle;
Emitter *myEmitter;
Emitter * createEmitter(float *material[4][4])
{
Emitter * newEmitter;
newEmitter = (Emitter *)malloc(sizeof(Emitter));
newEmitter->material = materal; /* Returns "incompatable types in assignment" */
return newEmitter; /* I also tried newEmitter->material = &material */
}
int main(char *argv, int argc)
{
myEmitter = createEmitter(materials[0]);
}
本质上,正如评论所示,我得到了一个编译错误。我已经尝试了几种不同的方法,甚至在 Emitter 结构中使用“float material[4][4]”和 createEmitter 的签名。但是,稍后当我尝试将值复制到粒子中以进行修改时,使用:
for (i=0; i++; i<4)
{
for (j=0; j++; j<4)
{
particle->material[i][j] = emitter->material[i][j];
}
}
我在复制时得到另一个类型不匹配,即使 everything 被声明为类型 float[4][4]。本质上,我想从 4x4 数组的数组中得到一个 4x4 数组,在发射器结构中记下它,然后将其复制到粒子结构中。但我只想实际复制一次值。
【问题讨论】:
-
我将标签从 ansi-c 更改为 c,因为这是 stackoverflow 中的通用名称。我希望你不介意。不喜欢就改回来:)
标签: c performance arrays pointers