C - 将结构设置为null(赋值中的不兼容类型)

dar*_*sky 5 c null struct pointers

我有以下结构:

struct elem {
  int number;
  char character;
};

struct item {
  struct elem element;
};
Run Code Online (Sandbox Code Playgroud)

以及以下功能:

void init(struct item *wrapper) {
  assert(wrapper != NULL);
  wrapper->element = NULL;
}
Run Code Online (Sandbox Code Playgroud)

item->element = NULL产生一个incompatible types in assignment.这是为什么?不应该将结构设置为NULL可以吗?

Jar*_*Par 9

在C NULL中通常定义如下

#define NULL ((void*)0)
Run Code Online (Sandbox Code Playgroud)

这意味着它是一个指针值.在这种情况下,您尝试将指针(NULL)分配给非指针值item::element并获取相应的消息.看起来你的意图是element成为一个指针,所以尝试以下

struct item {
  struct elem* element;
};
Run Code Online (Sandbox Code Playgroud)


Dan*_*n F 5

NULL是指针值,wrapper->element不是指针,因此无法分配它NULL