2011-07-22 113 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];,并且应该打印地址。