结构体强制类型转换

您所在的位置:网站首页 c语言如何进行强制转换 结构体强制类型转换

结构体强制类型转换

2024-07-07 22:13| 来源: 网络整理| 查看: 265

在c语言中,结构体和int等类型一样,都是数据类型,其他类型怎么转换,结构体就怎么转换,没有特殊的地方。对于这个问题,可能想问的是这个吧。 如果将一个结构体强制类型转换为另一个结构体(或者类型),那这个结构体的成员怎么样了。 如果将一个结构体强制类型转换为另一个结构体(或者类型),那么这个结构体成员的数值又会是什么? 假设定义两个结构体 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看成第二个成员,并按补码格式解释数据。

这里的关键是: 计算机是机器,它绝对忠实地遵守与人“先前”的约定,而不像人那样善变! 注意,要把自己当成计算机;看问题的角度改变了,那答案自然就容易得

结构体之间的强制转换

struct str1 a;

struct str2 b; a=(struct str1) b; //this is wrong a=((struct str1)&b); //this is correct

要注意一个问题,C语言是支持结构体实例之间的直接赋值的;而其赋值本质是:内存块赋值!将b的内存内容(当然是按照struct A1的格式和长度为基础的)直接覆盖到a所占用内存空间中! 但此时要特别注意的是: 此时的C语言是不可能关心相关内存空间的“人文内容”的!要特别注意! 以后,再使用a的时候,对a的空间当然按a本身的类型进行解释,至于解释成什么,那就需要更深的计算机原理的知识了。但这至少有一个结论:如果你对计算机原理了解不深,那么请不要使用这种你无法掌控的方法!

在这里插入图片描述

运行结果: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3