古いものと新しいものの2つの2Dアレイを交換しようとしています。copyNewToOld
実際に値をコピーせずに、関数を呼び出したい。古いものへの参照が新しい場所を指し、新しいものへの参照が古いものを指すようにしたいだけです。
だから私はこのように初期化することができます:
float oldMesh[SIZE][SIZE] = {0};
float newMesh[SIZE][SIZE] = {0};
このように呼び出します:
copyNewToOld(&newMesh, &oldMesh);
そして、次のようなもので実装します。
void copyNewToOld(float *(new[][SIZE]), float *(old[][SIZE])){
float **temp;
temp = *new;
*new = *old;
*old = temp;
temp = NULL;
}
ただし、その実装はポインターを交換せず、データを何度も上書きし続けます。
私は簡単な何かが欠けていますか?
更新されたコード:
float oldMesh[DIM + 2][DIM + 2] = {0};
float newMesh[DIM + 2][DIM + 2] = {0};
float **newTemp, **oldTemp
for(i = 0; i < iterations; i++){
newTemp = &newMesh;
oldTemp = &oldMesh;
copyNewToOld(&newTemp, &oldTemp);
calculateNew(newMesh, oldMesh, xsource, ysource);
}
copyNewToOldを次のように使用します。
void copyNewToOld(float ***new, float ***old){
float **temp;
temp = *new;
*new = *old;
*old = temp;
}