struct HAR
{int x,t; HAR *p;}[2];
main( )
{h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);
各位请帮忙解释h[0].p=&h[1];h[1].p=h;与printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);两句,顺便写出运行结果!谢了,第一个应该是3,第二个如何推算?
struct HAR
{int x,t; HAR *p;}h[2]; 掉了个H,不好意思,刚才学懵了!
main( )
{h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);
各位请帮忙解释h[0].p=&h[1];h[1].p=h;与printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);两句,顺便写出运行结果!谢了,第一个应该是3,第二个如何推算?

h[0].y=2;结构HAR里面没有y吧,只有t啊,所以编译会出错的啊. typedef struct HAR {int x,y;struct HAR *p;}h[2]; 这个定义不怎么适合,typedef 是类型定义,定义完之后h[2]就是一个类型了,就可以象int一样使用了 此处它的类型是struct HAR. 所以我觉得应该这样定义: typedef struct _HAR { int x,y; struct _HAR *p; }HAR;
HAR h[2]; 然后呢:
main( )
{h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y); }
运行结果为3 2 h[1].p=h; // h是数组名,,即为数组的首地址,即为 &h[0]; 所以h[1].p指向h[0]
[此贴子已经被作者于2004-09-07 20:16:18编辑过]
