博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言结构体的“继承”
阅读量:6545 次
发布时间:2019-06-24

本文共 1133 字,大约阅读时间需要 3 分钟。

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

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

1 #include 
2 3 //父结构体 4 struct father 5 { 6 int f1; 7 int f2; 8 }; 9 10 //子结构体11 struct son12 {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 son3 {4     //子结构体的扩展变量5     int s1;6     int s2;7     struct father fn;8 };

      修改后的运行效果:

总结:      

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

 

转载地址:http://vxrdo.baihongyu.com/

你可能感兴趣的文章
MySql Study Notes
查看>>
6 - laravel 基础 - 视图与模板引擎
查看>>
团队第二次作业
查看>>
linux 查询当前文件夹下的目录数量
查看>>
【python】入门第一篇
查看>>
1682: [Usaco2005 Mar]Out of Hay 干草危机
查看>>
supersr--NSURLConnection iOS2.0苹果原生请求
查看>>
iphone-common-codes-ccteam源代码 CCPlistFileReader.h
查看>>
构造方法
查看>>
SQL效率之索引
查看>>
线性支持向量分类机及其实现
查看>>
Yslow
查看>>
Axure产品原型设计工具
查看>>
ASM文件系统
查看>>
ajax学习笔记(原生js的ajax)
查看>>
mysql 函数 事务
查看>>
1312 连续自然数和
查看>>
进程/线程介绍
查看>>
SPSS-Friedman 秩和检验-非参数检验-K个相关样本检验 案例解析
查看>>
RabbitMQ数据同步一致性解决方案
查看>>