送分喽,三行代码,欢迎大家进来溜达联络感情!

yiruirui0507 2010-07-06 01:31:12
#include "stdio.h"
struct student
{
public:
int x;
int y;
};
void main()
{
struct student * stu=new struct student();
stu->x=5;
stu->y=13;
int * x=(int *)stu;
printf("%d",*x);

}
这样输出的是5,如果 int * x=(int *)stu+1;则输出的是13,我相信这个结果大家都知道,我也知道!
接下来一个我就不是很清楚了,求大家帮忙,我也知道问题出在结构体内存布局的分析上。
#include "stdio.h"
struct student
{
public:
//int x;
//short x;
char x;
double y;
};
void main()
{
struct student * stu=new struct student();
stu->x=5;
stu->y=13;
int * x=(int *)stu+2;
printf("%f",*x);

}
这个输出时0.0000,真的没想到。我调试过程已经发现了,x=0x00382280,&stu->y=0x00382200
但是也看到了*x=0,stu->y=13.00000000000000,请问这里地址相同,为什么结果不等?先说谢谢!
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnson_Jiang327 2010-07-06
  • 打赏
  • 举报
回复
不知道楼主希望得到的是什么结果,我认为第二段程序里指针x取到的是double类型值里的4个字节(double类型该8个字节),但是,由于浮点型数据的存储方式不同于整形,所以取出的4个字节没有什么意义。
yiruirui0507 2010-07-06
  • 打赏
  • 举报
回复
不好意思了,结贴了没给楼上的分数,下次双倍给你!勿见怪!
tananade 2010-07-06
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
地址不对 你前面x是char型的 应该这样写

double * x=(double *)stu+1;
printf("%f",*x);
小楫轻舟 2010-07-06
  • 打赏
  • 举报
回复
printf("%f",*(double*)x); //你少了个*
yiruirui0507 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lightboat09 的回复:]
C/C++ code

printf("%f",*(double *)x);
[/Quote]

int * x=(int *)stu+2;
printf("%f",(double*)x);
还是0.00000啊,没效果的。
yiruirui0507 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lthyxy 的回复:]
求结贴
[/Quote]

double * x=(double *)stu+2; 输出还是0.00000 没变化啊
小楫轻舟 2010-07-06
  • 打赏
  • 举报
回复

printf("%f",*(double *)x);
liutengfeigo 2010-07-06
  • 打赏
  • 举报
回复
求结贴
z0203153008 2010-07-06
  • 打赏
  • 举报
回复
double

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧