2011-11-17 51 views
0

如果我有以下几点:指向矢量的指针是如何工作的?

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

威尔元素是相同的值作为v[0]?我在这里对[]运营商感到困惑。

+1

难道不是'p->在(0)'...? (被当前答案困惑) –

+1

@muntoo是的,你可以这样做,这个问题是误导性的,因为它提供了上面的代码,就好像它是有效的,当它不是,也不会编译。 –

回答

8

简答:没有。

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

[] -notation仅仅表明,您想的p作为矢量的阵列,和要访问的数组的第一个元素,该元素是v。更一般地,对于任何指针p,符号p[k]*(p + k)相同(实际上是错误的,因为可以互换地说a[5]和)。

所以,如果你真的想,你可以写p[0][i]作为向量的i th元素,尽管只写(*p)[i](正确优先级所需的括号)更习惯。


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

6

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

4

不,p它是一个指向矢量的指针,而不是内容!如果你尝试编译,你会得到类似于你的编译器的

error: cannot convert ‘std::vector<int>’ to ‘int’ in initialization 

。使用(*p)[0]来获得价值。