C语言结构体的“继承”
时间:10-27 09:08 阅读:1747次
*温馨提示:点击图片可以放大观看高清大图
简介:这里说的继承有点像C++里的父类和子类,实际上是结构体类型的强制转换,最近看Linux内核源码时经常接触到这种方法,在这里就当作是一个简单的学习吧。
这里说的继承有点像C++里的父类和子类,实际上是结构体类型的强制转换,最近看Linux内核源码时经常接触到这种方法,在这里就当作是一个简单的学习吧。
下面给出一个Demo,很简单,分别定义了一个father结构体和一个son结构体,father结构体里定义了2个整形变量,son结构体里的第一个成员是father结构体类型的变量,son里的另外2个成员也是整形变量,这样,son结构体就好像继承了father结构体,并增加了2个成员,代码如下:
1 #include <stdio.h>
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\n",f->f1);
26 printf("f->f2 = %d\n",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\n",s.fn.f1);
41 printf("s.fn.f2 = %d\n",s.fn.f2);
42
43 return 0;
44 }
在这里,关键是把father类型的变量放在son结构体里的第一位。运行效果:
修改son结构体,使得father类型的变量不是放在son结构里的第一位,修改后如下:
1 //子结构体
2 struct son
3 {
4 //子结构体的扩展变量
5 int s1;
6 int s2;
7 struct father fn;
8 };
修改后的运行效果:
总结:
这种方法对于结构体的扩展很有用。