Cprogramming 简明教程

NULL Pointer in C

NULL Pointer in C

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

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

Declare and Initialize a NULL Pointer

以下是你申明并初始化一个 NULL 指针的方式 −

type *ptr = NULL;

或者,你也可以使用此语法 −

type *ptr = 0;

Example of a NULL Pointer

以下示例演示了如何申明并初始化一个 NULL 指针 −

#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.

Applications of NULL Pointer

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

  1. 在指针变量尚未分配任何有效内存地址时,初始化 pointer 变量。

  2. 当我们不希望传递任何有效内存地址时,向函数参数传递空指针。

  3. 在访问任何指针变量前检查空指针,以便我们可以在与指针相关的代码中执行错误处理。例如,仅当指针变量不为 NULL 时取消引用它。

NULL 指针始终用于检测 treeslinked lists 和其他动态数据结构的端点。

Check Whether a Pointer is NULL

通常会建议在解除引用指针来获取其目标变量的值之前,检查该指针是否为 NULL。

Example

请看以下示例:

#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

Check Memory Allocation Using NULL Pointer

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

Example

以下示例展示了如何使用 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

NULL File Pointer

通常应使用建议方式来检查 fopen() function 返回的 FILE pointer 是否为 NULL,以避免文件相关处理的运行时错误。

Example

以下示例展示了如何使用 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。