C 指针和结构问题
我想为我的类创建此程序的内存映射,但当我尝试编译它时,我得到一个错误:C 指针和结构问题,c,pointers,C,Pointers,我想为我的类创建此程序的内存映射,但当我尝试编译它时,我得到一个错误: invalid operands to binary expression ('double *' and 'double *') 我是一名学生,请不要编辑代码打印出内存位置,我需要自己编写 main() { double testd; int testi; FILE *fpt; struct frog { double *x, y; }frog; struct frog turtle, *apple, tv[
invalid operands to binary expression ('double *' and 'double *')
我是一名学生,请不要编辑代码打印出内存位置,我需要自己编写
main()
{
double testd;
int testi;
FILE *fpt;
struct frog {
double *x, y;
}frog;
struct frog turtle, *apple, tv[3];
testi = 2;
apple = &turtle;
apple->x = &testd
*(turtle).x = 7.3; //this is where im getting the error.
(*apple).y = 3.6;
turtle.y = 1.5;
for (testi = 0; testi < 3; testi++)
tv[testi].x = &(tv[(testi+1)%3].y);
*(tv[1].x) = 6.4;
}
main()
{
双重测试d;
睾丸内;
文件*fpt;
结构青蛙{
双*x,y;
}青蛙;
结构青蛙龟,*苹果,电视[3];
睾丸=2;
苹果=&乌龟;
apple->x=&testd
*(海龟).x=7.3;//这就是我得到错误的地方。
(*苹果),y=3.6;
海龟:y=1.5;
对于(testi=0;testi<3;testi++)
tv[testi].x=&(tv[(testi+1)%3].y);
*(tv[1].x)=6.4;
}
您缺少代码>位于前一行的末尾
然后,编译器将行开头的*
解释为乘法符号,并抱怨,因为结果不太理想。您缺少代码>位于前一行的末尾
然后,编译器将行开头的*
解释为乘法符号,并抱怨,因为结果不太理想。您只是忘记了代码>在apple->x=&testd
语句之后
另一方面,在C语言中,在结构之前必须说struct
,而main
函数应该返回一个整数。您还需要包含头文件,其中包含您正在使用的数据结构和函数的声明(即stdio.h
)。更不用说,/
注释样式是C99,C程序员并不真正使用它<代码>/**/
评论太棒了。你简直忘了代码>在apple->x=&testd
语句之后
另一方面,在C语言中,在结构之前必须说struct
,而main
函数应该返回一个整数。您还需要包含头文件,其中包含您正在使用的数据结构和函数的声明(即stdio.h
)。更不用说,/
注释样式是C99,C程序员并不真正使用它<代码>/**/
评论太棒了。你错过了代码>位于前一行的末尾
您取消引用*(turtle.x)而不是*(turtle.x)
是正确的。
运算符的优先级高于*
运算符,这意味着这两条语句是等价的,甚至不需要括号:您可以只执行*turtle.x
请查看此网站以了解。您缺少代码>位于前一行的末尾
您取消引用*(turtle.x)而不是*(turtle.x)
是正确的。
运算符的优先级高于*
运算符,这意味着这两条语句是等价的,甚至不需要括号:您可以只执行*turtle.x
查看此网站。有趣的是,如果不是因为x
是指向double而不是double的指针,被解析的行(apple->x=&testd*turtle.x=7.3;
)将自动编译。想象一下,如果apple->x
是一个double,并且程序已编译,那么调试会是多么糟糕!有趣的是,如果不是因为x
是指向double而不是double的指针,被解析的行(apple->x=&testd*turtle.x=7.3;
)将以静默方式编译。想象一下,如果apple->x
是一个double,并且程序已编译,那么调试会是多么糟糕!