En este tutorial, aprenderemos sobre punteros vacíos y cómo usarlos con la ayuda de ejemplos.
Antes de continuar con este tutorial, asegúrese de verificar los punteros de C ++.
En C ++, no podemos asignar la dirección de una variable de un tipo de datos a un puntero de otro tipo de datos. Considere este ejemplo:
// pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;
Aquí, el error ocurrió porque la dirección es una doublevariable de tipo. Sin embargo, el puntero es de inttipo.
En tales situaciones, podemos usar el puntero para anular (anular punteros) en C ++. Por ejemplo,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
El puntero vacío es un puntero genérico que se utiliza cuando no conocemos el tipo de datos de la variable a la que apunta el puntero.
Ejemplo 1: puntero vacío de C ++
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )
Salida
0xffd117ac 0xffd117ac
Aquí, el puntero ptrrecibe el valor de &f.
La salida muestra que el puntero void ptr almacena la dirección de una floatvariable f.
Como voides un tipo vacío, los punteros vacíos no se pueden desreferenciar.
void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid
Ejemplo 2: Impresión del contenido de un puntero vacío
Para imprimir el contenido de un puntero vacío, usamos el static_castoperador. Convierte el puntero de void*tipo al tipo de datos respectivo de la dirección que está almacenando el puntero:
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )
Salida
El contenido del puntero es 2,3
Este programa imprime el valor de la dirección apuntada por el voidpuntero ptr.
Como no podemos desreferenciar un voidpuntero, no podemos usar *ptr.
Sin embargo, si convertimos el void*tipo de puntero al float*tipo, podemos usar el valor apuntado por el voidpuntero.
En este ejemplo, hemos utilizado el static_castoperador para convertir el tipo de datos del puntero de void*a float*.
Fundición estilo C
También podemos utilizar la fundición de estilo C para imprimir el valor.
// valid cout << *((float*)ptr);
Sin embargo, static_castse prefiere a la fundición estilo C.
Nota: los punteros vacíos no se pueden utilizar para almacenar direcciones de variables con calificadores consto volatile.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;








