2015-05-28 50 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'具有所需的可移植性而不是感興趣的實現,那麼看起來很瘋狂。 –

相關問題