2011-07-22 112 views
7

我的道歉,我知道指針,數組等等有一百萬個問題,雖然基本上這是我似乎無法找到任何指向(哈哈!)的答案。獲取指針的地址

我有一個被初始化爲指向的內存塊的指針,我明白,我可以訪問類似於我怎麼會一個數組這個內存:

char *mMem=new char[5000]; 
cout<<mMem[5]<<endl; 

這實際上是:

char *mMem=new char[5000]; 
cout<<*(mMem+5)<<endl; 

我不明白,雖然是如何獲得元素的地址 - 我知道,元素是不太考慮MMEM正確的字是不是數組 - 這就是如果我的理解是正確的,但不能太確定,因爲看起來每個站點都會在指針和數組中使用任何想要的單詞。所以,如果我有:

char *mMem=new char[5000]; 
cout<<mMem[5]<<endl; 
    or 
cout<<*(mMem+5)<<endl; 

爲什麼運營商的地址無法正常工作:

cout<<&mMem[5]<<endl; 

非但沒有第5個元素的地址,我得到一個打印出來的內存塊內容從那個元素開始。那麼,爲什麼操作員的地址不能像我期待的那樣工作?我如何獲取內存元素的地址?

回答

14

&mMem[5]第5個元素的地址。之所以能從這裏打印出內存,是因爲它們的類型&mMem[5]char*,但傳統C中的字符串也是char*,所以<<運算符只是認爲您想要從那裏打印字符串。我會嘗試在打印之前鑄造指針void*

cout << static_cast<void*>(&mMem[5]) << endl; 

順便說一句,&mMem[5]mMem+5是一樣的。

4

您正在按照預期獲取元素5的地址,但char *cout打印功能將打印出該內存位置的字符串內容,而不是指針值。

將指針轉換爲int:cout << (int)&mMem[5];,並且應該打印地址。