why?

挣扎中前行 2013-07-16 10:04:19
cout<<hex<<buf[0]<<"-----"<<buf[1]<<endl;

printf("0-%x 1-%x\n", buf[0], buf[1]);

这俩句有什么区别啊?为什么第一句输出为空,第二句能正常输出呢?
...全文
224 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2013-07-16
  • 打赏
  • 举报
回复
引用 7 楼 mujiok2003 的回复:
入栈的时候不能单个字节入栈, 提升成更大的类型了。
对于 printf 第二个参数 第三个参数....... 其实是"没有类型"的 根据格式控制符 "猜测"栈中的数据的数据类型 不转型 另外 提升和转型也有区别吧
mujiok2003 2013-07-16
  • 打赏
  • 举报
回复
引用 5 楼 lin5161678 的回复:
[quote=引用 2 楼 mujiok2003 的回复:] buf的类型是什么? 如果是char* 或 char[]

cout<<hex<(int)<buf[0]<<"-----"<<(int)buf[1]<<endl;
因为printf有转型。
printf没有转型[/quote] 入栈的时候不能单个字节入栈, 提升成更大的类型了。
橡木疙瘩 2013-07-16
  • 打赏
  • 举报
回复
引用 4 楼 zhenwo123 的回复:
cout不是自动识别类型吗?
正因为cout自动识别类型,所以你才需要把char转换为int,以阻止它识别出char的类型而按字符方式输出。 而printf不知道参数类型,自然就根据你给出的"%x"标志按整数类型输出了。
lin5161678 2013-07-16
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
buf的类型是什么? 如果是char* 或 char[]

cout<<hex<(int)<buf[0]<<"-----"<<(int)buf[1]<<endl;
因为printf有转型。
printf没有转型
挣扎中前行 2013-07-16
  • 打赏
  • 举报
回复
cout不是自动识别类型吗?
挣扎中前行 2013-07-16
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
buf的类型是什么? 如果是char* 或 char[]

cout<<hex<(int)<buf[0]<<"-----"<<(int)buf[1]<<endl;
因为printf有转型。
原来如此!
mujiok2003 2013-07-16
  • 打赏
  • 举报
回复
buf的类型是什么? 如果是char* 或 char[]

cout<<hex<(int)<buf[0]<<"-----"<<(int)buf[1]<<endl;
因为printf有转型。
挣扎中前行 2013-07-16
  • 打赏
  • 举报
回复
求助 up!
mujiok2003 2013-07-16
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
[quote=引用 7 楼 mujiok2003 的回复:]
入栈的时候不能单个字节入栈, 提升成更大的类型了。

对于 printf 第二个参数 第三个参数....... 其实是"没有类型"的
根据格式控制符 "猜测"栈中的数据的数据类型
不转型 另外 提升和转型也有区别吧[/quote]
提升也是一种转型

65,187

社区成员

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

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