分享

C语言结构体的“继承”

 山峰云绕 2018-03-17

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

父结构体和子结构体能够强行转换的条件是:子结构体的第一个成员必须是父结构体

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

#include<stdio.h>

#include<stdlib.h>

//父结构体

struct father {

int f1;

int f2;

};

//子结构体

struct son {

struct father fn;

int s1;

int s2;

};

void test(struct son *s)

{

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

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

//修改的还是子结构体的成员,因为传递的是子结构体的值。

f->f1 = 10;

f->f2 = 20;

}

int main(void)

{

struct son so;

so.fn.f1 = 1;

so.fn.f2 = 2;

struct father fa;

fa.f1 = 3;

fa.f2 = 4;

test(&so);

printf('son f1 = %d, son f2 = %d\n', so.fn.f1, so.fn.f2);

printf('father f1 = %d, father f2 = %d\n', fa.f1, fa.f2);

//printf('I want to print:1,2,10,20,3,4\n');

return 0;

}

执行程序得:

f1 = 1, f2 = 2

son f1 = 10, son f2 = 20

father f1 = 3, father f2 = 4

头条号第一篇文章,大家给提提意见吧~ (* ̄︶ ̄)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多