获取指针的地址

时间:2011-07-22 08:15:52

标签: c++ pointers pointer-address

我很抱歉,我知道指针,数组等上有一百万个问题虽然基本没有,但我似乎无法找到任何指向(哈哈!)的答案。

我有一个初始化为指向一块内存的指针,我知道我可以访问这个内存,类似于我的数组:

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个元素的地址,而是从该元素开始打印出内存块内容。那么,为什么运算符的地址不能像我期望的那样工作呢?如何获得内存元素的地址呢?

2 个答案:

答案 0 :(得分:14)

&mMem[5] 第五个元素的地址。您从中获取内存的原因是因为&mMem[5]的类型为char*,但旧版C中的字符串也为char*,因此<<操作员只是认为你想从那里打印一个字符串。在打印之前,我会尝试将指针转换为void*

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

顺便说一下,&mMem[5]mMem+5是一样的。

答案 1 :(得分:4)

您正在按预期获取元素5的地址,但cout的{​​{1}}打印功能是打印出该内存位置的字符串内容,而不是指针值。

将指针强制转换为int:char *,您应该打印地址。