gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:00 25 4
gpt4 key购买 nike

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

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->nextstruct node * 类型,所以 n2&n2 将是 struct node **

类型

然而,这条指令仍然是错误的[并且你的程序/代码片段产生undefined behaviour ],因为 n1n2 到这里都被初始化了。 注意

  • 使用malloc() [或系列]为n1n2分配内存
  • 至少考虑将 n1n2temp 初始化为 NULL[以及所有其他局部变量,因为那很重要]。

注:相关阅读,

  • 对于 temp = n1; 中的先读后写以及使用未初始化的内存 n1->number

来自 C99 标准第 6.7.8 章第 10 段

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

关于C - 链表无法将节点**转换为节点*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28293385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com