错误,*的运算符必须是指针

Error, operator of * must be pointer

本文关键字:指针 运算符 错误      更新时间:2023-10-16

我试图用步骤1/n计算从0到1-1/n的pi值,但c不允许我将2PI和我的步骤数组相乘(错误,*的运算符必须是指针)。我是c的新手,所以如果有人能给我指明正确的方向,那就太好了。这是我的密码。

#include <stdio.h>
#include <conio.h>
#include <inttypes.h>
#include <math.h>
#define PI
int main(){
    int i;
    double in[256], out[256],n;
    n = 128.0000;
    for (i = 0; i <= n-1; i++){
        in[i] = i / n;
        out[i] = sin(2*PI*in[i]);
        printf("%lf %lf n", in[i],out[i]);
    }

    _getch();

}
#define PI

您没有为PI定义任何值,请将其更改为

#define PI 3.14159265358979323846

#define PI M_PI

如果您在POSIX世界中(math.h也必须包含在内)。

在您的示例中,PI只是被什么都不替换,您的赋值语句是:

out[i] = sin(2*PI*in[i]);

最终到达:

out[i] = sin(2**in[i]);

您定义了PI,但没有将其定义为任何东西。因此,在您的代码中,令牌PI被替换为nothing。所以这行:

out[i] = sin(2*PI*in[i]);

成为:

out[i] = sin(2**in[i]);

相当于:

out[i] = sin(2*(*in[i]));

这意味着"获取in数组的第i个元素,取消引用它,将结果乘以2,然后将其传递给sin()。但in数组的第i个元素是双精度的,而不是指针类型——这就是为什么会出现这种特殊错误,因为*的操作数实际上不是指针类型。

您需要为PI定义添加一个值:

#define PI 3.1415926535897932384626433