【发布时间】:2014-07-19 07:50:15
【问题描述】:
我有一个包含以下值的列表:25、30、45、60、65、80、90
我很好奇如果我实现表达式 ptr2->next->next 会发生什么,考虑到 ptr2 指向值 80。由于这个表达式指向 90 之后的值,我应该期望收到 0还是错误代码?
【问题讨论】:
-
你为什么不自己去看看呢?
标签: c list dynamic data-structures
我有一个包含以下值的列表:25、30、45、60、65、80、90
我很好奇如果我实现表达式 ptr2->next->next 会发生什么,考虑到 ptr2 指向值 80。由于这个表达式指向 90 之后的值,我应该期望收到 0还是错误代码?
【问题讨论】:
标签: c list dynamic data-structures
ptr2->next->next 是一个指针,而不是一个值,它将指向NULL(如果您以这种方式构造节点)或一些垃圾。在这两种情况下,尝试取消引用都会导致未定义的行为。
【讨论】:
链表的最后一个元素应该是next = NULL;这就是你如何表明它是列表的结尾。所以ptr2->next->next 会返回NULL,也就是0。
如果您随后尝试尊重这一点,例如ptr2->next->next->next,您将调用未定义的行为。在大多数系统上,这会导致应用程序崩溃,例如 Linux 上的Segmentation Violation。但是 C 规范不能保证这一点;当您尝试取消引用空指针时,任何事情都可能发生。
【讨论】:
如果您的列表是常规(单数)列表,则 ptr2->next->next 将指向 NULL。
【讨论】: