mah*_*ood 0 c++ pointers stdvector
对于这段代码,我使用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;
}
Run Code Online (Sandbox Code Playgroud)
这会产生
myvector contains: 10 20 0 100 0
Run Code Online (Sandbox Code Playgroud)
问题是为什么p[2]是0?假设myvector.data()是一个指向第一个元素(索引 0)的指针,那么p[0]就是 10 就可以了。++p指向下一个元素,即p[1]20,这也很好。现在,p[2]是 后的下一个元素p[1]。所以,顺序应该是10 20 100。这里有什么错误吗?
您将指针初始化p为指向myvector[0]。
然后你增加p,所以现在它指向myvector[1]。
如果我们把它画出来,那就是这样的:
+-------------+-------------+-------------+-------- ------+-------------+
| 我的矢量[0] | 我的矢量[1] | 我的矢量[2] | 我的矢量[3] | 我的矢量[4] |
+-------------+-------------+-------------+-------- ------+-------------+
^
|
p
现在是重要的部分:对于任何指针或数组p和索引i,表达式完全p[i]等于。*(p + i)
这意味着p[2]您的代码与*(p + 2). 由于p指向向量的第二个元素,p + 2因此将指向第四个元素。
再次把它画出来:
+-------------+-------------+-------------+-------- ------+-------------+
| 我的矢量[0] | 我的矢量[1] | 我的矢量[2] | 我的矢量[3] | 我的矢量[4] |
+-------------+-------------+-------------+-------- ------+-------------+
^^^^
| | | |
pp + 1 p + 2 p + 3
因此,当您写入p[2]then 时,它与写入 to 相同myvector[3]。
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |