Puntatore C ++ a void (con esempi)

In questo tutorial, impareremo a conoscere i puntatori void e come usarli con l'aiuto di esempi.

Prima di procedere con questo tutorial, assicurati di controllare i puntatori C ++.

In C ++, non possiamo assegnare l'indirizzo di una variabile di un tipo di dati a un puntatore di un altro tipo di dati. Considera questo esempio:

 // 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;

Qui, l'errore si è verificato perché l'indirizzo è una doublevariabile di tipo. Tuttavia, il puntatore è di inttipo.

In tali situazioni, possiamo usare il puntatore a void (puntatori void) in C ++. Per esempio,

 // void pointer void *ptr; double d = 9.0; // valid code ptr = &d;

Il puntatore void è un puntatore generico che viene utilizzato quando non conosciamo il tipo di dati della variabile a cui punta il puntatore.

Esempio 1: C ++ Void Pointer

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

Produzione

 0xffd117ac 0xffd117ac

Qui, al puntatore ptrviene assegnato il valore di &f.

L'output mostra che il puntatore void ptr memorizza l'indirizzo di una floatvariabile f.

Poiché voidè un tipo vuoto, i puntatori void non possono essere dereferenziati.

 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

Esempio 2: stampa del contenuto di Void Pointer

Per stampare il contenuto di un puntatore vuoto, usiamo l' static_castoperatore. Converte il puntatore dal void*tipo al rispettivo tipo di dati dell'indirizzo che il puntatore sta memorizzando:

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

Produzione

 Il contenuto del puntatore è 2.3

Questo programma stampa il valore dell'indirizzo puntato dal voidpuntatore ptr.

Poiché non possiamo dereferenziare un voidpuntatore, non possiamo usare *ptr.

Tuttavia, se convertiamo il void*tipo di puntatore nel float*tipo, possiamo utilizzare il valore a cui punta il voidpuntatore.

In questo esempio, abbiamo utilizzato l' static_castoperatore per convertire il tipo di dati del puntatore da void*a float*.

Colata in stile C.

Possiamo anche usare il casting in stile C per stampare il valore.

 // valid cout << *((float*)ptr);

Tuttavia, static_castè preferito alla fusione in stile C.

Nota: i puntatori void non possono essere utilizzati per memorizzare indirizzi di variabili con consto volatilequalificatori.

 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;

Articoli interessanti...