C 库宏 - NULL
描述
C 库宏 NULL 是一个空指针常量的值。
NULL
是一个宏,表示空指针常量。它通常被定义为((void*)0)
,表示一个指向内存地址 0 的空指针。- 在 C++ 中,
NULL
可能被定义为0
或0L
,以便与整数0
进行比较。
声明
下面是取决于编译器的 NULL 宏的声明。
#define NULL ((char *)0) 或 #define NULL 0L 或 #define NULL 0
参数
- NA
返回值
- NA
用法
NULL
用于表示指针不指向任何有效的对象或地址。例如,在动态内存分配失败时,通常返回NULL
。NULL
也用于初始化指针变量,表示它们当前不指向任何有效地址。
实例
下面的实例演示了 NULL 宏的用法。
实例 1
#include <stddef.h>
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("成功打开文件 file.txt\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("不能打开文件 nofile.txt\n");
}
return(0);
}
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("成功打开文件 file.txt\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("不能打开文件 nofile.txt\n");
}
return(0);
}
假设文件 file.txt 已存在,但是 nofile.txt 不存在。让我们编译并运行上面的程序,这将产生以下结果:
成功打开文件 file.txt 不能打开文件 nofile.txt
动态内存分配:
实例
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// 使用分配的内存
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
// 释放分配的内存
free(ptr);
ptr = NULL; // 将指针设置为 NULL
return 0;
}
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// 使用分配的内存
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
// 释放分配的内存
free(ptr);
ptr = NULL; // 将指针设置为 NULL
return 0;
}
函数参数:
实例
#include <stdio.h>
#include <string.h>
void printString(const char *str) {
if (str == NULL) {
printf("String is NULL\n");
} else {
printf("String: %s\n", str);
}
}
int main() {
char *string1 = "Hello, World!";
char *string2 = NULL;
printString(string1); // 输出: String: Hello, World!
printString(string2); // 输出: String is NULL
return 0;
}
#include <string.h>
void printString(const char *str) {
if (str == NULL) {
printf("String is NULL\n");
} else {
printf("String: %s\n", str);
}
}
int main() {
char *string1 = "Hello, World!";
char *string2 = NULL;
printString(string1); // 输出: String: Hello, World!
printString(string2); // 输出: String is NULL
return 0;
}
注意事项
NULL
是用于表示空指针的标准方式,避免直接使用0
或(void*)0
,以提高代码的可读性和可维护性。- 比较指针时,应使用
NULL
,而不是直接使用0
。 - 在 C++ 中,可以使用
nullptr
代替NULL
,以提供更强的类型检查。
相关信息
- 在 C++11 标准中,引入了
nullptr
关键字,作为一种更类型安全的空指针常量。 NULL
宏的定义可能因编译器和标准库实现的不同而略有不同,但其含义和用途是一致的。