1

请看下面的代码:

#include <vector>
#include <iostream>
int main(int argc, char *argv[]) {
  std::vector<double> obj(10,0);
  std::cout << &obj << std::endl;
  std::cout << &obj[0] << std::endl;
}

我想知道这两个地址之间的区别&谢谢!a[5]据我所知,对于像&a<=> &a[0]<=>这样的数组a

4

4 回答 4

7

&obj是向量本身的地址,而&obj[0]是向量内部数据的地址。数组只不过是存储在其中的数据,因此数组的地址实际上与其中数据的地址相同,而向量在堆上分配其内部数据。

于 2012-07-27T09:58:22.247 回答
2

也许这有帮助

struct MyVector
{
  double* data;
};

int main
{
  MyVector obj;
  cout << &obj << std::endl;
  cout << obj.data << std::endl;
}

显然(我希望)这两个指针是不同的。这与 std::vector 相同。

于 2012-07-27T10:10:14.570 回答
1

&obj 是栈上向量的地址。它的类型是“指向向量的指针”( std::vector* )。而 &obj[0] 是存储在向量中的第一个 double 的地址,并且是“指向 double 的指针”(double*) 类型。

于 2012-07-27T10:01:53.230 回答
1

我感觉您误解了 std::vector 和数组之间最基本的区别。我的意思是,例如

int i_array [ 5 ] = { 0 };

不是向量。向量是一个类,而 i_array 只是一个指向数组第一个整数的指针。(并且在指针上使用 [] 与在向量对象上使用 [] 不同)在使用向量的 [] 运算符时,您只是在访问返回对第一个整数(或双精度)的引用的类的函数在您的情况下)由类向量管理的数组。

So &obj gives you the pointer for your instance of the vector, your object, "this", while &obj[0] first calls operator [] which returns a reference to the first entry of your array, and with & you get the address of it.

于 2012-07-27T10:39:47.480 回答