c - 交换函数中的二维数组引用

标签 c pointers multidimensional-array

我正在尝试交换两个二维数组,新旧数组。我想调用一个函数,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/

相关文章:

c++ - 使用线性搜索为二维数组生成唯一数字

C# 遍历 3D 数组的最快维度

c - 金字塔分割 OpenCV

c - 安全地直接写入内存地址

c++ - 实现深拷贝

c - 为什么动态调整字符串会导致崩溃?

c - 使用 GDB 找出我的 C 程序挂起的位置?

c - 通过 MPI 点对点通信发送数组

c++ - 无法将参数 'char*(*)[6]' 的 'char***' 转换为 '2' 到 'void prac(int*,char***)'

java - 尝试将文本文件读入数组