在 C 中破解有限形式的多态性的一种方法是执行以下操作:
typedef struct {
int x;
} base;
typedef struct {
base super;
int y;
} derived;
现在,您可以将派生实例引用为基本实例,具体取决于变量的转换方式,即:
derived my_derived;
my_derived.y = 10;
my_derived.super.x = 20;
//will print 10
printf("%d", (&my_derived)->y);
//will print 20
printf("%d", ((base*)(&my_derived) )->x);
所以我的问题是,这到底是如何运作的?是否因为当您将其转换为基数并引用变量时,您引用了 int 成员“x”作为距“base”结构开头的偏移量?这是我唯一能想到的,任何帮助将不胜感激。
多谢!
在结构体中,数据元素之间或结构体末尾可以有未命名的填充字节,但开头不能。因此,保证结构类型对象的第一个数据元素的地址与结构类型对象本身的地址相同。
所以,在你的例子中,地址my_derived
与地址相同my_derived.super
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)