我很好奇std::vector<type>
与指向此std::vector<type>*
的指针之间的区别。它是一回事吗?
答案 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);
上面的代码会导致未定义的行为。