我很困惑!尝试创建动态链表并希望通过“malloc”函数指定标题。从我的代码下面编译器给出了2个错误:
在main中: [错误] node' undeclared (first use in this function) and
**In function
newnode':** [错误]`node'未声明(首次在此函数中使用)
#include <stdio.h>
#include <stdlib.h>
struct node{
int a,b,c,d;
struct node *next;
};
struct node * newnode(int, int, int, int);
int main(){
struct node *header;
header=(struct node *)malloc(sizeof(node));
int a,b,c,d;
a=11;
b=2;
c=4;
d=5;
header->next=newnode(a,b,c,d);
printf("\n\n");
system("PAUSE");
return 0;
}
struct node * newnode(int aa, int bb, int cc, int dd)
{
struct node *temp;
temp=(struct node*)malloc(sizeof(node));
temp->a =aa;
temp->b =bb;
temp->c =cc;
temp->d =dd;
temp->next=NULL;
return temp;
}
我感谢任何建议!谢谢!
答案 0 :(得分:2)
没有类型node
。您有struct node
类型,这是您需要传递给sizeof
运算符的类型。
答案 1 :(得分:1)
首先,正如@icepack已经注意到的那样,类型名为struct node
,而不是node
。因此,sizeof(node)
无法编译。您在代码中的所有地方都仔细使用struct node
,但sizeof
这两个地点除外。
其次,考虑使用
T *p = malloc(n * sizeof *p); /* to allocate an array of n elements */
用于内存分配的习惯用法。例如。在你的情况下
temp = malloc(sizeof *temp);
即。不要转换malloc
的结果,而是更喜欢将sizeof
与表达式一起使用,而不是使用类型名称。类型名称属于声明。其余代码应尽可能与类型无关。
答案 2 :(得分:1)
如前面的答案所述,您必须在引用结构时使用struct node
。
但是,如果您只想使用声明性名称节点,则可以执行以下操作:
typedef struct _node{
int a,b,c,d;
struct _node *next;
} node;
在您引用struct
node
编辑:错误的语法