我很抱歉,我知道指针,数组等上有一百万个问题虽然基本没有,但我似乎无法找到任何指向(哈哈!)的答案。
我有一个初始化为指向一块内存的指针,我知道我可以访问这个内存,类似于我的数组:
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个元素的地址,而是从该元素开始打印出内存块内容。那么,为什么运算符的地址不能像我期望的那样工作呢?如何获得内存元素的地址呢?
答案 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 *
,您应该打印地址。