我不明白为什么这部分代码无法构建和运行...我已经一遍又一遍地检查了一下,但是我找不到问题。问题出在插入第二行。
struct Node {
int data;
struct Node* next;
};
struct Node* head;
void Insert(int x){
struct Node* temp = (Node*)malloc(sizeof(struct Node));
(*temp).data = x;
(*temp).next = NULL;
}
void Print(){
struct Node* temp = head;
printf("List is :\n");
while (temp != NULL){
printf("%d",temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
head = NULL;
printf("How many numbers ?\n";)
int n,i,x;
scanf("%d", &n);
for (i=0;i<=n;i++){
printf("Enter the number \n");
scanf("%d",&x);
Insert(x);
Print();
}
return 0;
}
答案 0 :(得分:2)
->运算符最好与结构指针一起使用。
调用该方法后是否要使用此节点?如果是,请尝试返回指针。
正如@dbush所指出的,您没有使用typedef关键字。因此,您需要在演员表中将“ Node *”更改为“ struct Node *”。
答案 1 :(得分:0)
我相信您想实现以下目标:
#include <stdlib.h>
typedef struct tag_Node Node;
struct tag_Node {
int data;
Node* next;
};
void Insert(Node *to, int x) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = x;
node->next = 0;
to->next = node;
}
假设您要实现一个链表,您的Insert
方法中应该有一个附加参数,该参数将指定您要将下一个值插入到的节点。如果要使用指针,则还需要使用struct dereference运算符(->
)。
答案 2 :(得分:0)
你有
struct Node* node = (Node*)...;
C的类型系统比以前少了一点宽容:它不会将Node*
的事物提升为struct Node*
。
您需要
struct Node* node = (struct Node*)...;
或者您可以依靠void*
的升级规则,该规则在现代编译器上将升级为任何指针类型。
struct Node* node = ...; /* assuming ... returns a void* */
答案 3 :(得分:0)
您的代码似乎有两件事。
您正在本应使用(Node*)
的演员表中使用(struct Node*)
,或者甚至可以忽略它。
void Insert(int x){
struct Node* temp = (Node*)malloc(sizeof(struct Node));
(*temp).data = x;
(*temp).next = NULL;
}
此语句中的分号也有错误:
printf("How many numbers ?\n";)
替换为
printf("How many numbers ?\n");