| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6696 人关注过本帖
标题:结构体的强制转换
只看楼主 加入收藏
ycd123
Rank: 1
等 级:新手上路
帖 子:42
专家分:5
注 册:2010-1-6
结帖率:91.67%
收藏
已结贴  问题点数:4 回复次数:12 
结构体的强制转换
结构体之间怎样强制转换啊?
搜索更多相关主题的帖子: 结构体 
2011-02-18 15:38
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:4 
在C语言中,结构体和int等类型一样,都是数据类型。其他类型怎么转换,结构体就怎么转换,没有什么特殊的地方。
楼主可能想知道的不是结构体怎样强制转换这个问题吧,猜测,楼主想知道如下几个问题:
如果将一个结构体强制类型转换为另一个结构体(或者类型),那这个结构体的成员会怎样了?
如果将一个结构体强制类型转换为另一个结构体(或者类型),那么这个结构体成员的数值又会是什么了?
解答:
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看成第二个成员,并按补码格式解释数据。

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

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-18 16:09
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
这东西很少有需要转换的吧..
2011-02-18 16:22
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用刘定邦在2011-2-18 16:22:19的发言:

这东西很少有需要转换的吧..
那么,我们选择
    “别问这样的傻问题!你不需要知道这是怎么回事,因为我也不知道。当然,最重要的是:大家都不这样用。”
这样的答案给楼主么吧!

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-18 16:26
ycd123
Rank: 1
等 级:新手上路
帖 子:42
专家分:5
注 册:2010-1-6
收藏
得分:0 
回复 2楼 犬虫门心
假如我要把整个结构体的成员都强制转换呢?如struct a,struct b,a=(a)b?
2011-02-18 16:29
ycd123
Rank: 1
等 级:新手上路
帖 子:42
专家分:5
注 册:2010-1-6
收藏
得分:0 
在学习驱动编程的时候书上就用到了,因为才接触驱动编程
2011-02-18 16:41
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用ycd123在2011-2-18 16:29:29的发言:

假如我要把整个结构体的成员都强制转换呢?如struct a,struct b,a=(a)b?
首先,你的写法是有语法错误的,应该为:
a = (struct A1)b;
要注意一个问题,C语言是支持结构体实例之间的直接赋值的;而其赋值本质是:内存块赋值!将b的内存内容(当然是按照struct A1的格式和长度为基础的)直接覆盖到a所占用内存空间中!
但此时要特别注意的是:
此时的C语言是不可能关心相关内存空间的“人文内容”的!要特别注意!
以后,再使用a的时候,对a的空间当然按a本身的类型进行解释,至于解释成什么,那就需要更深的计算机原理的知识了。但这至少有一个结论:如果你对计算机原理了解不深,那么请不要使用这种你无法掌控的方法!
收到的鲜花
  • 卧龙孔明2011-02-19 10:12 送鲜花  -3朵   附言:不要误人子弟

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-18 16:43
ycd123
Rank: 1
等 级:新手上路
帖 子:42
专家分:5
注 册:2010-1-6
收藏
得分:0 
回复 7楼 犬虫门心
帅哥谢谢了啊,好想加你Q啊
2011-02-18 16:55
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用ycd123在2011-2-18 16:55:22的发言:

帅哥谢谢了啊,好想加你Q啊
不客气,可不可以给点专家分数啊?
呵呵呵呵,先谢谢啦。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-18 17:07
ycd123
Rank: 1
等 级:新手上路
帖 子:42
专家分:5
注 册:2010-1-6
收藏
得分:0 
回复 9楼 犬虫门心
好像给不了.....
2011-02-18 17:15
快速回复:结构体的强制转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012785 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved