0

我很困惑!尝试创建动态链表并希望通过“malloc”函数分配标题。从我下面的代码编译器给出2个错误:

in main: [Error] node' undeclared (first use in this function) and **In functionnewnode':** [Error] `node' undeclared (第一次在这个函数中使用)

#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;
}

我很感激任何建议!谢谢你!

4

3 回答 3

2

没有类型node。您有类型struct node,这就是您需要传递给sizeof操作员的类型。

于 2012-12-22T22:41:06.660 回答
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并且更喜欢使用sizeofwith表达式,而不是类型名称。类型名称属于声明。其余代码应尽可能与类型无关。

于 2012-12-22T22:45:12.560 回答
1

正如前面的答案所提到的,您必须struct node在引用您的结构时使用。

但是,如果您只想使用声明性名称节点,您可以执行以下操作:

typedef struct _node{
    int a,b,c,d;
    struct _node *next;
}  node;

在这里你不需要struct在引用之前使用node

编辑:错误的语法

于 2012-12-22T22:46:33.653 回答