我想交換兩個2d陣列,舊的和新的。我想調用一個函數copyNewToOld
,而不實際複製這些值。我只是想引用舊的指向新的位置,並指向新的指向舊的。功能交換2d陣列參考
所以我可以初始化這樣的:
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;
}
好吧兩件事。其一,我有點誤會;二維數組降級爲float *,而不是float ** ...修復。其次,你需要在循環之前設置newTemp和oldTemp,並使用它們而不是* Mesh。通過修復您的代碼更新我的答案。 – Kaslai