我最初有代码:
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我该如何解决这个问题?
答案 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 ***