能力值:
( LV5,RANK:60 )
|
-
-
2 楼
我不知道cout到底是怎么实现的,所以我没法解释为什么不能将指针转换为十进制输出。但是你可以用
cout << dec << (int)b << endl;通过强制转换实现(C++不鼓励这种做法,但是我觉得这是程序员的自由)。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
因为变量b是指针类型
ps:cout打印整数类型变量值默认为十进制,dec在这儿可以省略
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
。。。。。还是没说到重点上面啊为什么输出地址就不会转换为十进制
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
最终到了这里 ostream& ostream::operator<<(const void * ptr)
|
能力值:
( LV8,RANK:120 )
|
-
-
6 楼
cout<<setbase(10)<<b<<endl;
|
能力值:
( LV8,RANK:120 )
|
-
-
7 楼
在输出上一句cout.unsetf(ios::hex); 也行
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
。。。汗我只是想知道为什么输出指针内存地址就不行。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
用printf不行吗
|
能力值:
( 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,所以输出是十六进制。
|
|
|