指针的类型只取决于操作系统的位数,因为存放的是地址信息,例如32位系统,不论什么类型的指针,都是4byte=32bit;
数组变量名相当于const类型的指针,如int a[], a 就相当于一个 int* ;
const 类型的指针,其所指地址是可以修改的,但是存在该地址的value是不能修改的;
vector类型在定义时初始化,等同于先定义,再使用了assign方法;
若想在函数中修改指针类型实参的指向并返回,有两种办法,第一种是直接返回指针类型;第二种是传入指向该指针的指针,如:
void example(int **p, int *q) {
*p = q;
}
int main()
{
int a(0), b(1);
int *p(&a), *q(&b);
example(&p, q);//传入p的地址
cout << *p << endl;//输出结果为1,即q指向的地址的值
}
指向常量的指针
const int *p,表示指向常量的指针,按照C++
中复合类型声明的理解从右到左看,p是一个指针,指向const
int,表示的意义就是不能通过p来修改p指向的值,而p本身所指向的地址是可以修改的。(此处也可以写成int const *p是一样的)
常量指针
int *const p,表示p本身是一个const,所以p所指的地址不会变,但是地址里的值是可以修改的。
free操作会删除指针所指的对象,释放其地址,指针指向的地址仍然不变;delete 功能一致,但是区别在于delete会调用对象的析构函数,而free不会,我推测原因可能是free是从C语言继承过来的,而C语言并没有面向对象机制。
2018/3/29
在函数的参数列表中,要记住&的作用始终是表示传地址而不是表示取地址,比如:
void add_(int * &a) {
++a;
}
这里的&表示对a这个指针取地址,而不是我之前理解的对a这个reference取地址,再提领(我之
前以为这里先取地址再提领表示还是a本身)。所以,在这个函数里对该指针所指的地址进行操
作会影响该地址的对象,同时若对该指针进行操作也会改变原函数中的这个指针。