我尝试在C中构建一个基本的链表。我似乎得到了这段代码的错误:
typedef struct
{
char letter;
int number;
list_t *next;
}list_t;
char letters[] = {"ABCDEFGH"};
list_t openGame, ruyLopez;
openGame.letter = letters[4];
openGame.number = 4;
openGame.next = &ruyLopez;
ruyLopez.letter = letters[5];
ruyLopez.number = 4;
ruyLopez.next = NULL;
它不接受我在结构中的定义:
list_t *next;
出于同样的原因,它不会接受:
openGame.next = &ruyLopez;
答案 0 :(得分:9)
当您在代码中使用list_t *next
时,编译器不知道如何处理list_t
,因为您还没有声明它。试试这个:
typedef struct list {
char letter;
int number;
struct list *next;
} list;
正如H2CO3在评论中指出的那样,使用_t
作为标识符后缀并不是一个好主意,所以不要使用list_t
。
答案 1 :(得分:0)
为什么你要自己设置openGame
和ruzeLopez
作为指针并且你不必使用&
(这是使用链接列表的常用方法,不要忘记使用->
来访问成员)
尝试使用此代码:
#include <stdlib.h>
#include <malloc.h>
typedef struct list
{
char letter;
int number;
struct list *next;
}list;
main(void)
{
char letters[] = "ABCDEFGH"; //what were the braces for ?
list *openGame, *ruyLopez;
openGame = ruyLopez = NULL;
openGame = malloc(sizeof(list));
ruyLopez = malloc(sizeof(list));
openGame->letter = letters[4];
openGame->number = 4;
openGame->next = ruyLopez;
ruyLopez->letter = letters[5];
ruyLopez->number = 5;
ruyLopez->next = NULL;
}
答案 2 :(得分:0)
这是一个工作示例,没有使用malloc创建结构时内存泄漏的风险。
#include <stdlib.h>
typedef struct _list
{
char letter;
int number;
struct _list *next;
} list_type;
int main(void)
{
char letters[] = "ABCDEFGH"; //what were the braces for ?
list_type openGame, ruyLopez;
openGame.letter = letters[4];
openGame.number = 4;
openGame.next = &ruyLopez;
ruyLopez.letter = letters[5];
ruyLopez.number = 5;
ruyLopez.next = NULL;
}