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

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 #include

2

3 //父结构体

4 struct father

5 {

6 int f1;

7 int f2;

8 };

9

10 //子结构体

11 struct son

12 {

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

14 struct father fn;

15 //子结构体的扩展变量

16 int s1;

17 int s2;

18 };

19

20 void test(struct son *t)

21 {

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

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

24 //打印原始值

25 printf("f->f1 = %d

",f->f1);

26 printf("f->f2 = %d

",f->f2);

27 //修改原始值

28 f->f1 = 30;

29 f->f2 = 40;

30 }

31

32 int main(void)

33 {

34 struct son s;

35 s.fn.f1 = 10;

36 s.fn.f2 = 20;

37

38 test(&s);

39 //打印修改后的值

40 printf("s.fn.f1 = %d

",s.fn.f1);

41 printf("s.fn.f2 = %d

",s.fn.f2);

42

43 return 0;

44 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

d8069c84161de779c0c887438173b538.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //子结构体

2 struct son

3 {

4 //子结构体的扩展变量

5 int s1;

6 int s2;

7 struct father fn;

8 };

48304ba5e6f9fe08f3fa1abda7d326ab.png

修改后的运行效果:

1dbf61d8bf53d85b7accf8602dd33749.png

总结:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值