Ponteiro C ++ para anular (com exemplos)

Neste tutorial, aprenderemos sobre void pointers e como usá-los com a ajuda de exemplos.

Antes de prosseguir com este tutorial, certifique-se de verificar os ponteiros do C ++.

Em C ++, não podemos atribuir o endereço de uma variável de um tipo de dados a um ponteiro de outro tipo de dados. Considere este exemplo:

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

Aqui, o erro ocorreu porque o endereço é uma doublevariável de tipo. No entanto, o ponteiro é do inttipo.

Em tais situações, podemos usar o ponteiro para void (ponteiros void) em C ++. Por exemplo,

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

O ponteiro void é um ponteiro genérico usado quando não sabemos o tipo de dados da variável para a qual o ponteiro aponta.

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

Resultado

 0xffd117ac 0xffd117ac

Aqui, o ponteiro ptrrecebe o valor de &f.

A saída mostra que o ponteiro void ptr armazena o endereço de uma floatvariável f.

Como voidé um tipo vazio, os ponteiros vazios não podem ser referenciados.

 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

Exemplo 2: Imprimindo o conteúdo do apontador vazio

Para imprimir o conteúdo de um ponteiro void, usamos o static_castoperador. Ele converte o ponteiro do void*tipo para o respectivo tipo de dados do endereço que o ponteiro está armazenando:

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

Resultado

 O conteúdo do ponteiro é 2,3

Este programa imprime o valor do endereço apontado pelo voidponteiro ptr.

Como não podemos cancelar a referência de um voidponteiro, não podemos usar *ptr.

No entanto, se convertermos o void*tipo de ponteiro em float*tipo, podemos usar o valor apontado pelo voidponteiro.

Neste exemplo, usamos o static_castoperador para converter o tipo de dados do ponteiro de void*para float*.

Elenco C-style

Também podemos usar fundição de estilo C para imprimir o valor.

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

No entanto, static_casté preferível à fundição de estilo C.

Nota: ponteiros void não podem ser usados ​​para armazenar endereços de variáveis ​​com constou volatilequalificadores.

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

Artigos interessantes...