答:通常是在C标准库的<stddef.h>头文件中,不过别的头文件中可能也有定义。 问:一般编译器的<stddef.h>头文件中NULL宏是如何定义的? 答:以gcc或clang编译器为例,NULL的定义大致如下(稍有简化): #ifdefined(__cplusplus)# define NULL0//C++中使用0作为NULL的值#else# define NULL ((void*)0)//C中使用...
要包含头文件stddef.h,因为定义在该文件中
NULL宏是定义在标准库头文件stddef.h中。宏定义如下:undef NULL #if defined(__cplusplus)#define NULL 0#else#define NULL ((void *)0)#endif可以看出c++中 NULL为(int)0 , C中NULL为(void*)0。看来C和C++中NULL宏的值略有不同。
C语言中就通过类型来表示这个单元中存的什么玩意,譬如(int)0就表示0地址中存的是int型的数;譬如你(int *)0就表示0地址中存的是个地址,这个地址指向的单元是int型数 NULL只是一个概念,叫作空值,其值本身没有任何含义,可以用0代替,也可以用1,...代替,只要这些值不会与系统实际的有效地址冲突即可。 因此,本...
进入我们的讨论,在大多数C编译器实现的头文件中,NULL宏定义为((void *)0)。但是C标准说0也是一个空指针常量。这意味着按照标准,以下内容也是完全合法的。 int * ptr = 0; 以上C语句中的0在指针上下文中使用,与整数0不同。这是为什么首选使用NULL的原因之一,因为它使代码在代码中明确表明程序员使用的是空指...
if ( p != NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */ if ( NULL != p ) if ( p ) if ( p != q ) ... 可以用 memset 函数来得到一个空指针吗? 这个问题等同于:如果 p 是一个指针变量,那么 memset( &p, 0, sizeof(p) ); 和 p = 0; ...
进入我们的讨论,在大多数C编译器实现的头文件中,NULL宏定义为((void *)0)。但是C标准说0也是一个空指针常量。这意味着按照标准,以下内容也是完全合法的。 int * ptr = 0; 以上C语句中的0在指针上下文中使用,与整数0不同。这是为什么首选使用NULL的原因之一,因为它使代码在代码中明确表明程序员使用的是空指...
空指针(Null Pointer)是一个不指向任何内存位置的指针。它存储段的基地址。空指针基本上存储了空值,而void是指针的类型。 空指针是一种特殊的保留值,它在 stddef 头文件中定义。在这里,Null意味着指针引用第0个内存位置。 如果我们没有任何地址要分配给指针,那么它...
char*pc=NULL;int*pi=NULL;short*ps=NULL;long*pl=NULL;float*pf=NULL;double*pd=NULL; char* 类型的指针是为了存放 char 类型变量的地址。 short* 类型的指针是为了存放 short 类型变量的地址。 int* 类型的指针是为了存放 int 类型变量的地址。
指针变量 p 是空指针的判断: 代码语言:javascript 复制 if(p==0)if(p=='\0')if(p==3-3)if(p==NULL)/* 使用 NULL 必须包含相应的标准库的头文件 */if(NULL==p)if(!p)if(p==q) 以上就是c语言中空指针的介绍,希望对大家有所帮助。更多C语言学习指路:...