将2d数组重新定义为另一个2d数组C的引用副本

时间:2019-05-11 23:00:50

标签: c arrays

我试图通过引用将2d数组复制到另一个变量中,以避免不必要的计算。我基本上有两个二维数组,current_array和new_array,然后从current_array生成new_array,然后替换。

我正在尝试使用openmp编程游戏,但我在将新数组复制到旧数组时遇到问题。我尝试使用* current_array = * new_array,&current_array =&new_array,...和所有其他组合。 我对C或指针知之甚少,但老师坚持认为我们使用C。

void NextArray(int const height, int const width, int const CurrentArray[height][width], int NewArray[height][width]){
  for(int i = 0; i < height; ++i){
    for(int j = 0; j < width; ++j){
      NewArray[i][j] = Newpoint(i,j, CurrentArray);
    }
  }
}


int main(){
  int CurrentArray[height][width];
  int NewArray[height][width];
  InitialArray=fopen("matrix.txt", "r");

  for(long long i = 0; i < height; ++i){
    for(long long j = 0; j < width; ++j){
      fscanf(InitialArray, "%d", &CurrentArray[i][j]);
    }
  }

  NextArray(height, width, CurrentArray, NewArray);
  CurrentArray = NewArray;
  return 0;
}

如果您这样定义NewPoint,我希望CurrentArray具有与NextArray函数相同的信息:

void NextArray(int const i, int const j, int const CurrentArray[height][width]){
  if (CurrentArray[i][j]){
    return 0;
  }
  return 1;
}

高度= 2,宽度= 2,并且“ matrix.txt”作为具有以下内容的文件:

0 0
1 1

那么CurrentArray应该是

1 1
0 0

1 个答案:

答案 0 :(得分:1)

要将数组复制到相同类型(相同尺寸和元素类型)的数组,请使用:

memcpy(NewArray, CurrentArray, sizeof NewArray);

要创建指向另一个数组的指针,请使用:

int (*NewArray)[width] = CurrentArray;

之所以起作用,是因为在大多数表达式中使用CurrentArray时,它会自动转换为指向其第一个元素的指针。由于它是一个数组数组,因此它的第一个元素是数组。该数组的类型为int [width],指向该数组的指针的类型为int (*)[width]。因此,将NewArray声明为int (*NewArray)[width]会将其定义为具有正确的类型,该类型将分配给指针CurrentArray的第一个元素(并像指针一样)。

鉴于您的任务,您可能需要两个单独的数组-您希望同时拥有旧数据和新数据。您的标题要求提供“引用副本”,但您可能不希望引用旧数组,因为那样一来,只有一组数据可以通过两个不同的标识符进行访问。