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是的,你可以这样做,而这个问题是误导性的,因为它显示了上面的代码,好像它是有效的,而它不是也不会编译。