答:以gcc或clang编译器为例,NULL的定义大致如下(稍有简化): #ifdefined(__cplusplus)# define NULL0//C++中使用0作为NULL的值#else# define NULL ((void*)0)//C中使用((void *)0)作为NULL的值#endif 问:为什么C中(void*)0是空指针常量,而C++中不是? 答:因为C语言中任何类型的指针都可以(隐式地)...
/* Define NULL pointer value */#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif 这里需要说明的是,当 NULL 定义为“((void *)0)”时,即 NULL 是可以赋值给任何类型指针的值,它的类型为 void*,而不是整数 0,因此初始化“FILE*fp=NULL;”是完全合法的。 ...
(很多系统中的实现:#define NULL (void*)0,与这里的“a null pointer constant”并不是完全一致的) C++标准库定义的NULL指针 NULL是一个宏,在C++里面被直接被定义成了整数立即数类型的0,而在没有__cplusplus定义的前提下,就被定义成一个值是0的void...
#ifdef _cplusplus// 定义这个符号就表示当前是C++环境#defineNULL0// 在C++中NULL就是0#else#defineNULL(void*)0// 在C中NULL是强制类型转换为void *的0#endif 说明:a、在C语言中,int *p;你可以p = (int *)0;但是不可以p = 0;因为类型不相同。所以NULL的实质其实就是0,然后我们给指针赋初值为NULL,...
#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif 当然,就机器内部而言,NULL指针的实际值可能与此不同,这种情况下,编译器将负责零值和内部值之间的翻译转换。 NULL指针的概念非常有用,它给了你一种方法,表示某个特定的指针目前并未指向任何东西。...
判断方法:pointer和*结合,为一个指针。该指针指向一个长度为4的,存有float类型的数组。 预定义宏 系统运行期间,自动注册的变量。 __LINE__:当前行 __FILE__:当前文件 __DATE__:当前日期,月/日/年 __TIME__:当前的时间,时:分:秒 _cplusplus:在编译一个C++程序时定义 ...
#ifdef __cplusplus #defineNULL0#else#defineNULL((void*)0)#endif 当然,就机器内部而言,NULL指针的实际值可能与此不同,这种情况下,编译器将负责零值和内部值之间的翻译转换。 NULL指针的概念非常有用,它给了你一种方法,表示某个特定的指针目前并未指向任何东西。例如,一个用于在某个数组中查找某个特定值的函...
__cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif(如果 C++ 的 NULL 是 (...
1、NULL不是关键字,本质上是个宏定义 2、NULL标准定义: #ifdef _cplusplus // 判断当前编译环境是C还是C++ #define NULL 0 // C++环境下,编译器预先定义一个宏_cplusplus #else #define NULL (void *)0 // C语言环境 #endif 1. 2. 3. 4. ...
对于不多数机器而言,0地址是不能直接访问的,设置为0,就表示该指针哪里都没指向。而在C++中,NULL实质是0。换种说法:任何程序数据都不会存储在地址为0的内存块中,它是被操作系统预留的内存块。 下面代码摘自 stdlib.h #ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif...