不同类型之间的类型转换,一个bt的问题

SailorK 2004-10-03 02:08:50
#include <iostream>
using namespace std;
int main()
{
short i=258;
cout<<&i<<endl;
char *p=(char *)&i;
cout<<p<<endl;
cout<<p+1<<endl;
cout<<int(*p)<<","<<int(*(p+1))<<endl;
system("pause");
}

为何是2,1
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SailorK 2004-10-03
  • 打赏
  • 举报
回复
多谢cenlmmx(多看看多想想)
分什么时候补就是了
cenlmmx 2004-10-03
  • 打赏
  • 举报
回复
又是没分
258的十六进制0x102,也就是
第一字节 -- 02
第二字节 -- 1
主要是用char*改变了指针的跳跃长度,*p取02,*(p+1)取1

somedummy 2004-10-03
  • 打赏
  • 举报
回复
cout<<&i<<endl;//输出i的地址
char *p=(char *)&i;
cout<<p<<endl;//应该是什么都无法输出
cout<<p+1<<endl;//同上
cout<<int(*p)<<","<<int(*(p+1))<<endl;应该是2,1

里面有个big endian和little endian的问题,一开始operator <<的参数是char*,应该是当作字符串来输出,而0x02和0x01都是不是可打印的字符,所以不输出,而由于little endian的关系,short占据的4个字节的排列是这样的0x02 0x01 0x00 0x00,所以输出应该是2,1

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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