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

admin2020-06-16  25

问题 如图所示:带有头结点的单向链表head,其三个数据结点A、B、C的连接关系见图。

  结点类型的定义为:
  struet link
  {
    double dt;
    struet 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/KYCp777K
0

随机试题
最新回复(0)