我试图将一个结构设置为NULL,但是编译器说“无效的初始化程序”,但是当我为该结构创建一个指针时,它就可以正常工作。
struct node {
int value;
struct node * left;
struct node * right;
};
struct node a = NULL; /* doesn't work */
struct node * b = NULL; /* works fine */
答案 0 :(得分:4)
结构实例本身不能为NULL,但初始化时可以为零。
struct node a = {0}; // equivalent to setting a.value=0, a.left=NULL, and a.right=NULL;
答案 1 :(得分:1)
最基本的定义NULL
被定义为0
(通常是#define NULL 0
形式的宏),并在stdlib.h
中被定义
因此NULL
(或其值)可以分配给整数值或任何等效的标量类型。
struct
是复合数据类型(如array
s),不会分配标量类型(某些类型转换的缩写)。
答案 2 :(得分:1)
NULL
表示不指向任何内容或为空的指针。结构不会指向任何地方,因此为它分配NULL毫无意义。如果要将结构的所有字段初始化为零,则与NULL无关
在C NULL
is an implementation-defined null pointer constant中,可能是
- 一个整数常量表达式,其值为``0''
- 将值0转换为void *的整数常量表达式
因此,如果var是算术类型并且NULL定义为0,则var = NULL
可以工作,但是当NULL定义为(void*)0
时可能不会。无论从语义上来讲,这并不意味着该整数是一个NULL指针,它只是一个值为0的变量。