zoukankan      html  css  js  c++  java
  • C语言结构体的“继承”

      这里说的继承有点像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
    ",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 }
    复制代码

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

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

    复制代码
    1 //子结构体
    2 struct son
    3 {
    4     //子结构体的扩展变量
    5     int s1;
    6     int s2;
    7     struct father fn;
    8 };
    复制代码

          修改后的运行效果:

    总结:      

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

  • 相关阅读:
    Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA全攻略
    Java程序员快速入门Go语言
    企业站常用的点击后弹出下拉菜单导航
    企业站常用漂亮横向导航菜单
    点击弹出弹性下拉菜单效果
    很酷的伸缩导航菜单效果,可自定义样式和菜单项。
    导航条点击按钮切换效果
    不错的二级导航菜单特效
    商城常用产品分类导航条
    css实现鼠标经过导航文字偏位效果
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/11229086.html
Copyright © 2011-2022 走看看