强制类型转换short*到int*,没有达到预期的效果。为何?

sambasy 2011-05-13 02:21:15

int main(void)
{
short a=0x0001;
short b=0x0002;
short c=0x0004;
int *pb= (int*)&b;
printf( "%x\n", *pb );
return 0;
}

我预期的是,printf输出0x00010002或者0x00020004,因为int*要去4个地址的内容。
但是我运行的结果却是cccc0002,也就是没有取得变量a或者c的内容。

这是为什么呢? VC2005sp1。
...全文
186 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljt3969636 2011-05-13
  • 打赏
  • 举报
回复
有谁和你说过保证abc连续存储,之间还差2字节?
这样弄

short arr[3]={0x0001,0x0002,0x0004};
printf( "%p\n", &arr[0] );
printf( "%p\n", &arr[1] );
printf( "%p\n", &arr[2]);
int *pb= (int*)&arr[1];
printf( "%x\n", *pb );
一曲肝肠断 2011-05-13
  • 打赏
  • 举报
回复
查看下 a,b,c的地址不就清楚了
冻结 2011-05-13
  • 打赏
  • 举报
回复
你变到VC release下试试。
bdmh 2011-05-13
  • 打赏
  • 举报
回复
你把b的地址转为int*了,访问*pb当然不是b的值了
冻结 2011-05-13
  • 打赏
  • 举报
回复
我的gcc 40002
yuyan_linger 2011-05-13
  • 打赏
  • 举报
回复
变量是否连续存储是没有统一标准的

通常编译器为了方便自己的处理 都会在数据间填充特殊字符 (如0xcccccccc等)

如果你想达到这个效果 用数组试试看
panasonic0804 2011-05-13
  • 打赏
  • 举报
回复
你为什么会认为局变在内存里是连续存放的?
HeartWasNot 2011-05-13
  • 打赏
  • 举报
回复
a,b,c未必是连续存储的。。所以不是你要的结果。。

69,371

社区成员

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

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