对指针进行初始化或赋值只能使用以下四种的值:
1、0值常量表达式,例如,在编译时可获得0值的整型const对象或者字面值常量0
2、类型匹配的对象的指针。
3、另一对象末的下一个地址
4、同类型的另一个有效指针
把int型变量赋给指针是非法的,尽管此int型变量的值可能为0。但允许把数值0或在编译时可获得0值的const量赋给指针。
int ival; int zero = 0; const int c_ival = 0; int *pi = ival // error:pi initialized from int value of ival pi = zero; //error:pi assigned int value of zero pi = c_ival; // ok:c_ival is the const with complie-time value of 0 pi = 0;//ok
除了使用数值0或在编译时为0值的const量外,还可以使用C++语言从C语言中继承下来的预处理器变量为NULL,该变量在cstdlib头文件中定义,其值为0。如果代码中使用这个预处理器变量,则编译时会自动被0给替换。因此把指针初始化为NULL与初始化为0是等效的