C语言中结构体继承的原理,C语言结构体的“继承”

这里说的继承有点像C++里的父类和子类,实际上是结构体类型的强制转换,最近看Linux内核源码时经常接触到这种方法,在这里就当作是一个简单的学习吧。

下面给出一个Demo,很简单,分别定义了一个father结构体和一个son结构体,father结构体里定义了2个整形变量,son结构体里的第一个成员是father结构体类型的变量,son里的另外2个成员也是整形变量,这样,son结构体就好像继承了father结构体,并增加了2个成员,代码如下:

#include

//父结构体

struct father

{

int f1;

int f2;

};

//子结构体

struct son

{

//子结构体里定义一个父结构体变量,必须放在子结构体里的第一位

struct father fn;

//子结构体的扩展变量

int s1;

int s2;

};

void test(struct son *t)

{

//将子结构体指针强制转换成父结构体指针

struct father *f = (struct father *)t;

//打印原始值

printf("f->f1 = %d\n",f->f1);

printf("f->f2 = %d\n",f->f2);

//修改原始值

f->f1 = 30;

f->f2 = 40;

}

int main(void)

{

struct son s;

s.fn.f1 = 10;

s.fn.f2 = 20;

test(&s);

//打印修改后的值

printf("s.fn.f1 = %d\n",s.fn.f1);

printf("s.fn.f2 = %d\n",s.fn.f2);

return 0;

}

在这里,关键是把father类型的变量放在son结构体里的第一位。运行效果:

0818b9ca8b590ca3270a3433284dd417.png

修改son结构体,使得father类型的变量不是放在son结构里的第一位,修改后如下:

//子结构体

struct son

{

//子结构体的扩展变量

int s1;

int s2;

struct father fn;

};

修改后的运行效果:

0818b9ca8b590ca3270a3433284dd417.png

总结:

这种方法对于结构体的扩展很有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值