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

时间:2015-02-26 15:57:32

标签: c data-structures linked-list

我在链接列表中创建了一个包含两个pats的节点。第一部分包含数据(数字),第二部分将存储下一个节点的地址。

struct node  
    {  
       int data;  
       struct node *next;  
    }*start=NULL; //why is it to be declare outside braces?

1 个答案:

答案 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;
}