现在位置: 首页 > C 教程 > 正文

C 库宏 - NULL

C 标准库 - <stddef.h> C 标准库 - <stddef.h>

描述

C 库宏 NULL 是一个空指针常量的值。

  • NULL 是一个宏,表示空指针常量。它通常被定义为 ((void*)0),表示一个指向内存地址 0 的空指针。
  • 在 C++ 中,NULL 可能被定义为 00L,以便与整数 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);
}

假设文件 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 <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;
}

注意事项

  • NULL 是用于表示空指针的标准方式,避免直接使用 0(void*)0,以提高代码的可读性和可维护性。
  • 比较指针时,应使用 NULL,而不是直接使用 0
  • 在 C++ 中,可以使用 nullptr 代替 NULL,以提供更强的类型检查。

相关信息

  • 在 C++11 标准中,引入了 nullptr 关键字,作为一种更类型安全的空指针常量。
  • NULL 宏的定义可能因编译器和标准库实现的不同而略有不同,但其含义和用途是一致的。

C 标准库 - <stddef.h> C 标准库 - <stddef.h>