| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1069 人关注过本帖
标题:关于结构体转换的一点见解
只看楼主 加入收藏
cacker
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2011-02-22 00:54
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
可以转化  但是取内存的内容的时候一定要去

确定你取得内存内容是大的结构体的  不然不知道会发生什么

                                         
===========深入<----------------->浅出============
2011-02-22 10:36
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
回复 10楼 中学者
引用“其次,转换的意思是改变指针所指内存的大小及表示方式。如果你用一个小结构体p1转成大的p2,那么必然多出来的内存要么是没有预定的或者被其他的变量预定了。这样的结果就是非法访问或者破坏数据。”
我想多出来的内存只是相当于我定义一个变量但是没有初始化一样,为什么说会被其他变量预定呢?
我定义一个大的结构体,然后把小的结构体内存拷贝过去,那么在大的结构体中后面一些成员的值是随机的,怎么会破坏数据呢,
帮忙再解释一下好么?
2011-02-22 13:07
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
以下是引用韩明海在2011-2-22 13:07:38的发言:

引用“其次,转换的意思是改变指针所指内存的大小及表示方式。如果你用一个小结构体p1转成大的p2,那么必然多出来的内存要么是没有预定的或者被其他的变量预定了。这样的结果就是非法访问或者破坏数据。”
我想多出来的内存只是相当于我定义一个变量但是没有初始化一样,为什么说会被其他变量预定呢?
我定义一个大的结构体,然后把小的结构体内存拷贝过去,那么在大的结构体中后面一些成员的值是随机的,怎么会破坏数据呢,
帮忙再解释一下好么?

照你这个说法那就不叫转换了。既然已经有一个大结构体,拷贝不超过它大小的内容给他肯定没有问题。
通俗点,转换就是改变指针的表现形式和内容。例如:
struct A{
int a,b;
};
A aa;
char *pa = (char*)&aa;
这个就是转换,让pa能指向aa所在内存的首地址,然后可以通过pa表现出来的一字节寻址(每次只取一个字节内容)来访问aa的内存。
如果,int *pb = (int*)&aa;
这个就是利用pb指向aa所在内存首地址,然后可以通过pb表现出来的四字节寻址(每次取四个字节内容)来访问aa的内存.

樱花大战,  有爱.
2011-02-22 17:52
韩明海
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.046514 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved