如何为结构成员分配NULL

时间:2017-07-15 20:47:43

标签: c

这是代码

struct stack {
    int item;
    struct stack *next=NULL;
};

我想让指针最初指向null,但这显示错误

  

错误:预期':' ,',' ,';' ,'}'或' 属性'之前' ='令牌

4 个答案:

答案 0 :(得分:3)

发布的片段没有定义对象,它定义了一个类型。

在C中,您无法在类型定义中指定成员的默认值。您可以在初始值设定项中指定成员的值:

struct stack {
    int item;
    struct stack *next;
};

struct stack my_stack = { 0, NULL };

如果省略初始化程序中的最后一个成员,它将被初始化为其类型的零,NULL指针:

struct stack my_stack = { 0 };  // my_stack.next is NULL

答案 1 :(得分:2)

创建一个该类型的变量,然后将初始化值放入大括号中。

struct stack 
{
    int item;
    struct stack *next;

} stackVar = { 0, NULL};

答案 2 :(得分:1)

您无法在结构定义中执行初始化。您可以这样初始化堆栈:

struct stack {
    int item;
    struct stack* next;
};

int main(){
    struct stack s = {0,NULL};
}

答案 3 :(得分:1)

您不能要求您的结构类型将该指针本身设置为null。每次创建类型为struct stack的对象时,您都必须明确地执行此操作,例如

struct stack my_stack = { .next = NULL };

struct stack my_stack = { 0 };

两种变体都具有相同的效果 - 它们将my_stack的所有字段设置为零。

如果在动态内存中创建struct stack个对象,则初始化语法是不可能的。您必须明确初始值分配给新创建的对象,例如

struct stack *my_stack = malloc(sizeof *my_stack);
my_stack->next = NULL;

struct stack *my_stack = malloc(sizeof *my_stack);
*my_stack = (struct stack) { 0 };
// or 
*my_stack = (struct stack) { .next = NULL };