我一次又一次地得到这个错误是什么意思。
2dtransient_CN.c:359:131:错误:无效操作数到二进制+(有'double *'和'double')
这个错误来自下面给出的代码
*子程序inidat
************************************************** **************** /
void inidat(int nx, int ny, double *u1, double *u2, double *A, double *B) {
int i, j, ij;
//initial condition
for (i = 0; i <= nx-1; i++){
for (j = 0; j <= ny-1; j++){
ij = i*ny+j;
u1[ij]=0;
u2[ij]=0;
B[ij]=0;
A[ij]=0;
}
//Defining coefficient matrix A
for (i = 0; i <= nx-1; i++){
for (j = 0; j <= ny-1; j++){
ij = i*ny+j;
if (ij>=0 && ij<nx){ // Bottom B.C.
A[ij] = 1;
A[ij+nx] = -1;
B[ij] = 0;
}
else if (ij>=(ny-nx)){ // Top B.C.
A[ij] = 1;
A[ij-nx] = -1;
B[ij] = 0;
}
else if ((ij%nx)==0 && ij!=0 && ij!=(ny-nx)){ // Left B.C.
A[ij] = 1;
A[ij+1] = -1;
B[ij] = 0;
}
else if (((ij+1)%nx)==0 && ij!=(ny-1) && ij!=(nx-1)){ // right B.C.
A[ij] = 1;
A[ij-1] = -1;
B[ij] = 0;
}
else{ // for interior points
A[ij-nx] = -0.5*diffusivity.cy;
A[ij-1] = -0.5*diffusivity.cx;
A[ij] = 1 + diffusivity.cx + diffusivity.cy;
A[ij+1] = -0.5*diffusivity.cx;
A[ij+nx] = -0.5*diffusivity.cy;
B[ij] = (*(u2+ij-1)+ *(u2+ij+1))*0.5*diffusivity.cx + *(u2+ij)*(1-diffusivity.cx-diffusivity.cy) + *((u2+ij+nx)+ *(u2+ij-nx))*0.5*diffusivity.cy;
}
}
}
}
}
/ ******************************** 我应该在上面的代码中更改什么来解决此错误。
答案 0 :(得分:2)
在最后一行,在最后一部分替换
*((u2+ij+nx)+ *(u2+ij-nx))*0.5*diffusivity.cy;
与
(*(u2+ij+nx)+ *(u2+ij-nx))*0.5*diffusivity.cy;
说明:
(u2+ij+nx)
- 是指针,u2
是指针
*(u2+ij-nx)
- 是双重
您无法在指针值中添加double。它在C中被禁止。
我想你想要取两个值的总和并乘以0.5*diffusivity.cy
,这就是建议的解决方案中给出的。