链表编译错误
Linked list compiler error
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int data;
struct Node* next;
}Node;
Node* head;
void AddEntry(){
int x;
Node* temp;
temp = head;
while(temp != NULL){
temp = temp->next;
}
Node* temp1 = (Node*)malloc(sizeof(Node));
temp->next = temp1;
printf("What is the value for this entry?\n");
scanf("%d",&x);
temp1->data = x;
temp1->next = NULL;
}
void PrintList(){
Node* temp;
}
int main(void){
}
当我编译此代码时出现编译器错误:
pointertest.c: In function ‘AddEntry’:
pointertest.c:16:8: warning: assignment from incompatible pointer type [enabled by default]
temp = temp->next;
^
pointertest.c:19:13: warning: assignment from incompatible pointer type [enabled by default]
temp->next = temp1;
我不明白这是为什么。我在我的教科书和其他地方看到过这样做。我以为它是将指针 temp 分配给保存在 temp next 中的地址。
感谢您的帮助
你的结构定义是假的。试试这个:
typedef struct tagNode {
int data;
struct tagNode *next;
} Node;
在您的代码中,没有 struct Node
这样的东西,只有一个带有 "alias" (typedef
) 的未命名结构称为 Node
。
通过这样定义,您可以通过以下任一方式声明此类型的变量:
struct tagNode foo;
或者:
Node foo;
但是当我 typedef
这样 struct
时,我避免使用标签以避免混淆。
有人在评论中提出,我选择使用 struct tagNode
而不是 struct Node
的原因可能令人困惑。两者都同样有效,但我个人的偏好是使用不同的名称以避免以后混淆。我发现如果我刚刚使用 struct Node
.
,那么从 Node *foo
中直观地消除歧义会更容易
您的代码中没有struct Node
。
这是一个typedef
匿名结构
typedef struct {
int data;
struct Node* next;
} Node;
在c中是有效的,但是到这里根本没有声明struct Node
,你需要
typedef struct Node {
int data;
struct Node* next;
} Node;
如果你无论如何都要typedef
,你也可以这样做
typedef struct Node Node;
struct Node
{
int data;
Node *next;
};
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int data;
struct Node* next;
}Node;
Node* head;
void AddEntry(){
int x;
Node* temp;
temp = head;
while(temp != NULL){
temp = temp->next;
}
Node* temp1 = (Node*)malloc(sizeof(Node));
temp->next = temp1;
printf("What is the value for this entry?\n");
scanf("%d",&x);
temp1->data = x;
temp1->next = NULL;
}
void PrintList(){
Node* temp;
}
int main(void){
}
当我编译此代码时出现编译器错误:
pointertest.c: In function ‘AddEntry’:
pointertest.c:16:8: warning: assignment from incompatible pointer type [enabled by default]
temp = temp->next;
^
pointertest.c:19:13: warning: assignment from incompatible pointer type [enabled by default]
temp->next = temp1;
我不明白这是为什么。我在我的教科书和其他地方看到过这样做。我以为它是将指针 temp 分配给保存在 temp next 中的地址。
感谢您的帮助
你的结构定义是假的。试试这个:
typedef struct tagNode {
int data;
struct tagNode *next;
} Node;
在您的代码中,没有 struct Node
这样的东西,只有一个带有 "alias" (typedef
) 的未命名结构称为 Node
。
通过这样定义,您可以通过以下任一方式声明此类型的变量:
struct tagNode foo;
或者:
Node foo;
但是当我 typedef
这样 struct
时,我避免使用标签以避免混淆。
有人在评论中提出,我选择使用 struct tagNode
而不是 struct Node
的原因可能令人困惑。两者都同样有效,但我个人的偏好是使用不同的名称以避免以后混淆。我发现如果我刚刚使用 struct Node
.
Node *foo
中直观地消除歧义会更容易
您的代码中没有struct Node
。
这是一个typedef
匿名结构
typedef struct {
int data;
struct Node* next;
} Node;
在c中是有效的,但是到这里根本没有声明struct Node
,你需要
typedef struct Node {
int data;
struct Node* next;
} Node;
如果你无论如何都要typedef
,你也可以这样做
typedef struct Node Node;
struct Node
{
int data;
Node *next;
};