Macro de la biblioteca C -NULL

C 标准库 - <stddef.h>Biblioteca estándar de C - <stddef.h>

Descripción

La macro de la biblioteca CNULLes el valor de una constante de puntero nulo.

  • NULLes una macro que representa la constante de puntero nulo. Generalmente se define como((void*)0), que representa un puntero nulo que apunta a la dirección de memoria 0.
  • En C++,NULLpuede definirse como0o0L, de modo que pueda compararse con el entero0.

Declaración

A continuación se muestra la declaración de la macro NULL, que depende del compilador.

#define NULL ((char *)0)

o 

#define NULL 0L

o 

#define NULL 0

Parámetros

  • NA

Valor de retorno

  • NA

Uso

  • NULLSe utiliza para indicar que el puntero no apunta a ningún objeto o dirección válida. Por ejemplo, cuando falla la asignación dinámica de memoria, normalmente se devuelveNULL。
  • NULLTambién se utiliza para inicializar variables de puntero, indicando que actualmente no apuntan a ninguna dirección válida.

Ejemplo

El siguiente ejemplo demuestra el uso de la macro NULL.

Ejemplo 1

#include <stddef.h>
#include <stdio.h>

int main ()
{
   FILE *fp;

   fp = fopen("file.txt", "r");
   if( fp != NULL )
   {
      printf("Archivo file.txt abierto con éxito\n");
      fclose(fp);
   }

   fp = fopen("nofile.txt", "r");
   if( fp == NULL )
   {
      printf("No se puede abrir el archivo nofile.txt\n");
   }
   
   return(0);
}

Suponiendo que el archivofile.txtya existe, peronofile.txtno existe. Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

成功打开文件 file.txt
不能打开文件 nofile.txt

Asignación dinámica de memoria:

Ejemplo

#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;
    }

    // Usar la memoria asignada
    for (int i = 0; i < 10; i++) {
        ptr[i] = i;
    }

    // Liberar la memoria asignada
    free(ptr);
    ptr = NULL; // Establecer el puntero a NULL

    return 0;
}

Parámetros de función:

Ejemplo

#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); // Salida: String: Hello, World!
    printString(string2); // Salida: String is NULL

    return 0;
}

Notas

  • NULLEs la forma estándar de representar un puntero nulo, evitando el uso directo de0o(void*)0, para mejorar la legibilidad y el mantenimiento del código.
  • Al comparar punteros, se debe usarNULL, en lugar de usar directamente0。
  • En C++, se puede usarnullptren lugar deNULL, para proporcionar una verificación de tipos más estricta.

Información relacionada

  • En el estándar C++11, se introdujo lanullptrpalabra clave, como una constante de puntero nulo más segura en cuanto a tipos.
  • NULLLa definición de la macro puede variar ligeramente según el compilador y la implementación de la biblioteca estándar, pero su significado y uso son consistentes.

C 标准库 - <stddef.h>Biblioteca estándar de C - <stddef.h>

Otras extensiones