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

时间:2012-07-10 15:08:37

标签: c pointers struct null

我有以下结构:

struct elem {
  int number;
  char character;
};

struct item {
  struct elem element;
};

以及以下功能:

void init(struct item *wrapper) {
  assert(wrapper != NULL);
  wrapper->element = NULL;
}

item->element = NULL会产生incompatible types in assignment。这是为什么?不应该将结构设置为NULL吗?

4 个答案:

答案 0 :(得分:8)

在C NULL中通常定义如下

#define NULL ((void*)0)

这意味着它是一个指针值。在这种情况下,您尝试将指针(NULL)分配给非指针值item::element并获取相应的消息。您的意图似乎是让element成为指针,请尝试以下

struct item {
  struct elem* element;
};

答案 1 :(得分:4)

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

答案 2 :(得分:2)

除了之前的答案,有时创建一个NULL结构也是有意义的。 http://en.wikipedia.org/wiki/Null_Object_pattern

答案 3 :(得分:1)

  1. 元素不是指针,因此不能指定为NULL。
  2. main->element使用错误。您无法使用其名称访问结构的元素。它应该是wrapper->element。您应该使用变量名称来访问它。