2011-08-31 51 views
1

我正在学习如何在C中实现链表。我了解常规链表的基本知识,如何添加值,如何打印它们等,但我一直在想 - 是吗?可以添加其他结构作为链接列表中的值?我的意思是:C中的链表中的结构

typedef struct personal_info { 
    char *name; 
    char *surname; 
    int phone_number; 
} Info; 

typedef struct llist { 
    Info *info; 
    struct llist *next; 
} List; 

而且当我这样做,我怎么访问Info结构的值是多少?

List *l; 
l = malloc(sizeof(List)); 

l->info->name = 'name'; 
l->info->surname = 'surname'; 
l->info->phone_number = 1234567890; 

该代码崩溃,所以我肯定做错了什么。你能给我一些提示如何实现这一点?

+0

你为节点分配了内存吗? (信息字段) –

+0

您需要将内存分配给您的信息*。 –

回答

3

您还需要为信息结构分配内存:

l = malloc(sizeof(List)); 
l->info = malloc(sizeof(Info)); 

l->info->name = "name"; 
l->info->surname = "surname"; 
l->info->phone_number = 1234567890; 
+0

谢谢!编译器给了我警告,虽然:'警告:赋值使得整型指针没有转换' – makos

+0

对字符串使用引号(''')。撇号**不正确**。 – Marlon

+0

啊,我的坏!另一个愚蠢的错误。凌晨2点编码不是一个好主意。:) – makos

3
List *l; 
l = malloc(sizeof(List)); 
l->info = malloc(sizeof(Info)); 

你要的malloc内存的结构以及

还要记住,如果你在实施任何函数从列表中删除节点,您需要释放该结构,然后释放该节点。