| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1069 人关注过本帖
标题:关于结构体转换的一点见解
取消只看楼主 加入收藏
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
结帖率:100%
收藏
 问题点数:0 回复次数:5 
关于结构体转换的一点见解
例如struct a
{
   char num1;
   char num2;
   char num3;
   char num4;
   int num5;
}
struct b
{
   int num6;
   char num7;
   char num8;
   char num9;
   char num0;
}
把a转换成b时,num1,2,3,4会合成一个int型的变量num6(假设int是四个字节的系统),在我的系统中num1对应num6的低字节,但是int型的num5不能将四个字节分配给num7,8,9,0,而是转换给了对应的第一个变量num7,例如num5=128,那么转换以后num7= -1,num8,9,0都是 0。
我只是最近开始研究这个,有经验的朋友请多多指导,
搜索更多相关主题的帖子: 结构体 朋友 
2011-02-16 18:41
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
回复 2楼 卧龙孔明
谢谢,非常感谢,
如果我把一个小的结构体( p1 )转换成一个大的结构体( p2 ),那么 p2是在p1的位置上扩大数据范围还是会从新开辟一个数据块,然后将p1的数据拷贝到这个新的数据块上呢?
2011-02-21 16:13
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
回复 7楼 卧龙孔明
好的,我的转换和你的代码基本一样的,谢谢
2011-02-21 19:34
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
回复 10楼 中学者
引用“其次,转换的意思是改变指针所指内存的大小及表示方式。如果你用一个小结构体p1转成大的p2,那么必然多出来的内存要么是没有预定的或者被其他的变量预定了。这样的结果就是非法访问或者破坏数据。”
我想多出来的内存只是相当于我定义一个变量但是没有初始化一样,为什么说会被其他变量预定呢?
我定义一个大的结构体,然后把小的结构体内存拷贝过去,那么在大的结构体中后面一些成员的值是随机的,怎么会破坏数据呢,
帮忙再解释一下好么?
2011-02-22 13:07
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
回复 14楼 中学者
哦,是这样,那就是说如果转换后的结构体(a)比结构体(b)大,那么访问a 的没有多出来的成员时,就相当于内存越界访问了,是吧?
谢谢中学者,清楚些了
2011-02-23 09:50
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
写错了,是访问a的多出来的成员,
2011-02-23 09:51
快速回复:关于结构体转换的一点见解
数据加载中...
 
   



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

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