在功能中交换2d阵列参考

时间:2013-02-04 19:38:32

标签: c pointers multidimensional-array

我正在尝试交换两个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;
}

2 个答案:

答案 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)。