如果我有以下内容:
vector<int> v(4,0);
vector<int>* p = &v;
int element = p[0];
元素与v[0]
的值是否相同?我在这里对[]
运算符感到困惑。
答案 0 :(得分:8)
简答:不。
你所拥有的甚至不是有效的C ++。 p[0]
与*p
相同,其类型为vector<int>
,因此无法转换为int
。
[]
- 符号仅表示您将p
视为向量的数组,并且您正在访问数组的第一个元素,即{{1} }。更一般地说,对于任何指针v
,符号p
与p[k]
相同(实际上是错误,因为您可以互换地说*(p + k)
和a[5]
)。
因此,如果您真的想要,可以为向量的5[a]
元素编写p[0][i]
,但更习惯的是只写i
(正确所需的括号)优先级)。
当我第一次浏览这个问题时,我认为你可能正在寻找一些聪明的黑客,并想知道(*p)[i]
是否等于**(int**)(p)
。这确实是合理的,因为向量数据结构的第一个元素通常是指向向量内部缓冲区的指针。不要在家里使用它。
答案 1 :(得分:6)
对于任何指针p
,p[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]
获取值。