指向矢量的指针是如何工作的?

时间:2011-11-17 02:46:17

标签: c++

如果我有以下内容:

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

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

3 个答案:

答案 0 :(得分:8)

简答:不。

你所拥有的甚至不是有效的C ++。 p[0]*p相同,其类型为vector<int>,因此无法转换为int

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

因此,如果您真的想要,可以为向量的5[a]元素编写p[0][i],但更习惯的是只写i(正确所需的括号)优先级)。


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

答案 1 :(得分:6)

对于任何指针pp[0]*p相同。 (更一般地说,p[i]*(p+i)的特殊符号。有趣的事实:你也可以写i[p],因为*(p+i) == *(i+p)。C和C ++很奇怪。)所以在您的情况下,p是指向v的指针,您基本上是在撰写int element = v;。它不起作用,因为右侧是矢量。

答案 2 :(得分:4)

不, p 它是指向矢量的指针,而不是内容!如果您尝试编译,则会得到类似

的内容
error: cannot convert ‘std::vector<int>’ to ‘int’ in initialization
来自编译器的

。使用(*p)[0]获取值。