gpt4 book ai didi

c - 为什么*start=NULL必须在大括号外声明?我们不能写在里面吗?有什么意义吗

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:37 25 4
gpt4 key购买 nike

我在链接列表中创建了一个包含两个 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 *类型的全局变量,通常你不需要全局变量,除了全局库初始化可能,有时你可以强制用户为库创建一个上下文去工作。

我建议你将 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;
}

关于c - 为什么*start=NULL必须在大括号外声明?我们不能写在里面吗?有什么意义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com