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

admin2019-01-11  37

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

结点类型的定义为:
struct 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是结点A,(*p).next是B的地址,由于成员运算符.的优先级高于解引用运算符*,所以*(*p).next是结点B,(*(*p).next).next是C的地址,*(*(*p).next).next是结点C,引用C的dt成员:(*(*(*p).next).next).dt。同理,也可以既使用指针运算符,也使用解引用运算符来访问C的结点数据成员dt,即(*(p->next->next)).dt,选项D正确;选项A中,*p表示A结点,(*p).next表示结点B的地址,由于->运算符的优先级高于*运算符,所以先执行->,即表达式(*p).next->next->dt引用了C结点的数据成员dt,然后再执行解引用运算*,这是错误的,本题答案为A。
转载请注明原文地址:https://jikaoti.com/ti/a7a0FFFM
0

相关试题推荐
最新回复(0)