A declaração de uma variável ponteiro é semelhante a outros tipos de dados execeto pelo uso do 
                operador (*), como pode ser conferido abaixo:
            
            Sintaxe
            
tipo_dado *nome_ponteiro; //não iniciado
tipo_dado* nome_ponteiro = nullptr; //não iniciado
            
                Nos exemplos abaixo, vamos utilizar os tipos de dados Enum, Struct e Union que podem ser vistos em 
                C++ Básico: Enum, 
                C++ Básico: Struct  e C++ Básico: Union.
            
            Exemplo 1
            
#include <iostream>
using namespace std;
enum enum_exemplo{
    VALOR1 = 1,
    VALOR2 = 2
};
struct exemplo{
    int id;
    string desc;
};
union uniao{
    int id;
    float valor;
};
int main()
{
    //ponteiros
    int *pi;
    float *pf;
    char *pc;
    struct exemplo* pse;
    enum_exemplo* pe;
    uniao* pu;
}
            Saída
            
-
            
                A atribuição de uma valor  uma ponteiro é feito utilizando o operador (&) que significa 
                o endereço de uma variável, vetor, struct ou outro.
            
            Sintaxe
            
tipo_dado *nome_ponteiro = &var1; //iniciado
            Exemplo 2
            
#include <iostream>
using namespace std;
enum enum_exemplo{
    VALOR1 = 1,
    VALOR2 = 2
};
struct exemplo{
    int id;
    string desc;
};
union uniao{
    int id;
    float valor;
};
int main()
{
    int i =10, *pi;
    pi = &i;//atribuição
    
    float f= 7.77, *pf;
    pf = &f;//atribuição
    
    char c = 'A', *pc;
    pc = &c;//atribuição
    
    struct exemplo st = {1,"Teste"}, *pse;
    pse = &st; //atribuição
    
    enum_exemplo e = VALOR1, *pe;
    pe = &e;//atribuição
    
    uniao u, *pu; 
    pu = &u;//atribuição
}
            Saída
            
-