在C和C++中NULL的区别

来源:互联网 发布:淘宝上有正规药店吗 编辑:程序博客网 时间:2024/06/05 21:58

1.在c和c++中特定指针与通用指针相互赋值的问题

特定指针 如:int ,char ,float *
通用指针 如:void*

int main(){  int a=10;  int *p=&a;  char b='y';  char *cp=&b;  void *vp=cp; //特定指针赋给通用指针  //cp=vp;  //通用指针赋给特定指针,在c中可以,在c++中不可以  return 0;}

(1)在c和c++中,特定指针可以赋给通用指针,用于临时存储地址,但缺点是:一是因为没有类型,无法确定内存大小,因此无法解引用;二是无法调整权重,所以不能进行算术运算

(2)在c中,通用指针可以赋给特定指针,但在c++中,通用指针不可以赋给特定指针,在c++中这样规定是为了杜绝不同类型的指针相互赋值

2.c和c++中的NULL的不同定义

在c中,NULL 即(void *)0
在c++中,NULL 即 0
注意:
(1)其实在c中,NULL 也可以是 0,但是因为c语言当时没有考虑到0的问题,已经规定了NULL 为(void *) 0
(2)假如在c++中NULL是(void*)0,则int * p=NULL即 int * p =(void *) 0,这在c++中编译是无法通过的,因为c++中通用指针不可以赋给特定指针。所以在c++中NULL 是 0