点作为函数参数C

点作为函数参数C,c,list,linked-list,C,List,Linked List,这可能是一个简单的解决方案,我不太熟悉C,只是尝试将java数据结构分配移植到C 这就是我得到的错误: test.c:4:错误:在“*”标记之前应为“') #include <stdio.h> #include <stdlib.h> void to_screen(NODE *cur){ while(cur->next != NULL){ printf("%d\n", cur->data); cur = cur->

这可能是一个简单的解决方案,我不太熟悉C,只是尝试将java数据结构分配移植到C

这就是我得到的错误:

test.c:4:错误:在“*”标记之前应为“')

#include <stdio.h>
#include <stdlib.h>

void to_screen(NODE *cur){
    while(cur->next != NULL){
        printf("%d\n", cur->data);
        cur = cur->next;
    }
}

void add_first(NODE *head, int data){
    NODE *cur;
    int i;

    for(i=0; i<10; i++){
        cur = malloc(sizeof(NODE));
        cur->data = data;
        cur->next = (*head).next;

        head->next = cur;
    }
}

typedef struct node{
    int data;
    struct element *next;
}NODE;


int main(){
    int i;
    NODE *head;

    for(i=0; i<10; i++){
        add_first(head, i);
    }

    to_screen(head);
}
test.c:11:错误:在“*”标记之前应为“')

#include <stdio.h>
#include <stdlib.h>

void to_screen(NODE *cur){
    while(cur->next != NULL){
        printf("%d\n", cur->data);
        cur = cur->next;
    }
}

void add_first(NODE *head, int data){
    NODE *cur;
    int i;

    for(i=0; i<10; i++){
        cur = malloc(sizeof(NODE));
        cur->data = data;
        cur->next = (*head).next;

        head->next = cur;
    }
}

typedef struct node{
    int data;
    struct element *next;
}NODE;


int main(){
    int i;
    NODE *head;

    for(i=0; i<10; i++){
        add_first(head, i);
    }

    to_screen(head);
}
#包括
#包括
无效到_屏幕(节点*cur){
while(cur->next!=NULL){
printf(“%d\n”,cur->data);
cur=cur->next;
}
}
void add_first(节点*头部,整数数据){
节点*cur;
int i;
对于(i=0;idata=data;
当前->下一步=(*头)。下一步;
head->next=cur;
}
}
类型定义结构节点{
int数据;
结构元素*next;
}节点;
int main(){
int i;
节点*头;

对于(i=0;i您需要在使用节点之前定义它。将定义移到顶部。

您需要在使用节点之前定义它。将定义移到顶部。

您需要将结构的定义移到to_屏幕函数上方。编译器说它不知道节点是什么。

您需要移动y的定义我们的结构位于to_screen函数上方。编译器说它不知道节点是什么。

您需要将此块移到顶部,其他两个答案建议您这样做

typedef struct node{
    int data;
    struct element *next;
}NODE;

你可能会问原因。原因是C语言规范不同于Java。因此,它是从上到下编译的。因此,如果它看到未定义的内容,它会在该点上查找定义,如果它看到定义,它就会得到定义。它不会在代码行下方查找。你需要将此块移到下一行如其他两个答案所推荐,排在前面

typedef struct node{
    int data;
    struct element *next;
}NODE;

你可能会问原因。原因是C语言规范不像Java。所以它是从上到下编译的。因此,如果它看到未定义的东西,它会在该点上查找定义,如果它看到定义,它就会得到定义。除了将typedef移到t之外,它不会在代码行下方查看是的,这解决了我问题的最后一部分,谢谢这段代码中还有另一个问题。
main函数中的
node*head
可能指向任何地方,它也是
add_first()
的一个参数。因为
add_first()
读取head by
head->next
,这将导致分段错误。除了将typedef移到顶部之外,它不应该读取:
typedef结构节点{int data;struct node*next;}NODE;
?是的,这解决了我问题的最后一部分,谢谢这段代码中还有另一个问题。
main函数中的
NODE*head
可能指向任何地方,它也是
add\u first()
的一个参数。因为
add\u first()
读取head by
head->next
,它会导致分段错误。这不是关于编译器的智能或愚蠢。这是关于单通道或多通道。这是关于语言规范,而不是编译器。Ops,好吧。我不知道。我总是责怪编译器。这不是关于编译器的智能或愚蠢。这是关于b是单通还是多通。这是语言规范的问题,不是编译器的问题。Ops,好吧。我不知道。我总是责怪编译器