2015-05-28 51 views
1

我试图找到数组元素的内存地址,但输出结果是十六进制的。如果你能告诉我如何将其转换为十进制输出,我将不胜感激。在C++中将输出从十六进制转换为十进制

下面是代码,

#include<iostream> 
using namespace std; 

int main() 
    { 
    int a[4]; 

    cout << "Address of a[0] = " << &a << endl; 
    cout << "Address of a[1] = " << &a[1] << endl; 
    cout << "Address of a[2] = " << &a[2] << endl; 
    cout << "Address of a[3] = " << &a[3] << endl; 

    cin.get(); 

    return 0; 
    } 
+0

'cout <<“a [0] =”<< std :: dec <<(int)&a << endl;' – karlphillip

+0

@karlphillip'int的地址可能不够大,特别是如果您处理更多比2GB RAM和'int'是32位。无论如何,我不认为它是便携式的,尽管它大部分时间都在做这项工作。 – vsoftco

+0

至少编译器让你知道它是否不够大。 *错误:从指针转换为较小的类型'int'会丢失信息* – chris

回答

2

在C++ 11可以投射到uintptr_t,像

cout << "Address of a[0] = " << static_cast<uintptr_t>(&a) << endl; 

类型uintptr_t是专门设计用来表示任何可能的指针,所以该解决方案是便携式的。

我不知道C++ 98/03中的便携式解决方案,尽管size_t通常(but not always)的作品。相关:Converting a pointer into an integer


EDIT

综观http://en.cppreference.com/w/cpp/types/integer以及在C++标准18.4.1部首< cstdint>概要[cstdint.syn],它看起来像uintptr_t是可选。我不知道是否有一个实现没有定义它,为什么会选择不定义它。欢迎任何评论。

+0

请参阅http://stackoverflow.com/q/1464174/1553090了解最后一条语句的注意事项。 – paddy

+0

@paddy是的我知道,也http://stackoverflow.com/q/153065/3093378讨论这个问题,这就是为什么我说我不知道​​一个便携式解决方案。感谢您的链接,但我已将其添加到已编辑的回复中。 – vsoftco

+0

将地址写入十六进制到GMP然后解析并以十进制输出的ostringstream是一种可移植的方法,但是如果'uintptr_t'具有所需的可移植性而不是感兴趣的实现,那么看起来很疯狂。 –

相关问题