目录
1.指针;
指针本身就是一个变量,其符合变量定义的基本形式,它存储的值是地址。对于一个基本类型T,T* 是“到T的指针”类型,一个类型为T*的变量能够保存一个类型T的对象的地址。
通过一个指针访问它所指向的地址的过程称为间接访问或者引用指针。这个用于执行间接访问的操作符是单目操作符*。
int a = 1;
//指针定义
int* c = &a;
cout<<c<<endl; //输出a变量的地址
//间接访问
cout<<(*c)<<endl; //等同于cout<<a<<endl;
2.数组的指针;
数组的指针 T(*t)[] :一个指针,指向一个数组。
int c[4] = {1,2,3,4};
int(*b)[4];
b = &c; //数组的个数一定要匹配
//注意,[]的优先级比较高
for(unsigned int i = 0;i<4;i++)
{
a[i] = &(c[i]);
}
cout<<(*b)[3]<<endl; //b是指针,先间接访问取值得到数组,然后取数组下标
3.未初始化的指针和非法指针;
int* a;
*a = 12;//错误
上述操作并没有对指针a进行初始化,也就是说我们并不知道a最终会指向哪里。运气好的话定位到一个非法地址(程序不能访问的地址),程序会出错从而终止。最坏的情况下,a定位到了一个可以访问的地址,这样我们就无意间修改了它,这样的错误难以捕捉,引发的错误与原先用来操作的代码毫不相干,我们根本无法定位。
用指针进行间接访问之前,一定要确保它已经初始化,并且被恰当的赋值。
4.NULL指针;
NULL指针是一个特殊的指针变量,表示不指向任何东西。
int* a = NULL;
对于一个指针,如果已经知道将被初始化为什么地址,那么请给他赋值,否则把它设置为NULL,这样可以有效避免不可确定性访问的问题。