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,并且程序已编译,那么调试会是多么糟糕!