我有以下结构:
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吗?
答案 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)
main->element
使用错误。您无法使用其名称访问结构的元素。它应该是wrapper->element
。您应该使用变量名称来访问它。