C++ 指向向量的指针是如何工作的?

C++ 指向向量的指针是如何工作的?,c++,C++,如果我有以下资料: vector<int> v(4,0); vector<int>* p = &v; int element = p[0]; 向量v(4,0); 向量*p=&v; int元素=p[0]; 元素的值是否与v[0]相同?我在这里对[]操作符感到困惑。对于任何指针p,p[0]与*p相同。(更一般地说, P[i] < /C>是一个特殊的符号,用于 *(p+i)。Foe:事实上:你也可以写代码> [p] < /C> >,因为 *(p+i)=*(i+p)。

如果我有以下资料:

vector<int> v(4,0);
vector<int>* p = &v;
int element = p[0];
向量v(4,0); 向量*p=&v; int元素=p[0];
元素的值是否与
v[0]
相同?我在这里对
[]
操作符感到困惑。

对于任何指针
p
p[0]
*p
相同。(更一般地说,<代码> P[i] < /C>是一个特殊的符号,用于<代码> *(p+i)。Foe:事实上:你也可以写代码> [p] < /C> >,因为<代码> *(p+i)=*(i+p)。C和C++是奇怪的。)在你的情况下,<>代码> p>代码>是一个指向<代码> v>代码>的指针,你基本上写的是代码> int元素=v;代码>。它不起作用,因为右手边是一个向量。

简短回答:不

你所拥有的甚至不是有效的C++。code>p[0]与

*p
相同,属于
vector
类型,因此不能转换为
int

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

因此,如果您真的愿意,您可以为向量的
i
th元素编写
p[0][i]
,尽管更习惯于只编写
(*p)[i]
(正确的优先级需要括号)



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

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

error: cannot convert ‘std::vector<int>’ to ‘int’ in initialization
错误:无法在初始化中将'std::vector'转换为'int'

从你的编译器。使用
(*p)[0]
获取值。

在(0)处不是
p->。。。?(被当前的答案弄糊涂了。)@muntoo是的,你可以这样做,而这个问题是误导性的,因为它显示了上面的代码,好像它是有效的,而它不是也不会编译。