C语言之NULL

一:NULL在C/C++中的标准定义

        (1)NULL不是C语言的关键字,本质上是一个宏

        (2)NULL的标准定义:

                #ifdef _cplusplus      //条件编译

                #define NULL  0

               #else

               #define NULL  (void *)0

                #endif

C++的编译环境中,编译器预先定义了一个宏: _cplusplus  ,程序中可以用条件编译来判断当前的编译环境是C还是C++的

NULL的本质解析:NULL的本质是0,但是这个0不是当一个数字解析,而是当一个内存地址来解析的,这个0其实是0x00000000,代表内存0地址。 (void *)0这个整体表达式表示一个指针,这个指针变量本身占四个字,地址在哪里取决于于编译器把这个指针变量分配在哪里,但是这个指针变量的值为0,也就是说这个指针变量指向0地址(实际是0地址开始的一段内存)

二:从指针角度理解NULL的本质

        (1)int *p;  //如果p是函数内部的局部变量,则p的值随机的,也就是说p是一个野指针

        (2)int *p;  //p是一个局部变量,分配在栈上的地址是由编译器决定的,程序员不必关心,但是p的值是 (void *)0&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值