struct st{int x,int*y;}*p; int s[]={5,6,7,8} st a[]={10,&s[0],20,&s[1]30,&[2],40,&s[
答案:2 悬赏:40 手机版
解决时间 2021-01-28 08:31
- 提问者网友:暮烟疏雨之际
- 2021-01-28 05:19
p=a;
cout<
x;
cout<<(++p)->x;
cout<<*(++p)->y;
cout<<++(*(++p)->y);}
运行的答案是10,20,7,9
解释一下,最好详细点啦我不懂
最佳答案
- 五星知识达人网友:老鼠爱大米
- 2021-01-28 05:36
我是这样理解的:
st a[] = {......}实际上是a[0] = {10,&s[0]},a[1] = {20,&s[1]}.......
p = a ;是将a的首地址赋值给p 也就是a[0]的地址,此时p指向a[0], p->x为10;
(++p)->x 是将指针p 加1之后取x的值,也就是a[1]的x值 为20;
*(++p)->y将p的值再加1,因为"->"的优先级比“*”高,所以会先执行->操作,得到*(&s[2]),取得s[2]的值为7;
最后一个基本同上,只是最后一个++操作,++8 为9;
不知道明白没有~
全部回答
你的程序有问题,数组越界了
p指针指向x中的第一个。
i=1 *(p+i)=2 s=0+2=2
i=3 *(p+i)=4 s=2+4=6
i=5 *(p+i)=6 s=6+6=12
i=7 *(p+i)=8 s=12+8=20
下面这里就出问题了
i=9 *(p+i)已经超出了数组范围 s此时得到一个乱码
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯