是否可以在 C 中没有另一个初始化结构的情况下从结构继承
Is it possible to Inherit from a structure without having another initialized structure in C
我是一名新的数据结构学生,正在尝试熟悉 C 结构。我从我过去的 python 经验中知道继承,所以我想在 c 中伪尝试它。我的代码是这样的:
typedef struct{
char name[20];
int age;
int weight;
int selling_price;
} Animal;
typedef struct{
Animal *animal;
int can_speak;
}super_animal;
int main() {
Animal monkey;
strcpy(monkey.name,"Mustafa");
monkey.age=19;
monkey.weight=80;
super_animal human;
human.animal=&monkey;
human.can_speak=1;
printf("%s, can speak bool:%d\n",human.animal->name,human.can_speak);
return 0;
}
我想从 code.Is 中删除中间的猴子步骤,可以使用这样的未分配结构指针吗?
只要 animal
的类型为 Animal *
,它 必须 在使用前指向有效内存。该内存不必具有名称或由另一个具有名称的指针引用。也就是说,您可以通过直接为 human
:
分配内存来删除单独的 monkey
变量
super_animal human = { .animal = malloc(sizeof *human.animal), .can_speak = 1 };
if (human.animal == NULL)
HandleError();
strcpy(human.animal->name, "Mustafa");
human.animal->age = 19;
human.animal->weight = 80;
如果您改为将 animal
成员的类型更改为 Animal
而不是 Animal *
:
typedef struct{
Animal animal;
int can_speak;
}super_animal;
这样直接在super_animal
结构中嵌入了一个Animal
结构,那么就不需要单独提供内存了:
super_animal human = { .animal.name = "Mustafa", .animal.age = 19, .animal.weight = 80, .can_speak = 1 };
printf("%s, can speak bool:%d\n",human.animal.name,human.can_speak);
请注意,这会将 .animal.name
更改为直接指向字符串文字,而不是复制它。对于此示例,这不是必需的。有多种方法可以决定如何处理名称,如何初始化结构等。
我是一名新的数据结构学生,正在尝试熟悉 C 结构。我从我过去的 python 经验中知道继承,所以我想在 c 中伪尝试它。我的代码是这样的:
typedef struct{
char name[20];
int age;
int weight;
int selling_price;
} Animal;
typedef struct{
Animal *animal;
int can_speak;
}super_animal;
int main() {
Animal monkey;
strcpy(monkey.name,"Mustafa");
monkey.age=19;
monkey.weight=80;
super_animal human;
human.animal=&monkey;
human.can_speak=1;
printf("%s, can speak bool:%d\n",human.animal->name,human.can_speak);
return 0;
}
我想从 code.Is 中删除中间的猴子步骤,可以使用这样的未分配结构指针吗?
只要 animal
的类型为 Animal *
,它 必须 在使用前指向有效内存。该内存不必具有名称或由另一个具有名称的指针引用。也就是说,您可以通过直接为 human
:
monkey
变量
super_animal human = { .animal = malloc(sizeof *human.animal), .can_speak = 1 };
if (human.animal == NULL)
HandleError();
strcpy(human.animal->name, "Mustafa");
human.animal->age = 19;
human.animal->weight = 80;
如果您改为将 animal
成员的类型更改为 Animal
而不是 Animal *
:
typedef struct{
Animal animal;
int can_speak;
}super_animal;
这样直接在super_animal
结构中嵌入了一个Animal
结构,那么就不需要单独提供内存了:
super_animal human = { .animal.name = "Mustafa", .animal.age = 19, .animal.weight = 80, .can_speak = 1 };
printf("%s, can speak bool:%d\n",human.animal.name,human.can_speak);
请注意,这会将 .animal.name
更改为直接指向字符串文字,而不是复制它。对于此示例,这不是必需的。有多种方法可以决定如何处理名称,如何初始化结构等。