一、定义和赋值一个普通对象
int ival = 1024;
如上述代码所示,将ival定义为一个int对象,并给予初始值1024。
二、指针对象的声明
int *pi;
1、如上述代码所示,当定义/声明某个特定类型的指针时,要在类型名称后加一个*号。
2、在这里,pi是int类型对象的指针。
三、指针的初始值
int *pi = &ival;
如上述代码所示,若希望取得对象所在的内存地址而非对象的值,应在对象前加一个取址运算符&。
四、提领操作(dereference)
if (*pi != 1024) // 读取ival的值
{
*pi = 1024; // 写值到ival中
}
1、如上述代码所示,如果要访问一个由指针所指的对象,必须将该指针进行提领操作。(就是取得位于该指针所指内存地址上的对象)
五、指针的双重性质
1、操作指针包含的内存地址。(pi)
2、操作指针所指的对象值。(*pi)
六、指针最需要注意的点
1、声明一个指针时,可能会(也可能不会)使指针不指向任何一个对象,从而发生报错。
2、pi定位到某个对象,则对pi提领(dereference)不会出错。
3、pi没有指向任何对象,则提领pi会导致未知的执行结果。
4、以上,在使用指针时,必须在提领前确定这个指针指向某个对象,代码如下:
// 初始化指针pi,使它不指向任何对象。
// 任何指针都可以被初始化或是令它为0。
int *pi = 0; // 地址为0代表不指向任何指针,有时我们把它称为null指针。
// 为了防止null指针的提领操作,如下if语句可以检验pi所持有的地址是否为0
if (pi && *pi != 1024)
*pi = 1024;
5、检验指针是否为null(未指向任何对象)
if(!pi) // pi为0时,取反,在下面代码块中将pi指向一个对象,使其不为0。
{
// 代码
}