8

我正在尝试在 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;
4

3 回答 3

18

当您list_t *next在代码中使用时,编译器不知道如何处理list_t,因为您尚未声明它。尝试这个:

typedef struct list {
    char letter;
    int number;
    struct list *next;
} list;

正如 H2CO3 在评论中指出的那样,使用_t作为标识符后缀不是一个好主意,所以不要使用list_t.

于 2013-09-03T00:33:18.603 回答
1

你为什么要让自己变得困难只是设置openGameruzeLopez作为指针而你不必使用&(这是使用链表的常用方法,只是不要忘记使用->访问成员)

试试这个代码:

#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;
}
于 2013-09-03T00:36:41.197 回答
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;
}
于 2013-09-03T00:48:17.220 回答