c编程,链表错误

  • 本文关键字:错误 链表 编程 c
  • 更新时间 :
  • 英文 :


当我试图编译以下代码时,我得到了错误

test.c: In function 'main':
test.c:16: error: incompatible types in assignment

代码是..

#include <stdio.h>
#include <ctype.h>
#include <string.h>
typedef struct {
char name[20];
struct planet* next;
} planet;

int main(int argc, char *argv[])
{
planet *p, *start, *first, *second, *third;
strcpy(start->name, "Suthan");
start->next = *first;
}

1)为指针分配一些内存。

planet *start, *first; these are uninitialized pointers.
start->next // that's dereferencing an uninitialized pointer.

2) 您正在将start->next(指向行星的指针)设置为延迟指针first。这就是你错误的根源。

start->next = *first;  // should be  = first;

3) 移动typedef名称以消除您看到的警告。

typedef struct planet{
char name[20];
struct planet* next;
};
由于正在尝试将planet(*first)的实例分配给指向planet(start->next)的指针。

试试这个:

start->next = first;

然而,我也想知道你对planet的申报。这有帮助吗?

typedef struct _planet {
char name[20];
struct _planet* next;
} planet;

我认为你的结构做得不对

typedef struct _planet {
char name[20];
struct _planet* next;
} planet;

应为:

typedef struct planet {
char name[20];
struct planet* next;
}

我记得我被自引用结构的这一方面绊倒了。

typedef struct {
char name[20];
struct planet* next; /* <-- the trouble is here */
} planet;

在结构定义的中间,也就是typedef定义的中心,编译器不知道struct planet是什么样子,但很乐意让你定义一个指向它的指针。在你取消引用*next之前,编译器并不需要知道它是什么样子。当你到达main()的主体时,你仍然没有告诉编译器什么是struct planet,只有一个名为planet的类型,它恰好是一个未命名的结构。

考虑以下方法。

struct foo {
int bar;
};
typedef struct foo foo_type;
struct foo bar;
foo_type baz;

这表明结构体的名称是foo,定义的类型的名称为foo_type。我可以这样组合它们:

typedef struct foo {
int bar;
} foo_type;

您可以通过在内联结构定义中添加一个伪名称来解决编译器警告。

typedef struct planet_struct {
char name[20];
struct planet_struct* next;
} planet;

你还需要解决其他人指出的内存分配问题,但这回答了你实际上没有问的问题。

最新更新