C - Setting a struct to null (incompatible types in assignment)

耗尽温柔 提交于 2021-02-06 12:47:32

问题


I have the following struct:

struct elem {
  int number;
  char character;
};

struct item {
  struct elem element;
};

and the following function:

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

item->element = NULL yields a incompatible types in assignment. Why is that? Shouldn't setting a struct to NULL be okay?


回答1:


In C NULL is generally defined as the following

#define NULL ((void*)0)

This means that it's a pointer value. In this case your attempting to assign a pointer (NULL) to a non-pointer value item::element and getting the appropriate message. It seems like your intent is to have element be a pointer here so try the following

struct item {
  struct elem* element;
};



回答2:


NULL is a pointer value, wrapper->element is not a pointer, therefore you cannot assign it NULL




回答3:


In addition to the previous answers, sometimes it makes sense to create a NULL struct. http://en.wikipedia.org/wiki/Null_Object_pattern




回答4:


  1. element is not a pointer and hence cannot be assigned NULL.
  2. main->element is wrong usage. You cannot access a structure's element using it's name. It should be wrapper->element. You should access it using the variable name.


来源:https://stackoverflow.com/questions/11416359/c-setting-a-struct-to-null-incompatible-types-in-assignment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!