我一直在训练链表,并编写了以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *ptr;
struct node
{
int element;
ptr next;
};
typedef ptr list;
typedef ptr position;
int main()
{
struct node nod1;
struct node nod2;
struct node nod3;
nod1.element=87;
nod2.element=87;
nod3.element=98;
nod1.next=&nod2;
nod2.next=&nod3;
nod3.next=NULL;
list L;
L.next=&nod1;
printlist(L);
return 0;
}
void printlist(list l)
{
position p;
p=(l)-> next;
while(p!=NULL)
{
printf("%d",(p)-> element);
p=p->next;
}
}
我得到的错误是在此语句中:
L.next=&nod1;
我不明白为什么,因为我已经list
在代码开头定义了“ ”,并且类型“ ptr
”也已经定义:
typedef ptr list;
根据定义,您必须进行更改
L.next=&nod1;
到
L->next=&nod1;
因为在您的代码中,L
类型是struct node *
。
为避免混淆,请勿使用typedef
指针。有时,它们变得非常棘手。
接下来,正如@ WhozCraig先生在下面的评论中指出的那样,一旦解决了此问题,就必须L
在使用之前将内存分配给该内存(或任何指针)。否则,使用未初始化的指针将调用未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句