为什么*start=NULL必须在大括号外声明?我们不能写在里面吗?有什么意义吗
why *start=NULL have to be declare outside braces?Can't we write inside?is there any significance
我在 link 列表中创建了一个包含两个 pat 的节点。第一部分包含数据(数字),第二部分将存储下一个节点的地址。
struct node
{
int data;
struct node *next;
}*start=NULL; //why is it to be declare outside braces?
这种语法
struct node
{
int data;
struct node *next;
} *start = NULL; //why is it to be declare outside braces?
声明一个类型为struct node *
的全局变量,通常你不需要全局变量,除了全局库初始化可能,有时你可以强制用户创建一个库工作的上下文。
我建议你将 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;
}
我在 link 列表中创建了一个包含两个 pat 的节点。第一部分包含数据(数字),第二部分将存储下一个节点的地址。
struct node
{
int data;
struct node *next;
}*start=NULL; //why is it to be declare outside braces?
这种语法
struct node
{
int data;
struct node *next;
} *start = NULL; //why is it to be declare outside braces?
声明一个类型为struct node *
的全局变量,通常你不需要全局变量,除了全局库初始化可能,有时你可以强制用户创建一个库工作的上下文。
我建议你将 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;
}