NULL并非总是和0等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0作为不被使用的地址,所以就有了类似这样的定义 #define NULL 0 但并非总是如此,也有些系统不将0地址作为NULL,而是用其他的地址,所以说,千万别将NULL和0等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。
c语言NULL和0区别及NULL详解 先看下面一段代码输出什么: #include<stdo.h> 1. int main() { int *p=NULL; printf("%s",p); } 1. 2. 3. 4. 5. 6. 输出<null> ,单步调试可以看出执行int *p=NULL,p的值为0x00000000,可以看出,NULL在实际底层调用中就是0, 在C语言中, NULL和0的值都是一样的...
通常情况下,将未初始化的指针设置为 NULL,可以避免指针在使用之前指向一个未知的内存位置,从而避免出现访问非法内存地址的情况。在使用指针之前,可以通过检查指针是否为 NULL,来避免出现悬空指针错误,例如在用malloc()函数动态创建数组时,可以通过返回值是不是NULL来判断空间分配是否成功: #include <stdio.h> #include...
1#include <stdio.h>2intmain(){3char*str =NULL;4gets(str);5printf("%s\n", str);6return0;7} 运行程序后发现,还未等用户输入任何字符,printf() 就直接输出了(null)。我们有理由据此推断,gets() 和 printf() 都对空指针做了特殊处理: gets() 不会让用户输入字符串,也不会向指针指向的内存中写...
#include<stdo.h> intmain() { int*p=NULL; printf("%s",p); } 输出<null> ,单步调试可以看出执行int *p=NULL,p的值为0x00000000,可以看出,NULL在实际底层调用中就是0, 在C语言中, NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值 ...
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宏的值略有不同。
你可以额外写一个程序,把你要可能include不存在文件的程序,当做普通文本来处理,首先解析获取include后...
NULL也用于初始化指针变量,表示它们当前不指向任何有效地址。 实例 下面的实例演示了 NULL 宏的用法。 实例1 #include <stddef.h> #include <stdio.h> intmain() { FILE*fp; fp=fopen("file.txt","r"); if(fp!=NULL) { printf("成功打开文件 file.txt\n"); ...
所以while(gets(buff)!=NULL)这行代码就是只要gets函数调用失败就停止循环,但一般这个函数调用失败的机率是很小的,所以就出现了死循环。要明白这一点必需知道,gets函数的返回值为输入字符串的地址,而NULL不等于空字符串,也不等于空字符串的地址。把那个程序改为如下的形式就对了。include "stdio.h...
•可以使用NULL对悬挂指针进行标记,以避免使用无效的指针。 #include<> #include<> voidrelease_memory(int*ptr){ free(ptr); ptr=NULL;//将指针置为NULL避免成为悬挂指针 } intmain(){ int*ptr=(int*)malloc(sizeof(int)); release_memory(ptr); //在此之后就可以安全地判断ptr是否是悬挂指针 if(ptr...