【问题标题】:Linked list arrow operator链表箭头运算符
【发布时间】:2013-10-20 12:56:03
【问题描述】:

在一个基本的链表程序中,我通常是这样实现的:

struct node {
    int info;
    struct node * next;
};

int main() {
    struct node * head = malloc(sizeof(node)*3); //for 3 nodes
    head->info = 1;
    head->next->info = 2;
    head->next->next->info = 3;
    //more code
}

现在,要打印第二个节点的内容,我使用以下语句:

cout<<head->next->info;

我的问题是,可以使用以下语句代替上面的语句:

cout<<head[1]->info;

【问题讨论】:

  • this I usually implement it。你永远不应该实现它。你应该使用std::list
  • 顺便说一句,您的代码完全错误 - 您的 next 指针都未初始化。无论如何,链表不应该是连续的元素块。
  • 在您上面的实现中,您永远不会设置 head-&gt;next 或其任何子项的值。当您尝试取消引用未初始化的指针时,这很可能会导致异常。
  • 链表和数组的有趣组合。
  • 需要明确的是,@Will 所说的“异常”不是 C++ 异常,而是操作系统内存异常。

标签: c++ c pointers linked-list


【解决方案1】:

我的问题是,可以使用以下语句代替上面的语句:

cout<<head[1]->info;

实际上,在您的情况下,是的,因为您的代码不会创建链表,而更像是一个数组。一个数组,其中每个元素显然都应该有一个指向下一个元素的指针 next,但所有这些指针都未初始化。

使用std::list,直到你知道链表是​​如何工作的......然后继续使用它!

【讨论】:

  • 我会告诉他/她:了解链表是如何工作的,然后开始并继续使用std::list
【解决方案2】:

链表意味着具有在内存中不连续的元素。格式 head[1] 需要连续的元素。

无论如何,您示例中的代码并不代表链表

【讨论】:

    【解决方案3】:

    NO.head 是一个指针,head[1] 表示 *(head+1),但是在你的列表中,每个列表节点是不相邻的。通常,列表不能这样做,除非你将每个节点一个一个地放置与相邻地址

    PS。对不起我的英语不好

    【讨论】:

    • 在他的“列表”中,每个节点相邻的。
    猜你喜欢
    • 2014-01-30
    • 2021-12-05
    • 2012-04-19
    • 1970-01-01
    • 2013-07-16
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多