C++ Null 指针
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
NULL 指针是一个定义在标准库中的值为零的常量。请看下面的程序:
实例
#include <iostream>
using namespace std;
int main ()
{
int *ptr = NULL;
cout << "ptr 的值是 " << ptr ;
return 0;
}
using namespace std;
int main ()
{
int *ptr = NULL;
cout << "ptr 的值是 " << ptr ;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
ptr 的值是 0
在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。
如需检查一个空指针,您可以使用 if 语句,如下所示:
if(ptr) /* 如果 ptr 非空,则完成 */ if(!ptr) /* 如果 ptr 为空,则完成 */
因此,如果所有未使用的指针都被赋予空值,同时避免使用空指针,就可以防止误用一个未初始化的指针。很多时候,未初始化的变量存有一些垃圾值,导致程序难以调试。
Hacker
204***6133@qq.com
之前一直不知道 NULL 到底是怎么一回事,但是其实我们用 vs2013 可以看到,NULL 的定义就是:
我们可以用这个程序直观地看到,NULL 的本质。
程序运行结果为:
Hacker
204***6133@qq.com
barwe
995***q.com
如果将指针 p 指向一个初始化好的变量 a 的内存地址,我们可以正常通过 p 和 *p 访问指针 p 存储的地址值和它指向的内存地址存储的值。
如果我们将 NULL 赋值给指针 p,打印指针变量p存储的地址值发现为 0,而尝试打印指针变量 p 指向的内存地址(0)存储的值会得不到任何信息,因为程序不允许访问地址为 0 的内存。
barwe
995***q.com
Sodiums
851***543@qq.com
参考地址
空指针不提倡使用NULL来表示,
C++11标准后,用nullptr来表示空指针。
下面是cppreference的示例:
输出:
Sodiums
851***543@qq.com
参考地址