std :: vector <int>和std :: vector <int> *之间有什么区别?

时间:2017-04-24 11:13:03

标签: c++ pointers vector

我很好奇std::vector<type>与指向此std::vector<type>*的指针之间的区别。它是一回事吗?

2 个答案:

答案 0 :(得分:3)

没有。它们是不同的类型。指针只是内存中指向类型向量的地址(如果没有为它指向它,则为null)。取消引用指针将获得它指向的类型向量(如果它没有指向任何东西,则为未定义的行为)。指针类型的大小足以在内存中保存地址值。

示例(假设myVector是一个如下所示的向量:{1,2,3})

// pVector points to myVector but it is not myVector. It is the ADDRESS of myVector.
vector<int>* pVector = &myVector;

cout << pVector; // prints out some address in memory like 0x3847583 or whatever.

cout << (*pVector)[0]; // prints out 1 since you dereferenced the pointer

基本上,pVector是myVector的地址,* pVector和myVector现在评估相同的东西。但是你总是可以让pVector指向一个不同的向量,或者根本不指向任何向量(null)。

pVector = &anotherVector; // now it points to a different vector
pVector = null; // now it points to nothing

答案 1 :(得分:0)

类型声明后的*表示您声明了一个指针,它可以指向现有对象,但它本身不是对象。如果声明一个指针,你只需要分配少量内存(大到足以存储一个地址),但是如果你声明一个对象,你可以分配内存来保存该对象的整个内容。

注意:避免取消引用不指向现有对象的指针。

std::vector<int>* vPointer;
vPointer->push_back(6);

上面的代码会导致未定义的行为。