C语言-NULL的值到底是什么?

编程技巧

废话不多说,直接上代码 NULL 的值定义在stdio.h文件中

/* Define NULL pointer value */

#ifndef NULL
#ifdef  __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

进行预编译的时候,首先判断当前NULL是否定义,如果未定义,则判断__cplusplus
是否定义,如果定义了则NULL的值为0如果*未定义则NULL的值为((void )0) 指向0地址的void类型的指针

#ifdef  __cplusplus
extern "C" {
#endif

也许你会问**__cplusplus**是什么,如果当前是C++环境则定义了__cplusplus,如果当前是C环境则未定义__cplusplus,简而言之识别,是c代码还是c++代码。
所以在C++代码中NULL值为0,C代码中NULL值为 ((void *)0)

在C语言里,NULL是一个重要的概念,其本质是0,但这个0是按内存地址解析,代表内存的0地址,(void *)0表示一个指针,该指针变量的是0,即指向0地址 [^4]。NULL在C语言中有以下作用: - **初始化指针**:在定义指针变量时,若暂时不清楚要让它指向何处,可将其初始化为NULL,以此避免产生野指针。野指针指向的内存区域是未知的,对其进行解引用操作可能会引发不可预测的结果,甚至导致程序崩溃。 ```c #include <stdio.h> int main() { int *p = NULL; // 此时p不指向任何有效的内存地址 return 0; } ``` - **作为特殊标记**:在使用指针前,可通过检查指针是否为NULL来判断其是否有效。在释放指针所指向的内存后,也可将指针赋NULL,防止出现悬空指针(指向已释放内存的指针)。 ```c #include <stdio.h> #include <stdlib.h> int main() { int *p = NULL; p = (int *)malloc(sizeof(int)); if (p != NULL) { // 确认指针p不等于NULL时才去解引用p *p = 10; printf("%d\n", *p); free(p); // 释放内存后将指针置为NULL p = NULL; } return 0; } ``` - **函数返回**:部分函数在执行失败或未找到有效结果时,会返回NULL作为特殊标记。调用这些函数时,可检查返回是否为NULL,从而判断函数的执行情况。 ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello, World!"; char *ptr = strchr(str, 'X'); if (ptr == NULL) { // 未找到字符'X' printf("Character not found.\n"); } else { printf("Character found at position %ld.\n", ptr - str); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值