结构体类型指针的强制转换

在代码中看到下面这种写法有些奇怪,两个不同类型的结构体指针之间进行强制类型转换,这样不会出现什么问题吗?代码如下:

IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This;
GC_DATA			        *GcData;
GcData = (GC_DATA *) This;

其中EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLGC与GC_DATA是不同的结构体类型。
如果将一个结构体强制类型转换为另一个结构体(或者类型),那这个结构体的成员会怎样? 如果将一个结构体强制类型转换为另一个结构体(或者类型),那么这个结构体成员的数值又会是什么了?

解答: 1、结构体的本质是:我们和C语言约定了一段内存空间的长短,及其内容的安排。假设下面两个结构体:
struct A1 { int a; char b; };
struct A2 { char a; int b; };
接着,用struct A1和struct A2定义变量,并赋初值: struct A1 x = {10, ‘A’}; struct A2 y = {‘A’, 10}; 现在最重要的是,要知道x和y的内存情况: x的内存安排是:前4B,后1B; y的内存安排是:前1B,后4B。 如果有struct A2 z; z.a = ((struct A2)x).a; 那么,C语言会对x的空间, 按照struct A2的格局 进行解释:
也就是说,将x的第一个字节看成第一个成员,且按ASCII码处理数据,而将后面的4B看成第二个成员,并按补码格式解释数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值