早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c语言新手关于结构体的#includeStructst{intx;Int*y;}*p;Intdt[4]={10,20,30,40};Structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};Main(){P=aa;Printf("%d\n",++p->x);Printff("%d\n",(++p)->x);Printf("%d\n",++(*p->y));}这里第三

题目详情
c 语言新手 关于 结构体的
#include
Struct st
{ int x;
Int *y;
} *p;
Int dt[4]={10,20,30,40};
Struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};
Main()
{
P=aa;
Printf("%d\n",++p->x);
Printff("%d\n",(++p)->x);
Printf("%d\n",++(*p->y));
}
这里第三个printf的答案为什么是 21 而不是11
Printf("%d\n",++(*p->y))
这个应该是先指向dt[0],再求值,再加一的吧.
▼优质解答
答案和解析
在执行printf("%d\n",(++p)->x);时p已经自加1了,指向的地址是第二组数据.
所以在执行printf("%d\n",++(*p->y));时*p->y的值是20,再++就是21..
如果去掉printf("%d\n",(++p)->x);后printf("%d\n",++(*p->y));的结果才是11.