关于指针强制类型转换的 补充
时间:2010-08-04 来源:nothing3618
之前转发过一篇文章《判断计算机字节存储顺序的方法》,其中涉及到指针的强制类型转换,如:
int x = 1; char *y = (char *) &x;
我当时理解的是,这个转换过程中发生了数据截断。但事实上,数据保留还是完整的,仅仅是int *寻址是以4个字节为一个单位,但char *寻址则以1个字节为一个单位。
下面是在百度知道上搜到的一问一答,可以帮助理解。
问:
我这里有这样的结构体
struct roadmap_db_section {
char name[12];
int first;
int next;
int size;
int count;
};
然后有这样一条语句: char * c = &ss(其中ss为一个文件内容在内存中的首地址)
struct* s = (struct roadmap_db_section *) c;
我想问的是,这个字符型的指针,怎么就能强制转化为结构体类型的指针呢?转换后这个结构体指针和字符指针之间是什么关系啊?
新手分数不多,希望见量:)
最佳答案
指针说白了就是地址,32位机中地址是用long表示的,所以指针是可以相互转换的,只是转换后寻址方式不同了而已.
上面的roadmap_db_section的在内存中占28字节,转成char*就相当于一个char c[28], 不管它怎么换也就是这28个字节的内容.再转结构体时,前面12个字节放入name[12]中,后面的每四位作一个整数
int x = 1; char *y = (char *) &x;
我当时理解的是,这个转换过程中发生了数据截断。但事实上,数据保留还是完整的,仅仅是int *寻址是以4个字节为一个单位,但char *寻址则以1个字节为一个单位。
下面是在百度知道上搜到的一问一答,可以帮助理解。
问:
我这里有这样的结构体
struct roadmap_db_section {
char name[12];
int first;
int next;
int size;
int count;
};
然后有这样一条语句: char * c = &ss(其中ss为一个文件内容在内存中的首地址)
struct* s = (struct roadmap_db_section *) c;
我想问的是,这个字符型的指针,怎么就能强制转化为结构体类型的指针呢?转换后这个结构体指针和字符指针之间是什么关系啊?
新手分数不多,希望见量:)
最佳答案
指针说白了就是地址,32位机中地址是用long表示的,所以指针是可以相互转换的,只是转换后寻址方式不同了而已.
上面的roadmap_db_section的在内存中占28字节,转成char*就相当于一个char c[28], 不管它怎么换也就是这28个字节的内容.再转结构体时,前面12个字节放入name[12]中,后面的每四位作一个整数
相关阅读 更多 +