C语言中的空指针



C语言中的空指针

C 语言中的空指针是指不指向任何内存位置的指针。NULL 常量在头文件 stdio.hstddef.h 以及 stdlib.h 中定义。

将指针初始化为 NULL 可以避免程序出现不可预测的行为或防止分段错误。

声明和初始化空指针

以下是声明和初始化空指针的方法:

type *ptr = NULL;

或者,您也可以使用以下语法:

type *ptr = 0;

空指针示例

以下示例演示了如何声明和初始化空指针:

#include <stdio.h> 

int main() {
   int *p= NULL;//initialize the pointer as null.
   printf("The value of pointer is %u",p);
   return 0;
}

输出

运行此代码时,将产生以下输出:

The value of pointer is 0.

空指针的应用

以下是空指针的一些应用:

  • 当指针变量尚未分配任何有效内存地址时,将其初始化为 指针 变量。
  • 当我们不想传递任何有效内存地址时,将空指针传递给函数参数。
  • 在访问任何指针变量之前检查空指针,以便在与指针相关的代码中执行错误处理。例如,仅当指针不为 NULL 时才解引用指针变量。

空指针始终用于检测 链表 和其他动态数据结构的端点。

检查指针是否为空

在解引用指针以获取其目标变量的值之前,始终建议检查指针是否为空。

示例

请查看以下示例:

#include <stdio.h> 

int main(){ 

   int *ptr = NULL;   // null pointer

   if (ptr == NULL) { 
      printf("Pointer is a NULL pointer"); 
   } 
   else { 
      printf("Value stored in the address referred by the pointer: %d", *ptr); 
   } 
   
   return 0; 
}

输出

运行此代码时,将产生以下输出:

Pointer is a NULL pointer

使用空指针检查内存分配

malloc()calloc() 函数用于动态分配内存块。如果成功,这些函数将返回指向已分配块的指针;如果失败,则返回 NULL。

示例

以下示例显示了如何使用空指针检查内存分配是否成功:

#include <stdio.h>
#include <stdlib.h>

int main(){

   int* ptr = (int*)malloc(sizeof(int));


   if (ptr == NULL){
      printf("Memory Allocation Failed");
      exit(0);
   }
   else{
      printf("Memory Allocated successfully");
   }

   return 0;
}

输出

运行代码并检查其输出:

Memory Allocated successfully

空文件指针

检查 文件指针fopen() 函数 返回的指针是否为 NULL 始终是避免与文件相关的处理中出现运行时错误的推荐方法。

示例

以下示例显示了如何使用空文件指针来确保文件是否可访问:

#include <stdio.h>
#include <string.h>

int main(){

   FILE *fp;
   char *s;
   int i, a;  
   float p;

   fp = fopen ("file3.txt", "r");

   if (fp == NULL){
      puts ("Cannot open file"); return 0;
   }

   while (fscanf(fp, "%d %f %s", &a, &p, s) != EOF)
      printf ("Name: %s Age: %d Percent: %f\n", s, a, p);

   fclose(fp);
   
   return 0;
}

当目标变量尚未分配任何有效内存地址时,应始终将指针变量初始化为 NULL。

广告