我正在尝试交换两个2d阵列,无论是新旧。我想调用函数copyNewToOld
,而不实际复制值。我只是希望引用old指向new的位置,并引用new指向old。
所以我可以像这样初始化:
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;
}
答案 0 :(得分:2)
您无法更改数组的指针值。你需要四个变量:
float oldmesh[SIZE][SIZE];
float newmesh[SIZE][SIZE];
float *oldMesh = (float*) oldmesh;
float *newMesh = (float*) newmesh;
void copyNewToOld( float **old, float **new ){
float *temp = *old;
*old = *new;
*new = temp;
}
...
{
copyNewToOld( &oldMesh, &newMesh );
}
修复代码:
float oldMesh[DIM + 2][DIM + 2] = {0};
float newMesh[DIM + 2][DIM + 2] = {0};
float *newTemp, *oldTemp
newTemp = (float*) newMesh;
oldTemp = (float*) oldMesh;
for(i = 0; i < iterations; i++){
copyNewToOld(&newTemp, &oldTemp);
calculateNew((float(*)[DIM + 2])newTemp, (float(*)[DIM + 2])oldTemp, xsource, ysource);
}
(如果您希望calculateNew
函数接收float[DIM + 2][DIM + 2]
,则演示用于。如果您不介意在一维数组上进行数学计算,只需传入float*
)
答案 1 :(得分:0)
而不是交换数组,而应该将指针交换到这些数组。
如果要直接交换数组,则必须复制其内容(例如,使用memcpy
)。