c语言强制转换为结构体,C语言结构体的强制类型转换

陈浩师兄03年的一篇博客《用C写有面向对象特色的程序》描述了用C语言来实现相似C++类继承的方法,这样方法的核心要点就是结构体的强制类型转换,让我来简单分析分析C语言中的结构体强制类型转换,仍是用陈浩师兄原博的结构体来举例吧。两个结构体以下:安全

/*双向链表 (相似于父类)*/typedefstructhLinks{struct hLinks *bwLink;struct hLinks *fwLink;

} hLinks;

/** 一个使用双向链表的结构

* (相似于子类)*/typedefstructhEnt{

hLinks links;inthData;char key[10];

} hEnt;

首先,咱们要搞清楚的一点是:C语言中的结构体并不能直接进行强制类型转换,只有结构体的指针能够进行强制类型转换。所以你能够在原博中看到在函数调用的时候有一些比较别扭的参数形式,咱们来看看。函数

/** 打印 (相似于子类重载父类的成员函数)*/PrintLink( hLinks*h )

{

hEnt*p ;for( p = ( hEnt* ) h->fwLink; /*

p= ( hEnt* )( (hLinks*)p )->fwLink )

{

printf("hData=[%d], key=[%s]/n", p->hData, p->key);

}

}

PrintLink函数的参数是一个hLinks类型的指针,所以在调用PrintLink时传入参数也应该是hLinks类型的指针,若是咱们定义的时候用下面这样的形式。spa

hL

你可能感兴趣的:(c语言强制转换为结构体)