如图所示:带有头结点的单向链表head,其三个数据结点A、B、C的连接关系见图。    结点类型的定义为:  struct link  {   double dt;   struct link *next;  };  若指针p指向A结点,在不改

admin2022-04-01  70

问题 如图所示:带有头结点的单向链表head,其三个数据结点A、B、C的连接关系见图。
 
 结点类型的定义为:
 struct link
 {
     double dt;
     struct link *next;
 };
 若指针p指向A结点,在不改变p指向的前提下,以下选项中不能访问C结点数据成员dt的表达式是(          )。

选项 A、*(*P).next->next->dt
B、p->next->next->dt
C、(*(*(*p).next).next).dt
D、(*(P->next->next)).dt

答案A

解析 link结构体中的next是链表中下一个结点的地址,由于p当前指向结点A,所以p->next是B的地址,p->next->next是C的地址,访问C的结点数据成员dt可以使用C的地址访问,即:p->next->next->dt,选项B正确;或者使用解引用“*”运算符,(*p)表示A结点,(*p).next表示B的地址,*((*p).next)表示结点B,(*((*p).next)).next表示C的地址,(*(*((*p).next)))表示结点C,所以C的数据成员dt可以表示为:(*(*((*p).next))).dt,选项C正确;同理,也可以既使用指针运算符,也使用解引用运算符来访问C的结点数据成员dt,即(*(p->next->next)).dt,选项D正确;选项A中,*p表示A结点,(*p).next表示结点B的地址,由于->运算符的优先级高于*运算符,所以先执行->,即表达式(*p).next->next->dt引用了C结点的数据成员dt,然后再执行解引用运算*,这是错误的,本题答案为A。
转载请注明原文地址:https://kaotiyun.com/show/V2kp777K
0

随机试题
最新回复(0)