首页
社区
课程
招聘
在C++中cout使用了DEC没效果
发表于: 2014-5-17 21:42 4408

在C++中cout使用了DEC没效果

2014-5-17 21:42
4408
#include"iostream"
#include"iomanip"
using namespace std;
int main()
{
int a=0x64;
int *b=&a;
cout<<dec<<b<<endl;
return 0;
)

为何使用dec转换输出为十进制了输出的还是十六进制的内存地址求解?只要是内存地址都没效果
cout<<dec<<a<<endl; 这种就可以输出100了 求解啊百度也找不到答案

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 90
活跃值: (92)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
我不知道cout到底是怎么实现的,所以我没法解释为什么不能将指针转换为十进制输出。但是你可以用
cout << dec << (int)b << endl;通过强制转换实现(C++不鼓励这种做法,但是我觉得这是程序员的自由)。
2014-5-17 22:16
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
因为变量b是指针类型
ps:cout打印整数类型变量值默认为十进制,dec在这儿可以省略
2014-5-17 22:21
0
雪    币: 995
活跃值: (669)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
。。。。。还是没说到重点上面啊为什么输出地址就不会转换为十进制
2014-5-17 22:31
0
雪    币: 12
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最终到了这里 ostream& ostream::operator<<(const void * ptr)
2014-5-17 23:35
0
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
cout<<setbase(10)<<b<<endl;
2014-5-18 10:45
0
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
在输出上一句cout.unsetf(ios::hex); 也行
2014-5-18 10:53
0
雪    币: 995
活跃值: (669)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
。。。汗我只是想知道为什么输出指针内存地址就不行。。。。
2014-5-18 23:16
0
雪    币: 68
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用printf不行吗
2014-5-19 00:00
0
雪    币: 1443
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
因为<<操作符的重载,输出a的时候走到_Myt& __CLR_OR_THIS_CALL operator<<(int __w64 _Val)这个函数,最终通过::sprintf_s(_Buf, _Buf_size, _Ifmt(_Fmt, "ld", _Iosbase.flags()), _Val)来格式化输出buffer。
输出b的时候因为b是指针,所以走到_Myt& __CLR_OR_THIS_CALL operator<<(const void *_Val)这个函数,最终通过::sprintf_s(_Buf, _Buf_size, "%p", _Val)来格式化输出buffer,所以输出是十六进制。
2014-5-19 01:22
0
游客
登录 | 注册 方可回帖
返回
//