我正在尝试交换两个二维数组,新旧数组。我想调用一个函数,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;
}
最佳答案
您无法更改数组的指针值。您将需要四个变量:
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*
)
关于c - 交换函数中的二维数组引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694199/