本地与全球声明
declaration in local vs global
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* link;
};
void insert_last(struct node **head, int value)
{
struct node* new = malloc(sizeof(struct node));
new->data = value;
if( !*head )
{
new->link = NULL;
*head = new;
}
else
{
struct node* last = *head;
while(last->link)
{
last = last->link;
}
new->link = NULL;
last->link = new;
}
}
struct node *head;
int main()
{
insert_last( & head, 5);
insert_last( & head, 10);
insert_last( & head, 15);
printf("%d ", head->data);
printf("%d ", head->link->data);
printf("%d ", head->link->link->data);
}
如果我在 main 中声明 struct node *head 则程序无法正常工作。
是什么原因 ?
> 如果我在全球范围内声明其工作,否则不工作。
> 我重复这个问题是因为 Whosebug 要求添加更多详细信息(> 如果我在 main 的一侧声明 struct node *head 则程序无法正常工作。
是什么原因 ?
> 如果我在全球范围内声明其工作,否则不工作。)
有一个初始化错误:在 insert_last() 中,变量 head 在没有被显式初始化的情况下被测试。如果 head 被声明为全局的,它位于一个全局部分中,该部分很可能被加载程序初始化为 0(当程序启动时);如果 head 在函数 main() 中声明,那么它位于函数的堆栈中并且不设置为 0.
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* link;
};
void insert_last(struct node **head, int value)
{
struct node* new = malloc(sizeof(struct node));
new->data = value;
if( !*head )
{
new->link = NULL;
*head = new;
}
else
{
struct node* last = *head;
while(last->link)
{
last = last->link;
}
new->link = NULL;
last->link = new;
}
}
struct node *head;
int main()
{
insert_last( & head, 5);
insert_last( & head, 10);
insert_last( & head, 15);
printf("%d ", head->data);
printf("%d ", head->link->data);
printf("%d ", head->link->link->data);
}
如果我在 main 中声明 struct node *head 则程序无法正常工作。
是什么原因 ?
> 如果我在全球范围内声明其工作,否则不工作。
> 我重复这个问题是因为 Whosebug 要求添加更多详细信息(> 如果我在 main 的一侧声明 struct node *head 则程序无法正常工作。
是什么原因 ?
> 如果我在全球范围内声明其工作,否则不工作。)
有一个初始化错误:在 insert_last() 中,变量 head 在没有被显式初始化的情况下被测试。如果 head 被声明为全局的,它位于一个全局部分中,该部分很可能被加载程序初始化为 0(当程序启动时);如果 head 在函数 main() 中声明,那么它位于函数的堆栈中并且不设置为 0.