只能指针保存NULL值吗?

时间:2019-04-23 00:34:31

标签: c pointers null

我试图将一个结构设置为NULL,但是编译器说“无效的初始化程序”,但是当我为该结构创建一个指针时,它就可以正常工作。

struct node {
 int value;
 struct node * left;
 struct node * right;
};

struct node a = NULL; /* doesn't work */
struct node * b = NULL; /* works fine */

3 个答案:

答案 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的变量。

请参见what is a null pointer in c