错误:初始化使得指针来自整数而没有强制转换

use*_*805 4 c pointers casting

我在使用这段代码返回错误时遇到了麻烦:

assgTest2.c: In function 'Integrate':
assgTest2.c:12: warning: initialization makes pointer from integer without a cast
assgTest2.c:15: error: expected ';' before ')' token
Run Code Online (Sandbox Code Playgroud)

我已经环顾四周,无法理解类似问题的答案,任何帮助都将不胜感激.

1    void SamplePoint(double *point, double *lo, double *hi, int dim)
2    {
3       int i = 0;
4       for (i = 0; i < dim; i++)
5          point[i] = lo[i] + rand() * (hi[i] - lo[i]);
6    }
7
8    double Integrate(double (*f)(double *, int), double *lo, double *hi, int dim, 
9                     double N)
10    {
11       double * point = alloc_vector(dim);
12       double sum = 0.0, sumsq = 0.0;
13
14       int i = 0;
15       for (i = 0.0, i < N; i++)
16       {
17         SamplePoint(point, lo, hi, dim);
18
19         double fx = f(point, dim);
20         sum += fx;
21         sumsq += fx * fx;
22       }
23
24       double volume = 1.0;
25       i = 0;
26       for (i = 0; i < dim; i++)
27         volume *= (hi[i] - lo[i]);
28
29       free_vector(point, dim);
30       return volume * sum / N;
31    }
Run Code Online (Sandbox Code Playgroud)

编辑:修正了一些错误,仍然给出了同样的错误

pmg*_*pmg 8

我猜这是你的第12行

    double * point = alloc_vector(dim);
Run Code Online (Sandbox Code Playgroud)

警告的内容是

warning: initialization makes pointer from integer without a cast
Run Code Online (Sandbox Code Playgroud)

这意味着从返回的整数alloc_vector()被自动转换为指针,你不应该这样做(尽管警告提示,你也不应该投射).

更正:添加适当的#include地方alloc_vector()被声明,使编译器知道它返回一个指针,并不需要猜测(错误地)它返回一个整数.

或者,如果您没有包含文件,请在文件顶部自行添加原型

double *alloc_vector(int); // just guessing
Run Code Online (Sandbox Code Playgroud)

第15行

     for (i = 0.0, i < N; i++)
Run Code Online (Sandbox Code Playgroud)

错误的文本是

assgTest2.c:15: error: expected ';' before ')' token
Run Code Online (Sandbox Code Playgroud)

每个for语句在控制结构中有两个分号(在括号之间).您的控制结构只有1个分号.改为

     for (i = 0.0; i < N; i++)
     //          ^ <-- semicolon
Run Code Online (Sandbox Code Playgroud)