我从指针练习视频中编写了这C
代码,我遇到的问题是,在将 head 作为局部主变量集成到main()
之前声明的全局变量上后,程序不再进入 for 循环,我似乎无法弄清楚为什么。 有趣的是我删除了head=NULL
,循环似乎正在执行。有谁知道将 NULL 分配给头部的问题在哪里?
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
struct Node{
int data;
struct Node* next;
};
struct Node* Insert(struct Node* head, int data){
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
(*new_node).data = data;
(*new_node).next = head;
head = new_node;
}
void Print(struct Node* head){
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp = head;
while(temp!=NULL){
printf("%d", (*temp).data);
temp = (*temp).next;
}
printf("n");
}
int main(){
struct Node* head = NULL;
int n, i, x;
printf("%s", "How large do you want your array to be?n");
scanf("%d", &n);
for(i; i<n; i++){
printf("Enter a number:n");
scanf("%d",&x);
head = Insert(head, x);
Print(head);
}
return 0;
}
我可以看到你的代码有几个问题:
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp = head;
应该是
struct Node* temp = head;
然后我们有
for(i; i<n; i++)
那应该是
for(i=0; i<n; i++)
这可能是问题的原因,因为这是未定义的行为。
另一件可能引起麻烦的事情是,您不会return head
作为Insert
中的最终陈述。
其中两个可以通过打开编译器警告轻松发现。
另外,不要施放马洛克