- C 编程教程
- C - 首页
- C语言基础
- C - 概述
- C - 特性
- C - 历史
- C - 环境搭建
- C - 程序结构
- C - Hello World
- C - 编译过程
- C - 注释
- C - 词法单元
- C - 关键字
- C - 标识符
- C - 用户输入
- C - 基本语法
- C - 数据类型
- C - 变量
- C - 整数提升
- C - 类型转换
- C - 类型强制转换
- C - 布尔值
- C语言中的常量和字面量
- C - 常量
- C - 字面量
- C - 转义序列
- C - 格式说明符
- C语言中的运算符
- C - 运算符
- C - 算术运算符
- C - 关系运算符
- C - 逻辑运算符
- C - 位运算符
- C - 赋值运算符
- C - 一元运算符
- C - 自增和自减运算符
- C - 三元运算符
- C - sizeof 运算符
- C - 运算符优先级
- C - 其他运算符
- C语言中的决策语句
- C - 决策语句
- C - if 语句
- C - if...else 语句
- C - 嵌套 if 语句
- C - switch 语句
- C - 嵌套 switch 语句
- C语言中的循环语句
- C - 循环语句
- C - while 循环
- C - for 循环
- C - do...while 循环
- C - 嵌套循环
- C - 无限循环
- C - break 语句
- C - continue 语句
- C - goto 语句
- C语言中的函数
- C - 函数
- C - 主函数
- C - 按值传递函数调用
- C - 按引用传递函数调用
- C - 嵌套函数
- C - 可变参数函数
- C - 用户自定义函数
- C - 回调函数
- C - 返回语句
- C - 递归
- C语言中的作用域规则
- C - 作用域规则
- C - 静态变量
- C - 全局变量
- C语言中的数组
- C - 数组
- C - 数组的特性
- C - 多维数组
- C - 将数组传递给函数
- C - 从函数返回数组
- C - 可变长数组
- C语言中的指针
- C - 指针
- C - 指针和数组
- C - 指针的应用
- C - 指针运算
- C - 指针数组
- C - 指向指针的指针
- C - 将指针传递给函数
- C - 从函数返回指针
- C - 函数指针
- C - 指向数组的指针
- C - 指向结构体的指针
- C - 指针链
- C - 指针与数组的区别
- C - 字符指针和函数
- C - 空指针
- C - 空指针
- C - 野指针
- C - 解引用指针
- C - 近指针、远指针和巨指针
- C - 指针数组的初始化
- C - 指针与多维数组
- C语言中的字符串
- C - 字符串
- C - 字符串数组
- C - 特殊字符
- C语言中的结构体和联合体
- C - 结构体
- C - 结构体和函数
- C - 结构体数组
- C - 自引用结构体
- C - 查找表
- C - 点 (.) 运算符
- C - 枚举 (或 enum)
- C - 结构体填充和打包
- C - 嵌套结构体
- C - 匿名结构体和联合体
- C - 联合体
- C - 位域
- C - Typedef
- C语言中的文件处理
- C - 输入和输出
- C - 文件 I/O (文件处理)
- C 预处理器
- C - 预处理器
- C - 指令
- C - 预处理器运算符
- C - 宏
- C - 头文件
- C语言中的内存管理
- C - 内存管理
- C - 内存地址
- C - 存储类
- 其他主题
- C - 错误处理
- C - 可变参数
- C - 命令执行
- C - 数学函数
- C - static 关键字
- C - 随机数生成
- C - 命令行参数
- C 编程资源
- C - 问答
- C - 快速指南
- C - 速查表
- C - 有用资源
- C - 讨论
C语言中的空指针
C语言中的空指针
C 语言中的空指针是指不指向任何内存位置的指针。NULL 常量在头文件 stdio.h、stddef.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。
广告