空指针和void*指针
2015-08-24 15:50
260 查看
空指针不指向任何对象,在试图使用一个指针之前可以检查它是否为空。以下列出几个生成空指针的方法:
得到空指针最直接的办法就是用字面值nullptr来初始化指针,这是C++11新标准引入的一种方法。nullptr是一种特殊类型的字面值,它可以被转换成任意其他的指针类型。另一种方法就如对p2的定义一样,也可以通过将指针初始化为字面值0生成空指针。
过去的程序还会用到一个名为NULL的预处理变量来给指针赋值,这个变量在头文件cstdlib中定义,它的值就是0.在新的标准下,现在的C++程序最好使用nullstr,同时尽量避免使用NULL。
只要指针拥有一个合法值,就能将它用在条件表达式中。和采用算术值作为条件遵循的规则类似,如果指针的值为0,条件取false:
void* 指针
void*是一种特殊类型的指针,可用于存放任意对象的地址。但是我们对该地址中到底是一个什么类型的对象并不了解。
double obj=3.14,*pd=&obj;
void pv=&obj; //正确,void可以存放任意类型对象的地址,obj可以是任意类型的对象
pv=pd; //pv可以存放任意类型的指针
利用void*指针能做的事情比较有限:拿它和别的指针比较,作为函数的输出和输入,或赋给另外一个void*指针。不能直接操作void*指针所指的对象。
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*指针所指的对象。
相关文章推荐
- [LeetCode] World Search(!!!!回溯&&char *代替string&&递归)
- 设置textField的placegolder的字体大小和字体颜色
- 获取签名公钥
- PHP字符串比较
- selenium 找元素的方法
- 单线程中fgets阻塞select/poll/epoll的解决方法
- Apache和php的关系
- Java Eclipse(mac)环境使用maven 加载spring,hibernate 及java的一些配置
- Rabbit Party
- tesseract单个汉字识别为两个字解决
- Codeforces 313B : Ilya and Queries
- NSUserDefaults
- 用标准C编写COM dll
- jquery+html5烂漫爱心表白动画代码分享
- Yii2中验证码的使用
- 【Loadrunner】初学Loadrunner——IP欺骗
- POJ 1273 网络流(EK,Dinic,ISAP)
- jsp直接读取mysql数据库内容
- UE4 Light Propagation Volumes
- 不用栈检查小括号、中括号、大括号的匹配