指针
在程序运行的时候,代码以及数据都会存在内存当中,内存是有序的字节序列,而变量都会直接分配一定的内存的字节单元,我们可以通过直接按名字访问,也可以用第二种方法,既通过内存的地址访问所需的内容,这就需要一种新的内存单元,那就是指针。
指针保存着一个对象的地址,或者可以说指向这个对象,其中内存存储的是其指向元素的地址,可以间接调用。
指针变量的定义:
int *pi; //定义一个存放int类型的指针,可以指向int元素。同理,只需要换换类型就好
int* pi; //效果同上;
int* pi,pi2;只有pi是指针,而pi2不是
指针可以间接的改变对象的元素,如:
int x=100;
int *pi=&x;
*pi=10;
这样x=10;间接的操控pi指向的x;
指针一般定义都需要进行初始化,切记不可乱指向,可能会导致程序崩溃,一般的初始为空指针方法:
int *pi=0;
int *pi=nullptr;
int *pi=NULL;
不可以间接通过变量0来让他成为空指针;
可以通过算术运算来进行地址值的增加与改变
如pi++ 如果是int加四个字节,是char加一个字节。
迭代器--iterator
迭代器是连接stl(标准模板库)中容器与算法的桥,一些容器如set需要用迭代器才可以指向元素与运用,但vector可以直接直接通过下标的方式进行输出,但不可更改,
定义:
vector<int>::iterator iter;
*iter 解引用,既指向元素,可用于输出,一般先使iter指向容器的初始地址。例如iter=s.begin();
const vector<int>s; 使iter=s.begin();
等同于 vector<int>s; 使iter=s.cbegin();
iter+=n;加法的复合赋值。也可以减法;
iter++;指向容器的下一个元素;
iter+n;指向加到第n个元素,也可以减;
可以通过==或!=进行判断指向元素是否相同;
总体来说,迭代器类似于指针,提供对象间接访问,但迭代器适用类型更为少,更适于在容器中适用