C语言中结构体强制转换为另一结构体
C语言中结构体属于一种数据类型。 在C语言中结构体并不能直接进行强制转换,只有结构体的指针可以进行强制类型转换。
将某一种结构体(1)转变为另一种结构体(2),有几种情况。
- 如果将一个结构体强制类型转换为另一个结构体(或者类型),那这个结构体的成员怎么样了。
- 如果将一个结构体强制类型转换为另一个结构体(或者类型),那么这个结构体成员的数值又会是什么?
首先,结构体是储存在一块连续内存中的,计算机只关心的是结构体的大小和操作方式,结构体大小是定义的时候决定的(要进行对齐),而结构体的操作确实和结构体中的成员类型有关的。指针表示的是内存地址,那么在强制类型转换之后,计算机便以转换后的结构体来看待这个地址内存中的内容。比如两个结构体的内存结构如下:
hLinks | hEnt |
---|---|
*bwLink | *bwLink |
*fwLink | *fwLink |
—(未定义) | hDate |
—(未定义) | key[10] |
可以看出,在前两个内存单元中两个结构体存储的内容是相同的,当然不管相不相同计算机是不管的,当hLinks类型转换成hEnt类型时,计算机就将原结构体看做是hEnt类型的。转换后的hEnt类型结构体的前面两个内存单元的内容就是hLinks中的前两个单元内容,而hEnt的后两个内存单元中的内容取得是hLinks后的两个单元(这两个单元不是hLinks类型的成员,而是别的内容,所有如果转换后的hEnt要访问hData和key的话是不安全的!)。
总之一句话,在转换之后,计算机就按照转换后的结构体的组成结构来解释那么一段内存中存储的数据!!