C语言问题!这道题完全不懂,->是什么意思,为什么选A,还有为什么D答案是20?谢谢

 我来答
AlanZhansky
2015-09-11
知道答主
回答量:13
采纳率:0%
帮助的人:11.2万
展开全部
1首先定义了结构体st ,和结构体指针变量pt和结构体数组c[2]。并将数组初始化c[2] = {10,a,20,b};
你可以看成c[0] = {10,a};c[1] = {20,b};也就是c[0].x = 10; c[0].y = a;c[1] . x = 20; c[1].y = b;
pt=c,及时将c数组的首地址(c[0]的地址)赋给pt. ++pt ->x 相当于++(pt ->x)=++(c[0].x),所以A等于11.(pt++)->x,其中(pt++)= c[1]的首地址所以(pt++)->x =c[1].x
追问
谢谢
huanghaohongso
2015-09-11 · TA获得超过2万个赞
知道小有建树答主
回答量:968
采纳率:50%
帮助的人:347万
展开全部
struct st{
int x;
int *y;
} *pt;
int a[] = {1,2},b[] = {3,4};
struct st c[2] = {10,a,20,b};
/*
{
10,
pArray_a:{1,2}
20,
pArray_b:{3,4}
}
*/
pt = c;
A) + + pt -> x ++(pt->x) == ++((*pt).x) == ++(c[0].x), so is 10+1=11
B) pt -> x so is 10
C) *pt -> y *(pt->y) ==*((*pt).y) ,since (pt->y) point to a[0], so *(pt->y) is 1
D) (pt + +) -> x (pt++), since pt point to c[0]={10,a}, (pt++) point to c[1]={20,b}, so (pt++)->x == c[1].x, is 20
======================================
注意点,
(1)
指针的++或--操作是针对给类型的大小pt++,实际指针数值移动sizeof(struct st)
就如同若是int指针,pint++,实际移动的是sizeof(int)
而int++,就是int变量数值加1
(2)
a,b为a[],b[]数组的起始地址
实际a=&a[0],b=&b[0]
(3)最后要注意的就是(++指针)还是(++(*指针)),后者根据*对指针解封装后的数据类型而定,如(*pint)解封后就是int,对int++就是数值递加,而(++指针)是相当于数组元素的位置移动
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式