“[”标记

时间:2016-02-04 06:28:24

标签: c

#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行的[标记之前得到一个错误“预期表达式。

1 个答案:

答案 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