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

admin2022-10-24  68

问题 如图所示:带有头结点的单向链表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->nexi_>next->dt,所以选项B正确。或者使用解引用“*”运算符,(*p)表示节点A,(*p).next表示节点B的地址,*((*p).next)表示节点B,(*((*p).next)).next表示节点c的地址,*((*((*p).next)).next)表示节点C,所以节点c的数据成员dt可以表示为(*((*,(*p).next).next)).dt,因为“.”运算符的优先级高于“*”运算符,所以也可以写为(*(*(*p).next).next).dt,所以选项C正确。同理,也可以既使用指针运算符.又使用解引用运算符来访问节点c的数据成员dt,即(*(p->next->next)).dt,所以选项D正确。选项A中,*p表示节点A,(。p).nexf表示节点B的地址,由于“->”运算符的优先级高于“*”运算符,因此先执行“->”,即表达式(*p).next->nex->dt引用了节点c的数据成员dt,然后执行解引用运算“*”,这是错误的。故本题答案为A选项。
转载请注明原文地址:https://jikaoti.com/ti/Zad0FFFM
0

最新回复(0)