结构体类型强转

来源: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

怕你乱用吧, 一般正常程序不会对复杂类型进行强转, 因为两边的内存大小与内部属性分布情况都不一致, 这样强制就会导致数据错乱和内存越界读取的问题, 只有按照某一段内存重合并且是大内存强转小内存才可以, 小转大的话底部数据就会有问题... , 内存地址强转的话他也就不管你了, 因为你用了 他就知道你不会乱用了

1
0

bennyhuo

2021-02-27

类型不兼容,不能转是正常的。不管什么类型的指针都是一个地址,自然可以转换

0
0

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程