C语言 NULL 和 0 区别

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门


一.关于 NULL 定义

NULL 在 stdio.h 中定义如下:

#if !defined(NULL) && defined(__NEEDS_NULL)
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

二.NULL 和 0 区别

C 语言中,NULL 和 0 的值都是一样的,但是为了目的和用途及容易识别的原因,NULL 用于指针和对象,0 用于数值;

#include<stdo.h>
int main()
{
    int *p=NULL;
    printf("%s",p);
 
}

/*
输出:
0x00000000
*/

由上面代码可以看出:NULL 在实际底层调用中就是 0 ;


在不同的系统中,NULL 并非总是和 0 等同,NULL 仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将 0 作为不被使用的地址,所以就有了类似这样的定义

#define NULL 0

但并非总是如此,也有些系统不将 0 地址作为 NULL ,而是用其他的地址,所以说,千万别将 NULL 和 0 等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。


三.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start 宏
  21. C语言 va_end 宏
  22. C语言 va_arg 宏
  23. C语言 vprintf 函数
  24. C语言 va_start / va_end / va_arg 自定义 printf 函数
  25. C语言 main 函数
  26. C语言 main 函数参数 main(int argc, char *argv[])
  27. C语言 exit 函数
  28. C语言 abort 函数
  29. C语言 assert 函数
  30. C语言 NULL 和 0 区别

未经允许不得转载:猿说编程 » C语言 NULL 和 0 区别
喜欢(3) 打赏

评论抢沙发

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏