2012-05-13 124 views
0

包含數據的我寫了下面的代碼什麼類型的指針

int num = 3; 
int *ptr = # 

cout << *ptr << " " << ptr << endl; 

,得到了下面的輸出。

3 0x7fff5fbff43c 

我想知道這是什麼類型的數據。

0x7fff5fbff43c

一個。有符號浮點數據

b。帶符號整數數據

c。無符號浮點數據

d。無符號整數數據

e。有符號字符數據

+9

f。以上都不是 – tmpearce

回答

6

它們都不是這些 - 它是一個指向整數的指針,它與任何描述中包含「數據」一詞的類型不同。

0x7fff5fbff43c只是一個數字解釋作爲一個無符號整數數字打印出來的base-16。

+0

所以我們可以放心地假設它的選項d? – itsaboutcode

+2

@itsaboutcode儘管將指針指定爲無符號十六進制整數是爲人類讀者直觀顯示它們的最常見方法,但從技術角度講,指針*是無符號整數是不正確的。正確的答案是「這是一個用十六進制符號表示的無符號整數形式的指針」,所以從某種意義上說,「d」是最不正確的選擇(但它仍然是不正確的)。 – dasblinkenlight

3

數據類型爲int *。這不是你提到的任何事情。你也許可以將它投射到其中一個;但是,您是否可以做到這一點是未定義的,並且可能因平臺和編譯器而異。

對於顯示,ostream的<<將轉換爲字符串。該字符串不直接對應於類型; operator<<調用ostream函數來傳遞字符數據,可以是單獨的字符,字符串或其組合。

-1

它表示一個內存地址,而不是一個變量。所以它是無類型的。然而,你可以給它一個「間接類型」,這意味着這個指針指向的內存確實有一個類型(所以你可以指向int,字符,結構等)。

閱讀indirection,這是一個有趣的概念。 f。

+0

指針不是無類型的。他們有類型。指針類型。 –

+0

@JamesYoungman他們不是「真實」的類型,他們是我的答案中提到的「間接類型」,因爲他們描述的是指向底層內存的類型而不是指針本身。不過我們不要爭論語義,如果需要的話,可以稱它們爲指針類型。 – Thomas

+0

@Thomas錯誤。 'ptr' *是*類型的變量*指向int的指針* – kotlomoy

相關問題