为什么答案是51 60 21

struct st{ int х; int *y; }*p; intdt[4]=110,20,30,40); struct st aa[4] = {50, & dt[0], 60, & dt[1], 70, & dt[2], 80, & dt[3]); main() { p=aa; printf(" % d", ++p - > х); printf(" % d", (++p)-> х); printf(" % d \n", ++(* p > y));

++p->x相当于++(p->x),先p->x,为50,再++,为51,这里p并没有动

(++p)->x,p指向aa,++p指向aa[1],aa[1].x值为60,zh这里p已经指向aa[1]了

再++(*p->y),p->y就是&dt[1],再*就是取的dt[1]的值,为20,再进行++,就是21

因为先加加

p指向 aa;

先 p->x 先加加 后打印 所以是51

++p 是指 向后移动一位指针 所以是60

*p->y 的话,指向的是 20,然后又先加加 在打印,所以是21

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632