Chinaunix首页 | 论坛 | 博客
  • 博客访问: 258557
  • 博文数量: 54
  • 博客积分: 2915
  • 博客等级: 少校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-21 12:20
个人简介

这个人很懒,什么都没有留下

文章分类
文章存档

2013年(1)

2012年(6)

2011年(11)

2010年(16)

2009年(20)

我的朋友

分类: C/C++

2010-08-04 11:42:23

之前转发过一篇文章《判断计算机字节存储顺序的方法》,其中涉及到指针的强制类型转换,如:
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]中,后面的每四位作一个整数


阅读(1985) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~