我在链接列表中创建了一个包含两个pats的节点。第一部分包含数据(数字),第二部分将存储下一个节点的地址。
struct node
{
int data;
struct node *next;
}*start=NULL; //why is it to be declare outside braces?
答案 0 :(得分:3)
此语法
struct node
{
int data;
struct node *next;
} *start = NULL; //why is it to be declare outside braces?
声明一个类型为struct node *
的全局变量,通常你不需要全局变量,除了全局库初始化之外,有时你可以强制用户创建一个上下文来使库工作。
我建议你保持de struct
定义和声明分开,即使你想声明一个globla变量这样做
struct node
{
int data;
struct node *next;
};
struct node *start;
无需将其初始化为NULL
,因为这会自动发生在全局变量中。
如您所见,您需要在括号外添加该部分,因为它是一个变量声明,更简洁的方法是将struct
定义与变量声明分开。
我看到许多新程序员使用全局变量来简单地使用不同函数中的值,这绝对是不必要的,你可以这样做
void functionTakingPointerToStruct(struct node *instance)
{
/* handle instance here */
}
int main()
{
struct node instance;
functionTakingPointerToStruct(&instance);
return 0;
}
这样你甚至不需要动态分配和相关的所有困难,但如果你想
你也可以使用它int main()
{
struct node *instance;
instance = malloc(sizeof(*instance));
if (instance == NULL)
{
perror("malloc()");
reutrn -1;
}
functionTakingPointerToStruct(instance);
return 0;
}