以下是引用韩明海在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的内存.