【发布时间】:2020-02-25 19:42:22
【问题描述】:
我是一名新的数据结构学生,正在尝试熟悉 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;
}
我想从代码中删除中间的猴子步骤。是否可以使用这样的未分配结构指针?
【问题讨论】:
-
什么是“中间猴步”?如果您要取消引用
animal指针,则它需要指向有效内存或调用未定义的行为。你在这里正确地分配了monkey的地址。 -
@yano 嗯,我明白了。但是我不能仅仅创建一个字符数组并将我的名字存储在那里。然后将其传递给human.animal->name,甚至不将human.animal 分配给&monkey。 char 数组还有一个有效且可访问的内存地址。
-
你为什么不让
Animal成为super_animal的成员,没有指针? -
@TarekDakhran 哦。我认为我们必须使用指针将结构存储在结构中。
标签: c oop pointers inheritance structure