指针专题6-空指针NULL和void指针

 1 NULL指针

  一个指针变量可以指向计算机中任何一块内存,不管该内存有没有被分配,也不管该内存有没有使用权限,只要把地址给他,他就可以指向。C语言没有一种机制保证指向内存的正确性,程序员必须自己提高警惕。

  比如下面错误的例子,对没有初始化的指针进行操作,这是非常危险的。

char *str;
gets(str);
printf("%s",str);

  这段程序编译和链接不会报错,但当输入字符串按下回车,在Linux就会出现段错误(Segment Fault)。因为str是一个未初始化的局部变量,它的值不确定,指向的地址是随机的,很有可能指向一块没有被分配或者没有读写权限的内存,这时使用gets()函数给他写数据显然是错误的。

  我们的建议是对没有初始化的指针赋值为NULL。例如:

char *str=NULL;

   修改后,运行程序后直接打印出(null),由此猜测gets()和printf()对空指针做了判断。

 1.1 NULL指针解释

  NULL在C语言表示空指针。NULL是在stdio.h中定义的一个宏,也就是说NULL指向了地址为0的内存。

#define NULL ((void *)0)

  1.2 NULL指针用途

第一:指针的初始化

int *p=NULL;

第二:判断字符串是否是空字符串

char *Dprint(char *str)
{
  if(str=NULL)
    return 0;
 else
    printf("%s",str);
}    

第三:函数返回是否成功判断

FILE *pFile;
pFile=fopen("mtfile.txt", "r");
if(pFile==NULL)
  printf("open error");

2 void指针

猜你喜欢

转载自www.cnblogs.com/Mike2019/p/11813833.html