C - 链表无法将节点**转换为节点*



我正在研究链表并准确复制我的考官笔记,但无法让它工作。错误说我

无法将"节点**"转换为节点*"。

我尝试更改类型以使它们匹配,但这只会导致它在运行后崩溃。如果有人能给我一些关于为什么会发生这种情况的见解,将不胜感激。

#include <stdlib.h>

struct node
{
    int number;
    struct node *next;
}*head;
main(){
    int i;
    node *n1, *n2, *temp;
    temp = n1;
    n1->number = 1;
    n1->next = &n2;
    n2->number = 2;
    n2->next = NULL;

   return 0;

}

你的问题就在这里

n1->next = &n2;

更改为

n1->next = n2;

这背后的原因是所涉及的变量的类型。 n1->nextstruct node *型,所以n2&n2将属于struct node **类型

但是,此指令仍然是错误的[并且您的程序/代码片段会产生未定义的行为],因为到目前为止,n1n2都是单元化的。注意

  • n1分配内存,n2使用malloc()[或系列]
  • 至少考虑初始化n1n2temp NULL[以及所有其他局部变量,就此而言]。

注:相关阅读材料,

  • 用于temp = n1;先读后写和使用未初始化内存n1->number

从第6.7.8章第10段开始,C99标准

如果未显式初始化具有自动存储持续时间的对象,则其值不确定。

和 ,Annex J同一文档,来自J.2

具有自动存储持续时间的对象的值在 定

主要问题在于以下语句:

n1->next = &n2;

在这里,n->next是类型node*(请参阅结构节点的定义,您会发现它有一个成员next具有类型struct node*),而您正在为其分配&n2,这是一个指向n2的指针。 n2本身是指向struct node类型的指针变量,因此,&n2是指向struct node类型的指针。

这会导致类型不匹配,从而导致错误。

其他问题是n2在分配给n1->next时没有初始化,n1在分配给temp时没有初始化。

相关内容

  • 没有找到相关文章

最新更新