#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 行 [
标记之前的预期表达式。
最佳答案
括号就是括号。在 C 中,对表达式进行分组时不使用任何其他类型的大括号,因为方括号 []
和大括号 {}
在该语言中具有特殊含义。只需使用括号()
。
然后是一些一般提示:对于任何指针或数组 p
和索引 i
,表达式 *(p + i)
为相当于p[i]
。后者通常更容易阅读和理解,这意味着它也更易于维护。请注意,p
可以是生成指针(或数组)的任何表达式,i
可以是生成非负整数的任何表达式。
此外,如果您有一个静态大小的“数组”,例如在代码中的 phi
中,将其声明为数组。这也将使其更容易理解和维护。如果 phi 是所谓的“二维”数组,则将其设为数组的数组:
double phi[201][201];
这一点尤其重要,因为您实际上并没有释放
您分配的内存。在这种情况下效果很好,因为您退出程序,这在大多数系统上意味着分配的内存将自动释放,但是养成释放分配的内存的习惯将为您省去麻烦。使用数组你不需要释放任何东西。
最后,在 C 中,您不应强制转换 malloc
(或任何返回 void *
的函数)的结果。请参阅this SO question and answer for more information .
关于c - "["标记之前的预期表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35193969/