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 个元素的地址,而是从该元素开始打印出内存块内容。那么,为什么操作符的地址没有像我预期的那样工作,我怎样才能得到内存元素的地址呢?

4

2 回答 2

14

&mMem[5] 第 5 个元素的地址。从那里打印出内存的原因是因为它们的类型是&mMem[5]is char*,但传统 C 中的字符串也是 of char*,所以<<操作员只是认为你想从那里打印一个字符串。我会尝试void*在打印之前将指针转换为 a:

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

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

于 2011-07-22T08:18:37.710 回答
4

您将按预期获得元素 5 的地址,但 a 的cout打印功能char *是打印出该内存位置的字符串内容,而不是指针值。

将指针转换为 int:cout << (int)&mMem[5];并且您应该打印出地址。

于 2011-07-22T08:18:41.373 回答