C 语言中的 NULL 指针
C 语言中的 NULL 指针
C 语言中的 NULL 指针 是指不指向任何内存位置的指针。 NULL 常量在头文件 stdio.h、stddef.h 以及 stdlib.h 中定义。
将指针初始化为 NULL 是为了避免程序出现不可预测的行为或防止出现段错误。
声明并初始化 NULL 指针
声明并初始化 NULL 指针的方法如下:-
type *ptr = NULL;
或者,您也可以使用此语法 -
type *ptr = 0;
NULL 指针示例
以下示例演示了如何声明和初始化 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.
空指针的应用
以下是空指针的一些应用 -
- 当一个指针变量尚未分配任何有效的内存地址时,对其进行初始化。
- 当我们不想传递任何有效的内存地址时,将空指针传递给函数参数。
- 在访问任何指针变量之前检查是否为空指针,以便我们可以在与指针相关的代码中执行错误处理。例如,仅当指针变量不为 NULL 时才取消引用。
NULL 指针始终用于检测树、链表以及其他动态数据结构的端点。
检查指针是否为 NULL
始终建议在取消引用指针以获取其目标变量的值之前检查指针是否为 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
使用 NULL 指针检查内存分配
malloc() 和 calloc() 函数用于动态分配内存块。成功时,这些函数返回指向已分配内存块的指针;失败时,返回 NULL。
示例
以下示例展示了如何使用 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 文件指针
始终建议检查 fopen() 函数 返回的 FILE 指针 是否为 NULL,以避免在文件相关处理中出现运行时错误。
示例
以下示例展示了如何使用 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 ", s, a, p); fclose(fp); return 0; }
当目标变量尚未分配任何有效的内存地址时,您应该始终将指针变量初始化为 NULL。