NULL并非总是和0等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0作为不被使用的地址,所以就有了类似这样的定义 #define NULL 0 但并非总是如此,也有些系统不将0地址作为NULL,而是用其他的地址,所以说,千万别将NULL和0等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。
那么NULL又代表了什么?首先NULL的意思是空,空是什么?是没有!在初始化一个指针时,比如:int*a=NULL;这句话的意思是指我们定义了一个“可以”指向整型类型的指针,但是让这个指针暂时不指向一个具体的int类型空间;说白了,就是先生成一个指针,但是不给这个指针赋具体的值!有点抽象?OK,你要知道,指针也是变量,要...
这样的NULL 定义对于接受字符指针的的函数没有问题, 但对于其它类型的指针参数仍然有问题(在缺少原型的情况下), 而合法的构造如 FILE*fp=NULL; 则会失败。 不过, ANSI C 允许NULL 的可选定义 #define NULL ((void *)0) 除了潜在地帮助错误程序运行(仅限于使用同样类型指针的机器, 因此帮助有限) 以外, 这样...
实际上,NULL可以是整数0(C++中NULL为0,相关阅读《为什么建议你用nullptr而不是NULL》),也可以是某个整数值转换为void*。 实际上NULL并不一定需要是0。 总结 关于NULL和0,理解它们的类型不一样是很关键的,至于值本身是不是一样,并不重要。 更多内容可以参考C11标准文档的6.3.2.3 Pointers一节。 NULL的值可以为...
在C语言中,空指针是指指向空地址的指针,其值为NULL。空指针的地址是指空指针所指向的内存地址,也就是空地址。在C语言中,可以使用空指针的地址,但通常不会主动使用它。空指针的地址通常由编译器自动分配,用于表示一个不存在的指针或者一个未初始化的指针。使用空指针的地址可能会导致程序错误,...
在不同的系统中,NULL并非总是和等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将作为不被使用的地址,所以就有了类似这样的定义 #define NULL 0 但并非总是如此,也有些系统不将地址作为NULL而是用其他的地址,所以说,千万别将NULL和等价起来,特别是在一些跨平台的代码中,这更...
目前没有问题,毕竟nullptr是为了标准化,和以后好统一处理,做的改进,目前和NULL等价。而NULL因为历史...
没有明确的主张; 但请参阅C99,7.20.3的脚注(感谢评论中的@birryree)。 0 0 0 慕婉清6462132 空指针常量始终为0. NULL宏可以由实现定义为裸0,或类似的转换表达式(void *) 0,或者某些其他零值整数表达式(因此标准中的“实现定义”语言)。空指针值可以是0以外的值。当遇到空指针常量时,它将被...
NULL来自C语言,一般由宏定义实现,而 nullptr 则是C++11的新增关键字。在C语言中,NULL被定义为(void*)0,而在C++语言中,NULL则被定义为整数0。 在C++中指针必须有明确的类型定义。但是将NULL定义为0带来的另一个问题是无法与整数的0区分。 因为C++中允许有函数重载。