这个问题在这里已有答案:
struct list* list_cons(int data_item, struct list* tail);
当我声明这个结构时,“list *”是什么意思,对于结构,我认为我使用大括号而不是括号?对不起这个问题,我试过谷歌搜索但我找不到任何东西。
这看起来像是继承自优秀旧C的代码,您必须声明您正在使用的类型是结构,除非它明确地是typedef。
开头的struct list*
是函数list_cons
返回的类型。在C ++中,你只需编写list* list_cons
。这两种语法都意味着该函数返回一个指向列表结构的指针。
对于函数中的参数也是如此,第一个参数只是一个int,第二个参数是一个指向列表结构的指针。考虑到变量名为tail,我希望它应该是列表的后面。
如果你没有用C ++中的指针覆盖,那么在理解这一点之前你必须先仔细研究一下。否则C中的struct list*
相当于C ++中的list*
。
这是函数list_const
的函数声明,它接受两个参数,一个整数data_item
和一个名为tail
的指针,指向list
类型的对象。该函数的返回值也是指向list
类型的对象的指针。您也可以将此代码段重写为
struct list; // forward-declare the type
list* list_cons(int data_item, list* tail); // declare function without 'struct' keyword
函数可以声明为:
return_type func_name(arg1, arg2)
struct list* list_cons(int data_item, struct list* tail);
> return_type ---> struct list*
func_name ----> list_cons
arg1 -----> int data_item
arg2 ---------> struct list* tail
所以基本上,struct list* list_cons(int data_item, struct list* tail);
是一个函数声明,它接受两个参数作为data_item和指向tail的指针。它返回struct list类型的指针。
你正在混合列表结构的声明和指向列表的指针的声明。这个函数带有两个int类型的参数和一个指向类型list的指针。所以每个结构都不需要像这样声明。