#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int i,j;
double xcord[201], ycord[201];
double *a,*b;
float delx,dely;
double *phi = (double *)malloc(201 *201* sizeof(double));
double *r = (double *)malloc(201 *201* sizeof(double));
delx=0.005;
dely=0.005;
a=xcord;
b=xcord;
for(i=1;i<=201;i++)//grid generation
{
xcord[i]=-0.5+0.005*(i-1);
ycord[i]=-0.5+0.005*(i-1);
}
for(i=1;i<=201;i++)
{
for(j=1;j<=201;j++)
{
printf("%f %f\n",xcord[i],ycord[j]);
}
}
for(i=1;i<=201;i++)//phi value calculation
{
for(j=1;j<=201;j++)
{
/* Next 2 lines are highlighted */
*(r + (i-1)*201+ (j-1))=1500*[{(*(a+(i-1))+0.25)*(*(a+(i-1))+0.25)}+{(*(b+(j-1)))*(*(b+(j-1)))};
*(phi + (i-1)*201+ (j-1))=5*exp (*(r + (i-1)*201+ (j-1)));
}
}
for(i=1;i<=201;i++)
{
for(j=1;j<=201;j++)
{
printf("%f \n",*(phi + (i-1)*201+ (j-1)));
}
}
return 0;
}
这是我编写的代码,用于生成计算网格,然后计算网格每个节点的变量phi
的值。我试图将phi (=5exp[-1500{(x+0.25)*(x+0.25)+y*y}])
的等式突出显示在两行中。但是每次编译时,我都会在第34行的[
标记之前得到一个错误“预期表达式。
答案 0 :(得分:3)
括号是圆括号。在C中,在对表达式进行分组时不要使用任何其他类型的大括号,因为方括号[]
和大括号{}
在语言中具有特殊含义。只需使用括号()
。
然后是一些常规提示:对于任何指针或数组p
和索引i
,表达式*(p + i)
等同于p[i]
。后者通常更容易阅读和理解,这意味着它也更易于维护。注意p
可以是产生指针(或数组)的任何表达式,i
可以是产生非负整数的任何表达式。
另外,如果你有一个静态大小的&#34;阵列&#34;像例如代码中的phi
,将其声明为数组。这也将使其更容易理解和维护。如果phi
是所谓的&#34; 2d&#34;数组,然后使它成为一个数组数组:
double phi[201][201];
这一点尤为重要,因为您实际上并没有free
您分配的内存。在这种情况下它很好用,因为你退出程序,在大多数系统上这意味着分配的内存将自动自由,但养成释放你分配的内容的习惯将为你节省麻烦。使用数组你不需要任何东西。
最后,在C中,您不应该转换malloc
(或任何返回void *
的函数)的结果。请参阅this SO question and answer for more information。