通过切换指针交换2D数组

时间:2017-11-05 17:27:25

标签: c performance memory

我最初有代码:

double **u_new,**u;

for(iy=0;iy<Ny;iy++) {
  for(ix=0;ix<Nx;ix++) {
    u[ix][iy] = u_new[ix][iy];
  }
}

这里u和u_new都是二维数组。

这些数组相当大,因此我认为这样做效率很低,我应该更换内存位置。

我创建了一个名为swapmem的函数,定义如下:

void swap_mem(double **array1, double **array2) 
{
  double *tmp;
  tmp = *array1;
  *array1 = *array2;
  *array2 = tmp;
}

在我的代码中,我致电

   swap_mem(&u,&u_new); 

然而,这似乎不起作用。我收到警告: 从不兼容的指针类型

传递swap_mem的参数1

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

更改为此应该有效:

void swap_mem(double ***array1, double ***array2)
{
    double **tmp;
    tmp = *array1;
    *array1 = *array2;
    *array2 = tmp;
}

仔细阅读警告和错误。它们实际上包含了做什么的好线索。当我编译你的代码时,我得到了这个:

bb.c:21:14: warning: passing argument 1 of ‘swap_mem’ from incompatible pointer type [-Wincompatible-pointer-types]
     swap_mem(&u, &u_new);
              ^
bb.c:10:6: note: expected ‘double **’ but argument is of type ‘double ***’
 void swap_mem(double **array1, double **array2)

请注意以下行:expected ‘double **’ but argument is of type ‘double ***