lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
C++中NULL指针引发的一个小问题
2019-04-23 16:18:41
349
0
0
lee-romantic
前面也有讲到,C++中`NULL`是0指针常量,是0的宏定义。看下面代码: ``` int* pn = NULL; //int* pn = new int(1); int* pm = new int(2); int *pc = new int(3); pm = pn; pn = pc; //*pn = 4;//错误,空指针无法解引用 cout << *pm; ``` 结果会报错,`pm是nullptr`,怎么会这样呢?我们不是已经`pn=pc`了吗?,`pc`不是`nullptr` 啊? 问题还是在于之前提到的,`指针之间的赋值,还是复制的`,比如pn =pc,pn和pc是两个不同的指针,这点很重要!!!只是它们指向的地址是一样的而已。因此,你哪怕修改了pn为pc,pm依然指向的是之前的pn指向的那个NULL!!! 因此,哪怕`pn`不是空指针,改成下面这样,修改`pn =pc`,结果依然无法改变`pm`的值! ``` //int* pn = NULL; int* pn = new int(1); int* pm = new int(2); int *pc = new int(3); pm = pn; pn = pc; //*pn = 4; //错误,空指针无法解引用 cout << *pm;// 输出1 ``` 以上的代码,可以考虑改成: ``` int* pn = NULL; //int* pn = new int(1); int* pm = new int(2); int* pc = new int(3); pn = pc; pm = pn; cout << *pm; ``` 以上的代码主要应用在,`pm`需要等于(或者说指向)`pn`所指向的对象,但是通常由于一次遍历的要求,`pn`经常是要比`pm`晚出现,如果像我们开头那样写,就大错特错啦。解决办法就是,确定了`pn`后再对`pm`赋值,而不是先用`pn`对`pm`赋值,后面才确定`pn`。 总结: 指针依然是普通的对象,或者说变量,只不过其存储的是其他变量或者对象的地址而已!
上一篇:
C/C++同一数组中保存多种数据类型的相关问题探讨
下一篇:
C++中NULL和nullptr
0
赞
349 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册