如果我有以下内容:
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/