我正在分析一些代码,似乎无法掌握它背后的一些工作原理。
struct dplist {
dplist_node_t * head;
};
struct dplist_node {
dplist_node_t * prev, * next;
element_t element;
};
dplist_t * dpl_create ()
{
dplist_t * list;
list = malloc(sizeof(struct dplist));
DPLIST_ERR_HANDLER(list==NULL,DPLIST_MEMORY_ERROR);
list->head = NULL;
return list;
}
从头文件中:
typedef int element_t;
typedef struct dplist dplist_t;
typedef struct dplist_node dplist_node_t;
在主要功能中:
dplist_t * list = NULL;
int main(void)
{
list = dpl_create();
return 0;
}
我不确定如何查看dpl_create()函数,该函数被声明为指针dplist结构(我认为?)。为什么函数需要声明为结构的指针才能正确执行函数内部的内容?
答案 0 :(得分:2)
C函数声明中的第一个元素,在函数名称之前,始终是它将返回的变量的类型。 在您的情况下,该函数未声明为"指向结构的指针",它只是声明它将返回指向结构的指针("返回列表")。 你可以在你的代码中看到另一个带有main函数的例子,它将返回一个INT("返回0")。
答案 1 :(得分:0)
dpl_create()分配一个新的dplist_t并返回它。 在C中,您无法返回动态分配的对象,您必须返回一个引用(指针),因此
dplist_t *