C++中如何定义空指针

2025-02-23 04:43:11
推荐回答(5个)
回答1:

在C++11(C++0x)里,空指针有了一个官方版的表示:nullptr。

一种方法是定义一个NULL宏(#defineNULL0)来表示空指针,虽然本质上和直接写成0一样,但NULL能相对直观地表示这是个指针。  

一些知名头文件里就带有NULL的定义,比如windows.h和stdio.h。直接用NULL似乎是个不错的主意。  

有时候源文件中并不需要引用到这些知名头文件,那么NULL就要由自己来定义。

另外,NULL可以由自己定义,这意味着NULL完全有可能被定义成其他东西(少见)。因为NULL并非标准,所以有人可能自己定义了Null或null或其他东西(少见),这会带来混乱。  

那么直接用0来表示空指针好了。用0表示写起来简单,而且0就是0,不会有其他定义,只是不那么直观。

扩展资料:

当通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:  

int*ptr;//指针所指向的类型是int  

char*ptr;//指针所指向的的类型是char  

int**ptr;//指针所指向的的类型是int*  

int(*ptr)[3];//指针所指向的的类型是int()[3]  

int*(*ptr)[4];//指针所指向的的类型是int*()[4]

参考资料来源:百度百科-C++

参考资料来源:百度百科-指针

回答2:

【C++11空指针】
  早在 1972 年,C语言诞生的初期,常数 0 带有常数及空指针的双重身分。 C 使用 preprocessor macro NULL 表示空指针, 让 NULL 及 0 分别代表空指针及常数 0。 NULL 可被定义为 ((void*)0) 或是 0。
C++ 并不采用 C 的规则,不允许将 void* 隐式转换为其他类型的指针。 为了使代码 char* c = NULL; 能通过编译,NULL 只能定义为 0。 这样的决定使得函数重载无法区分代码的语义:
void foo(char *);
void foo(int);

C++ 建议 NULL 应当定义为 0,所以foo(NULL); 将会调用 foo(int), 这并不是程序员想要的行为,也违反了代码的直观性。0 的歧义在此处造成困扰。
C++11 引入了新的关键字来代表空指针常数:nullptr,将空指针和整数 0 的概念拆开。 nullptr 的类型为nullptr_t,能隐式转换为任何指针或是成员指针的类型,也能和它们进行相等或不等的比较。 而nullptr不能隐式转换为整数,也不能和整数做比较。
为了向下兼容,0 仍可代表空指针常数。
char* pc = nullptr; // OK
int * pi = nullptr; // OK
int i = nullptr; // error

foo(pc); // 呼叫 foo(char *)

回答3:

p1 nullptr 是C++11才支持的,使用vs2013或者g++ 4.8以上
p2 正确
p3 需要自己定义NULL 一般C++定义为#define NULL 0
PS vs2013都还不能完全支持C++11,g++4.8支持了全部的C++11特性

回答4:

int *p3 = NULL;正确。。
不过貌似你打的是“:”冒号,不是“;”分号

回答5:

我按你的代码输入没有问题,我用的是vs2012