个人理解—NULL是什么

        NULL不是一个关键字,也不属于保留字,NULL的本质是一个宏定义。

#ifndef NULL
#ifdef __cplusplus
#ifndef _WIN64
#define NULL 0
#else
#define NULL 0LL
#endif  /* W64 */
#else
#define NULL ((void *)0)
#endif
#endif

        NULL是一个被强制类型转换的void类型的0,这个0是一个地址0x00000000代表内存地址0的地址,占内存地址4个字节,这个指针变量指向0x0地址,指向一个内存地址,本质还是0,但是一个特殊0。

        在int *p;被定义时,未被初始化的值为随机的(局部)是一个野指针。

        int *p=NULL;p是一个局部变量,分配在栈上,值为(void*)0,指向内存地址的0x0地址处,因为指在内存的0x0地址处很安全,一般方式无法访问,cpu会进行处理。

        NULL存在的意义:1.安全性。2.是一个标记,标准指针的使用方式。

int *p=NULL;
p=xxx;
if(NULL!=p) p可以被赋值,但NULL不能
{
    *p=xxx;
    ....;
}

p=NULL;

        不用混用NULL和'\0'。

        ‘\0’,‘0’,0,NULL是不一样的。

        ‘\0’是一个转义字符,对应是ASCII是0,本质为0。一般用于字符串结尾标志。

        ‘0’是一个字符,对应ASCII为48,本质是48。有对应的ASCII码,用于与字符对照。

        0是一个数字,不是ASCII。代表一个数字。

        NULL是一个表达式,表示为(void*)0。是一个指针。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值