c语言中关于结构体

#include<stdio.h>
struct tt
{int x;struct tt *y;} *p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main()
{int i;p=a;
for(i=1;i<=2;i++) {printf("%d,",p->x);p=p->y;}
}答案是20,15答案解释说p指向数组a的第一个元素,则p->x=20;然后p=p->y后,p指向第二个元素20,为什么呢

第1个回答  推荐于2016-06-06
#include<stdio.h>
struct tt
{
int x;
struct tt *y;
} *p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17a};
/*这里初始化之后a[0].x=20,a[0].y=a+1,依次类推*/
main()
{
int i;
p=a; //这里把a的值赋给p,a是什么?a是数组名,是个指针,就是a[0]的地址
for(i=1;i<=2;i++)
{
printf("%d,",p->x); // 第一次循环这里输出p->x,实际就是输出a[0].x的值,也就是20
p=p->y; // 第一次循环,p=a,所以p->y就是a[0].y,即p=a+1,a+1是什么?a是个指针,指针+1,就是下一个指针,也就是a[1]的地址了,所以第二次循环时,p->x就是a[1].x,即15
}
}本回答被提问者采纳
第2个回答  2014-08-30
这是一个链表结构,那个结构体里边,定义了struct tt *y,赋值的时候,struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};刚开始的a[0]里边,x=20,y=a+1,也即a[1]的地址,就是这么赋值下去的。所以,main()
{int i;p=a;这里p指向a数组第一个元素地址,p=p->y;到这句之后就指向了下一个地址,明白了吗?
第3个回答  2014-08-30
定义的结构体如果是指针,访问成员时就用->
如果定义的是结构体变量,访问成员时就用.

例如:
struct AAA {
int a;
char b;
};

struct AAA q; 访问成员就用:q.a;
struct AAA *p; 访问成员就用:p->a;
以上回答你满意么?
相似回答