在C语言中创建递归数据结构的方法
假设我有一些hashmap可以引用自身,比如:在C语言中创建递归数据结构的方法,c,recursion,struct,typedef,definition,C,Recursion,Struct,Typedef,Definition,假设我有一些hashmap可以引用自身,比如: typedef struct Person { char* name; Person* mother; Person* father; } Person; 解决错误的建议方法有哪些:未知类型名称“Person”错误?虽然没有定义typedef,但是struct标记是可以预先将其添加到struct的元素中的。例如: typedef struct Person { char* name; struct Pers
typedef struct Person {
char* name;
Person* mother;
Person* father;
} Person;
解决
错误的建议方法有哪些:未知类型名称“Person”
错误?虽然没有定义typedef
,但是struct
标记是可以预先将其添加到struct
的元素中的。例如:
typedef struct Person {
char* name;
struct Person* mother;
struct Person* father;
} Person;
#包括
内部主(空){
//父母(忽略他们的父母)
Person*Kathy=malloc(sizeof(Person));
凯西->name=“凯西”;
人*Bill=malloc(sizeof(人));
票据->名称=“票据”;
//人
Person*Bob=malloc(sizeof(Person));
Bob->name=“Bob”;
鲍勃->母亲=凯西;
鲍勃->父亲=比尔;
printf(“姓名:%s |母亲:%s,父亲:%s\n”,鲍勃->姓名,鲍勃->母亲->姓名,鲍勃->父亲->姓名
免费的(鲍勃);免费的(凯西);免费的(比尔);
}
姓名:鲍勃|妈妈:凯西,爸爸:比尔
Person
尚未定义,因为typedef仅在结束它的分号之后生效。要从结构本身引用结构,请使用struct Person
。以下代码在GCC 10.2.0上编译时没有错误
typedef结构人{
字符*名称;
结构人*母亲;
结构人*父亲;
}人;
int main(){
人凯西={“凯西”,空,空};
个人账单={“账单”,空,空};
Person Bob={“Bob”、&Kathy、&Bill};
返回0;
}
问题在于,结构定义中使用的人名作为数据成员母亲和父亲的类型说明符
typedef struct Person {
char* name;
Person* mother;
Person* father;
} Person;
尚未宣布
在结构定义之前使用typedef,如
typedef struct Person Person;
struct Person{
char* name;
Person* mother;
Person* father;
};
typedef struct Person {
char* name;
struct Person* mother;
struct Person* father;
} Person;
或者在结构定义中使用声明的结构标记,如
typedef struct Person Person;
struct Person{
char* name;
Person* mother;
Person* father;
};
typedef struct Person {
char* name;
struct Person* mother;
struct Person* father;
} Person;
或者,在声明字段时,将
struct
放在字段前面,例如:struct Person*mother;
和struct Person*father;
@hgs3这两种方式中,您认为哪一种更常见?@David542这取决于个人偏好。事实上,许多项目,如Linux内核,都不typedef
他们的结构。是一种形式优于另一种形式吗?或者这无关紧要,而且人们使用两种方式?@David542在某些.c文件中有指向结构的声明指针时,通常会使用第一种形式。在这种情况下,不需要结构的完整定义。因此,可以将typedef放在一个标题中,而将结构定义放在另一个标题中包含带有typedef的标题的其他标题。