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

2024-11-05 05:50:54
推荐回答(2个)
回答1:

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

回答2:

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++就是数值递加,而(++指针)是相当于数组元素的位置移动