错误,*的运算符必须是指针
Error, operator of * must be pointer
我试图用步骤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
相关文章:
- C++ 带有函数指针的运算符优先级
- 是否允许编译器省略对指针的 &* 运算符的组合调用?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 在一个指令中声明更多指针的运算符优先级
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- SFINAE - 检测类型 T 是指针、数组还是带有随机访问运算符的容器,以及给定的值类型
- c++:复制、删除和运算符=在原始指针映射中
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 类重载运算符 '<' 插入指向该对象集的共享指针时不调用
- 使用继承的指针列表复制构造函数或重载运算符=
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- Caffe 源代码中层函数标头中指针运算符的含义
- 嵌套智能指针运算符>
- 运算符和指针运算符的地址
- 对于什么对象指针值,指向成员的指针运算符调用未定义的行为
- 在 65536 位置访问迭代器的指针运算符会导致段错误
- 检测对堆栈变量的调用delete(使用强制转换到指针运算符)
- C++中指向成员的指针运算符 ->* 和 .* 是什么?
- 关于智能指针运算符*和运算符>重载的说明