如果我有以下内容:

vector<int> v(4,0);
vector<int>* p = &v;
int element = p[0];


元素的值是否与v[0]相同?我对[]运算符感到困惑。

最佳答案

简短的回答:不。

您拥有的甚至不是有效的C ++。 p[0]*p相同,后者是vector<int>类型,因此不能转换为int

[]标记仅表示您将p视为向量数组,并且正在访问数组的第一个元素,即v。更一般而言,对于任何指针p,符号p[k]均与*(p + k)相同(实际上是故障,因为您可以互换地说a[5]5[a])。

因此,如果确实愿意,可以为向量的第p[0][i]个元素写i,尽管习惯上只写(*p)[i](正确优先级需要用括号括起来)。



当我初次浏览该问题时,我以为您可能正在寻找一些聪明的技巧,并且想知道**(int**)(p)是否等于v[0]。这确实是合理的,因为向量数据结构的第一个元素通常是指向向量内部缓冲区的指针。不要在家使用。

关于c++ - 指向 vector 的指针如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8161476/

10-11 22:52
查看更多