在C++中,使用数组的时候,编译器一般会把它转换成指针
本质:
- 在使用到数组名的地方,编译器会自动的将其替换为一个指向数组首元素的指针
所以,在一些情况下,数组的操作实际上是指针的操作
- 指针也是迭代器,vector和string支持的运算,数组的指针也全部支持
特点:
- 当数组作为一个auto 变量的初始值时,得到的推断是指针,而不是数组。
int arr1[]={1,2,3};
auto arr2(arr1); //arr2 是一个整型指针,指向arr1的第一个元素
arr2=4; //错误,arr2 是指针
//编译器内部实际上发生了以下的转换
auto arr2(&arr[0]); //所以arr2 是int* 类型
- 通过指针也能遍历数组中的元素,我们只需要得到数组第一个元素的指针和尾元素下一个位置的指针
在C++ 11 中引入了begin 和 end 函数,其功能与容器中的两个同名成员函数类似
int arr[]={1,2,3};
int* beg = begin(arr); //指向arr首元素的指针
int* last = end(arr); //指向arr尾元素的下一个位置指针
//使用指针遍历数组
while (beg != last) {
cout << *beg << endl;
beg++;
}
-
给指针加上某个整数,结果仍为指针。
-
两个指针相减的结果是他们之间的距离。参与运算的两个指针必须指向同一个数组当中的元素
如果两个指针分别指向不相关的对象,则不能比较他们。
总结:
- 使用数组类型的对象,实际上是使用一个指向该数组首元素的指针
- 指针也是迭代器。所以给指针加上某个整数,相当于新指针位移了改整数的位置