C - 链表无法将节点**转换为节点*
C - linked list cannot convert node** to node*
我正在研究链表并准确地复制我的考官笔记,但无法让它发挥作用。错误说我
cannot convert 'node**' to node*'.
我曾尝试更改类型以使它们匹配,但这只会导致它在我 运行 之后崩溃。如果有人可以让我深入了解为什么会发生这种情况,将不胜感激。
#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->next
属于 struct node *
类型,因此 n2
。 &n2
将是 struct node **
类型
然而,这个指令仍然是错误的[并且你的程序/代码片段产生 undefined behaviour],因为 n1
和 n2
都被初始化到这一点。 注意
- 使用
malloc()
[或家庭] 为n1
、n2
分配内存
- 至少考虑将
n1
、n2
、temp
初始化为 NULL
[以及所有其他局部变量,就此而言]。
注:相关阅读,
- 对于
temp = n1;
中的先读后写和使用未初始化的内存 n1->number
来自第 6.7.8 章第 10 段,C99
标准
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.
和 , Annex J
同一个文档,来自 J.2
The value of an object with automatic storage duration is used while it is
indeterminate
主要问题在于声明:
n1->next = &n2;
这里,n->next
的类型是node*
(看struct node的定义,你会发现它有一个成员next
的类型是struct node*
),然而,您正在为其分配 &n2
,这是指向 n2
的指针。 n2
本身是指向struct node
类型的指针变量,因此,&n2
是指向struct node
类型的指针。
这会导致类型不匹配,从而导致错误。
其他问题是 n2
分配给 n1->next
时未初始化,n1
分配给 temp
时未初始化。
我正在研究链表并准确地复制我的考官笔记,但无法让它发挥作用。错误说我
cannot convert 'node**' to node*'.
我曾尝试更改类型以使它们匹配,但这只会导致它在我 运行 之后崩溃。如果有人可以让我深入了解为什么会发生这种情况,将不胜感激。
#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->next
属于 struct node *
类型,因此 n2
。 &n2
将是 struct node **
然而,这个指令仍然是错误的[并且你的程序/代码片段产生 undefined behaviour],因为 n1
和 n2
都被初始化到这一点。 注意
- 使用
malloc()
[或家庭] 为 - 至少考虑将
n1
、n2
、temp
初始化为NULL
[以及所有其他局部变量,就此而言]。
n1
、n2
分配内存
注:相关阅读,
- 对于
temp = n1;
中的先读后写和使用未初始化的内存n1->number
来自第 6.7.8 章第 10 段,C99
标准
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.
和 , Annex J
同一个文档,来自 J.2
The value of an object with automatic storage duration is used while it is indeterminate
主要问题在于声明:
n1->next = &n2;
这里,n->next
的类型是node*
(看struct node的定义,你会发现它有一个成员next
的类型是struct node*
),然而,您正在为其分配 &n2
,这是指向 n2
的指针。 n2
本身是指向struct node
类型的指针变量,因此,&n2
是指向struct node
类型的指针。
这会导致类型不匹配,从而导致错误。
其他问题是 n2
分配给 n1->next
时未初始化,n1
分配给 temp
时未初始化。