Макрос библиотеки C -NULL

Стандартная библиотека C - <stddef.h>

Описание

Макрос библиотеки CNULL— это значение константы нулевого указателя.

  • NULL— это макрос, который представляет константу нулевого указателя. Обычно он определяется как((void*)0), который представляет нулевой указатель, указывающий на адрес памяти 0.
  • В C++,NULLможет быть определён как0или0L, чтобы быть совместимым с целыми числами0Сравните.

Объявление

Ниже приведено зависящее от компилятора объявление макроса NULL.

#define NULL ((char *)0)

или 

#define NULL 0L

или 

#define NULL 0

Параметр

  • Н/Д

Возвращаемое значение

  • Н/Д

Использование

  • 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("Не удалось выделить память\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("Строка — NULL\n");
    } else {
        printf("Строка: %s\n", str);
    }
}

int main() {
    char *string1 = "Привет, мир!";
    char *string2 = NULL;

    printString(string1); // Вывод: Строка: Привет, мир!
    printString(string2); // Вывод: Строка — NULL

    return 0;
}

Примечания

  • NULLЭто стандартный способ представления нулевого указателя, позволяющий избежать прямого использования0или(void*)0, чтобы улучшить читаемость кода и удобство сопровождения.
  • При сравнении указателей следует использоватьNULL, а не использовать напрямую0。
  • В C++ можно использоватьnullptrвместо этогоNULL, чтобы обеспечить более строгую проверку типов.

Связанная информация

  • В стандарте C++11 было введеноnullptrключевое слово, как более типобезопасная константа нулевого указателя.
  • NULLОпределение макроса NULL может немного различаться в зависимости от компилятора и реализации стандартной библиотеки, но его смысл и назначение остаются неизменными.

Стандартная библиотека C - <stddef.h>

Другие расширения