为什么*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;
}