社区
C++ 语言
帖子详情
不同类型之间的类型转换,一个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
...全文
69
3
打赏
收藏
不同类型之间的类型转换,一个bt的问题
#include 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
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
C++ 语言
65,185
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章