这是代码
struct stack {
int item;
struct stack *next=NULL;
};
我想让指针最初指向null,但这显示错误
错误:预期':' ,',' ,';' ,'}'或' 属性'之前' ='令牌
答案 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 };