Macro de la biblioteca C -NULL
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);
}
#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;
}
#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;
}
#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 usar
NULL, en lugar de usar directamente0。 - En C++, se puede usar
nullptren lugar deNULL, para proporcionar una verificación de tipos más estricta.
Información relacionada
- En el estándar C++11, se introdujo la
nullptrpalabra 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.