【发布时间】:2018-04-03 12:29:08
【问题描述】:
我在http://www.cplusplus.com/reference/vector/vector/data/ 中找到了 std::vector 的示例。
// vector::data
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (5);
int* p = myvector.data();
*p = 10;
++p;
*p = 20;
p[2] = 100;
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); ++i)
std::cout << ' ' << myvector[i];
std::cout << '\n';
return 0;
}
结果是
myvector contains: 10 20 0 100 0
我的问题可能很愚蠢,但我真的不明白这里发生了什么。我们得到了一个指向向量内存的直接指针。然后我们为第一个元素(索引 0)分配值 10,移动到第二个元素并为其分配值 20(索引 1)。最后,我们为第三个元素(索引 2)分配值 100。答案应该是这样的吗?
10 20 100 0 0
【问题讨论】:
-
p[2]没有访问第三个元素(它正在访问第四个元素,如您的结果所示)。请记住,您已经增加了p。 -
@max66:我认为这个问题与由“简单的印刷错误”引起的问题属于同一领域。因此,我个人更喜欢在评论中添加一个非常简单的解释(所以 OP 仍然会得到帮助;我并非完全无情),同时也投票结束。
-
将
p[2]视为p + 2可能有助于您理解。这可能只是不使用 cplusplus.com 的一个很好的理由,因为他们的示例中令人困惑的部分与data无关 -
标题不太可能帮助任何人找到问题,即使他们有同样的问题。如果您希望问题保持开放,我建议让问题更容易理解:提到指针、索引、指针算术……可能更具描述性。
-
@MatthieuM。标题可能不是特别具有描述性,但我认为改进的标题不会对这个问题有太大帮助,因为这个问题似乎归结为对指针运算的普遍缺乏理解,忘记了
++p或混淆了 @987654331 @ 与myvector[2].