结构体类型强转
来源:14-9 GTK的面向对象设计理念

wxz123
2021-02-27
#include <stdio.h>
struct Creature {
char const *name;
int age;
};
struct Human {
struct Creature base;
char const *address;
int gender;
};
int main(int argc, char *argv[]) {
struct Human human = {
.base = {
.name = "bennyhuo",
.age = 30
},
.gender = 1,
.address = "beijing"
};
struct Creature *ff = (struct Creature *) (&human);
struct Creature ff1;
//ff1=(struct Creature) (human); 报错
return 0;
}
老师,我发现像继承的结构体,指针之间是可以相互强转的,例如struct Creature *ff = (struct Creature *) (&human);
,然而结构体类型本身却不能强转,例如ff1=(struct Creature) (human);
就会报错,这是为啥呢?
写回答
2回答
-
慕圣2430575
2021-05-22
怕你乱用吧, 一般正常程序不会对复杂类型进行强转, 因为两边的内存大小与内部属性分布情况都不一致, 这样强制就会导致数据错乱和内存越界读取的问题, 只有按照某一段内存重合并且是大内存强转小内存才可以, 小转大的话底部数据就会有问题... , 内存地址强转的话他也就不管你了, 因为你用了 他就知道你不会乱用了
10 -
bennyhuo
2021-02-27
类型不兼容,不能转是正常的。不管什么类型的指针都是一个地址,自然可以转换
00
相似问题