【问题标题】:Pointing to an item not in the list in C指向不在 C 列表中的项目
【发布时间】: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


【解决方案1】:

ptr2->next->next 是一个指针,而不是一个值,它将指向NULL(如果您以这种方式构造节点)或一些垃圾。在这两种情况下,尝试取消引用都会导致未定义的行为。

【讨论】:

    【解决方案2】:

    链表的最后一个元素应该是next = NULL;这就是你如何表明它是列表的结尾。所以ptr2->next->next 会返回NULL,也就是0

    如果您随后尝试尊重这一点,例如ptr2->next->next->next,您将调用未定义的行为。在大多数系统上,这会导致应用程序崩溃,例如 Linux 上的Segmentation Violation。但是 C 规范不能保证这一点;当您尝试取消引用空指针时,任何事情都可能发生。

    【讨论】:

      【解决方案3】:

      如果您的列表是常规(单数)列表,则 ptr2->next->next 将指向 NULL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 1970-01-01
        • 2020-09-10
        相关资源
        最近更新 更多