空指针和void*指针

<span style="font-family: Arial, Helvetica, sans-serif;font-size:18px; background-color: rgb(255, 255, 255);">空指针</span>
<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="cpp"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">空指针不指向任何对象,在试图使用一个指针之前可以检查它是否为空。以下列出几个生成空指针的方法:</span>
 

int *p1=nullptr;
int *p2=0;
int *p3=NULL;

 
得到空指针最直接的办法就是用字面值nullptr来初始化指针,这是C++11新标准引入的一种方法。nullptr是一种特殊类型的字面值,它可以被转换成任意其他的指针类型。另一种方法就如对p2的定义一样,也可以通过将指针初始化为字面值0生成空指针。 

过去的程序还会用到一个名为NULL的预处理变量来给指针赋值,这个变量在头文件cstdlib中定义,它的值就是0.在新的标准下,现在的C++程序最好使用nullstr,同时尽量避免使用NULL。

只要指针拥有一个合法值,就能将它用在条件表达式中。和采用算术值作为条件遵循的规则类似,如果指针的值为0,条件取false:

int ival=1024;
int *pi=0;    //pi合法是一个空指针
int *pi2=&ival;  //pi2是一个合法的指针,存放着ival地址
if(pi)   //pi的值是0,因此条件的值是false
   .......
if(pi2)  //pi2指向ival,因此它的值不是0,条件的值是true
   .......

void* 指针

void*是一种特殊类型的指针,可用于存放任意对象的地址。但是我们对该地址中到底是一个什么类型的对象并不了解。
double obj=3.14,*pd=&obj;
void *pv=&obj; //正确,void*可以存放任意类型对象的地址,obj可以是任意类型的对象
pv=pd;        //pv可以存放任意类型的指针
利用void*指针能做的事情比较有限:拿它和别的指针比较,作为函数的输出和输入,或赋给另外一个void*指针。不能直接操作void*指针所指的对象。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值