Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-链表无法将节点**转换为节点*_C_Pointers_Linked List - Fatal编程技术网

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

C-链表无法将节点**转换为节点*,c,pointers,linked-list,C,Pointers,Linked List,我当时正在研究链表,精确地抄写考官的笔记,但没能让它起作用。错误表明我 无法将“节点**”转换为节点*” 我尝试过改变类型,使它们匹配,但这只会导致它崩溃,一旦我运行它。如果有人能告诉我为什么会发生这种情况,我将不胜感激 #include <stdlib.h> struct node { int number; struct node *next; }*head; main(){ int i; node *n1, *n2, *temp;

我当时正在研究链表,精确地抄写考官的笔记,但没能让它起作用。错误表明我

无法将“节点**”转换为节点*”

我尝试过改变类型,使它们匹配,但这只会导致它崩溃,一旦我运行它。如果有人能告诉我为什么会发生这种情况,我将不胜感激

#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;
#包括
结构节点
{
整数;
结构节点*下一步;
}*头部;
main(){
int i;
节点*n1,*n2,*temp;
温度=n1;
n1->number=1;
n1->next=&n2;
n2->number=2;
n2->next=NULL;
返回0;
}你的问题就在这里

n1->next = &n2;
改为

n1->next = n2;
这背后的原因是,所涉及的变量类型
n1->next
struct node*
类型,因此
n2
也是<代码>&n2将属于
结构节点**

但是,由于到目前为止,
n1
n2
都是单元化的,因此该指令仍然是错误的[并且您的程序/代码段会产生]。注

  • 使用
    malloc()
    [或系列]为
    n1
    n2
    分配内存
  • 至少考虑初始化<代码> N1 <代码>,<代码> N2,<代码> TEMP > <代码> NUL>代码>以及所有其他局部变量,也就是说,
注:相关阅读资料

  • 用于写入前读取
    temp=n1和用于使用未序列化内存
    n1->number
根据第6.7.8章第10段,
C99
标准

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

以及同一文件的附件J
,摘自
J.2

具有自动存储持续时间的对象的值将在其运行时使用 不确定

你的问题就在这里

n1->next = &n2;
改为

n1->next = n2;
这背后的原因是,所涉及的变量类型
n1->next
struct node*
类型,因此
n2
也是<代码>&n2将属于
结构节点**

但是,由于到目前为止,
n1
n2
都是单元化的,因此该指令仍然是错误的[并且您的程序/代码段会产生]。注

  • 使用
    malloc()
    [或系列]为
    n1
    n2
    分配内存
  • 至少考虑初始化<代码> N1 <代码>,<代码> N2,<代码> TEMP > <代码> NUL>代码>以及所有其他局部变量,也就是说,
注:相关阅读资料

  • 用于写入前读取
    temp=n1和用于使用未序列化内存
    n1->number
根据第6.7.8章第10段,
C99
标准

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

以及同一文件的附件J
,摘自
J.2

具有自动存储持续时间的对象的值将在其运行时使用 不确定


主要问题在于这一说法:

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

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


其他问题可能是将
n2
分配给
n1->next
时未初始化,
n1
分配给
temp
时未初始化。主要问题在于语句:

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

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


其他问题可能是,
n2
在分配给
n1->next
时未初始化,
n1
在分配给
temp
时未初始化,这样做会运行程序,但会立即崩溃。@Ironism在做什么?如果需要运行整个代码,至少需要为
n1
n2
分配内存。
temp
在这里有什么用?@讽刺的是,我还建议,学习使用调试器,比如
gdb
。它在调试过程中帮助很大。谢谢。我们还没有真正进入malloc/callocsoi,我不知道我需要这样做,但它工作得非常好。我也同意调试器绝对是我需要学习使用的东西。@讽刺的是,不客气。我已经编辑了我的答案来补充一点解释:-顺便说一句,你可以考虑一个帮助你的答案。这样做的程序运行,但它立即崩溃。@讽刺主义做什么?如果需要运行整个代码,至少需要为
n1
n2
分配内存。
temp
在这里有什么用?@讽刺的是,我还建议,学习使用调试器,比如
gdb
。它在调试过程中帮助很大。谢谢。我们还没有真正进入malloc/callocsoi,我不知道我需要这样做,但它工作得非常好。我也同意调试器绝对是我需要学习使用的东西。@讽刺的是,不客气。我已经编辑了我的答案来补充一点解释:-顺便说一下,你可以考虑一个答案。