【发布时间】:2017-04-27 22:55:36
【问题描述】:
我知道在向量上使用原始指针并不是最好的方法,因为它很聪明, 但我的问题只是要理解一些我无法理解的东西...... 如果我创建了一个向量,然后是一个指向它的指针:
vector<int> vec = {1,2,3,4,5};
vector<int> *ptr = &vec;
- 为什么需要使用引用运算符
&而数组不需要它? (不是向量动态数组) - 为什么如果我写
cout<<*ptr<<endl;,编译器会报错,我必须写cout<<(*ptr)[1]<<endl;或cout<< ptr->at(1)??
通常,如果您创建一个指向数组的指针,该指针指向第一个元素。
你能帮我了解一下什么是动物载体吗?
【问题讨论】:
-
如果您创建了指向数组
int arr[20] = {1,2,3,4,5}; int (*ptr)[20] = &arr;的指针,上述两点也不适用。 -
向量的行为类似于动态分配的数组,在内部它们是动态分配的数组。然而,那里的关键词是“内部”。你不知道指向向量的指针也是指向第一个向量元素的指针。您可能正在获取内部大小计数器,或指向动态数组的指针,或任何数量的其他“内部”,实现定义的值。
-
为什么我需要使用引用运算符(&)_。嗯.. 它不是引用运算符.. 它是一个 _address-of 运算符,它完全按照您的意愿 - 获取
vec变量的地址。
标签: c++ arrays pointers vector