gpt4 book ai didi

c - 在 C 中实现链表会发出警告,并且运行代码不会显示任何内容

转载 作者:行者123 更新时间:2023-11-30 19:22:17 25 4
gpt4 key购买 nike

我只是尝试使用 GCC 编译器在 C 中实现链表,但收到了这些警告。我收到的大多数警告都是“来自不兼容指针类型的赋值”:

linklist.c: In function 'insertatbegin':
linklist.c:20:8: warning: assignment from incompatible pointer type [enabled by default]
linklist.c:24:18: warning: assignment from incompatible pointer type [enabled by default]
linklist.c:25:8: warning: assignment from incompatible pointer type [enabled by default]
linklist.c: In function 'display':
linklist.c:37:7: warning: assignment from incompatible pointer type [enabled by default]

运行代码后我没有得到任何输出。

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
typedef struct
{
int data;
struct node *next;
}node;
void insertatbegin(node **head,int item)
{
node *nextnode=(node *)malloc(sizeof(node));
if(nextnode!=NULL)
{
nextnode->data=item;
nextnode->next=head; //warning line 24
head=nextnode; // warning line 25
}
else
printf("memory not allocated\n");

}

void display(node * head)
{
node *temp=head;
while(temp!=NULL)
{
printf(" %d ",temp->data);
temp=temp->next; //warning line 37
}
}

void main()
{
node *head=NULL;

insertatbegin(&head,20);
insertatbegin(&head,30);
insertatbegin(&head,40);
display(head);
getch();
}

这似乎是正确的,但我没有得到任何输出。

最佳答案

您显示typedef :

typedef struct 
{
int data;
struct node *next;
}node;

在这里,您有一个未标记的结构类型,其 typedef姓名node ,以及一个不相关的标记结构类型 struct node (其详细信息未在您显示的代码中定义)。

您需要:

typedef struct node
{
int data;
struct node *next;
} node;

现在nodestruct node指同一类型。请记住,typedef引入另一种类型的别名;它没有引入独特的类型。

由于您在代码中标记为 24 的行是所示代码中的第 16 行,因此很难知道第 20 行到底在哪里。您在第 20 行收到警告的原因并不明显:

linklist.c:20:8: warning: assignment from incompatible pointer type [enabled by default]
linklist.c:24:18: warning: assignment from incompatible pointer type [enabled by default]
linklist.c:25:8: warning: assignment from incompatible pointer type [enabled by default]

第 24 行和第 25 行的警告是因为您:

nextnode->next=head;   //warning line 24
head=nextnode; // warning line 25

你需要:

nextnode->next = *head;   //warning line 24
*head = nextnode; // warning line 25

这是因为headnode **然而nextnodenextnode->next都是node * (具有固定结构定义)。第 37 行的警告是由于 struct nodenode困惑;如果您刚刚修复了如上所示的分配,您还会收到第 24 行的警告。

此外,正如评论中所述,main() 的返回类型应该是int ,不是void (因为这就是 C 标准所说的 main() 的返回类型)。如果您使用的是 C89 编译器(#include <conio.h> 建议您使用),则应该从 main() 显式返回状态。功能。 C99 及更高版本允许您省略该返回; IMNSHO,最好明确说明并从声明为返回值的每个函数返回一个值。

另请注意,您应该在某处输出换行符;在您输出换行符之前,不能保证会显示任何内容。

关于c - 在 C 中实现链表会发出警告,并且运行代码不会显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17135761/

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