C语言中一个简单的问题,不太理解?

structtt{intx;structtt*y;}*p;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main(){inti;p=a... 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;

}想问的是,因为p = a,那么这个p->x就是指向a的首地址,就打印出20了,
然后这个p=p->y;意思是?里面的a+1又是什么意思?再循环一次打印出的15是怎么实现的?
展开
 我来答
microroom
科技发烧友

2020-03-26 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1642万
展开全部
首先,for循环要包括p=p->y;下面的分析才成立(可能是书写错误,代码中没包括)。

以下是分析:

a是一个结构体数组, 有4个元素。

第1个元素是{20,a+1},表示第1个元素的x=20,y=a+1;(而y=a+1;表示第1个元素的y指向数组a的第2个元素)。后面的都是一样,前一个元素的y指向后一个元素。而最后一个元素是{17,a},表示最后一个元素的y又指向了第一个元素(可以认为最后一个元素的下一个元素是第一个元素)。这样,这4个元素就形成了一个环。

再说for循环,p开始是指向第1个元素的,所以就打印20了,而p=p->y;表示将p当前指向的元素的y赋给p,因为y都是指向下一个元素的,所以,p=p->y;后,p就指向了下一个元素,因此会依次输出下一个元素的x值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式