以下は、私がやろうとしていることの単純化されたバージョンです。なぜなら、パーティクル システムの構造体と関数プロトタイプのセット全体をくまなく調べたくないからです。
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 構造体と createEmitter のシグネチャで「float material[4][4]」を使用するなど、いくつかの方法を試しました。ただし、後で次を使用して変更のために値をパーティクルにコピーしようとすると、次のようになります。
for (i=0; i++; i<4)
{
for (j=0; j++; j<4)
{
particle->material[i][j] = emitter->material[i][j];
}
}
すべてが float[4][4] 型として宣言されているにもかかわらず、コピー時に別の型の不一致が発生します。要するに、4x4 配列の配列から 4x4 配列を取得し、それをエミッタ構造体に記録してから、パーティクル構造体にコピーしたいと考えています。しかし、実際に値をコピーしたいのは一度だけです。