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
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
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,我不知道我需要这样做,但它工作得非常好。我也同意调试器绝对是我需要学习使用的东西。@讽刺的是,不客气。我已经编辑了我的答案来补充一点解释:-顺便说一下,你可以考虑一个答案。