7

我有以下结构:

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

4 回答 4

12

在CNULL中一般定义如下

#define NULL ((void*)0)

这意味着它是一个指针值。在这种情况下,您尝试将指针 ( NULL) 分配给非指针值item::element并获取适当的消息。似乎您的意图是在element这里有一个指针,所以请尝试以下操作

struct item {
  struct elem* element;
};
于 2012-07-10T15:12:32.223 回答
5

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

于 2012-07-10T15:11:16.430 回答
3

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

于 2014-06-29T09:24:11.040 回答
2
  1. element 不是指针,因此不能分配 NULL。
  2. main->element是错误的用法。您不能使用其名称访问结构的元素。应该是wrapper->element。您应该使用变量名访问它。
于 2012-07-10T15:14:28.840 回答