Olá Rafinhamandrade, tudo bem?
Ponteiros em C++ são uma parte fundamental da linguagem e podem ser um pouco confusos no início. Vamos tentar esclarecer isso.
Um ponteiro é uma variável que armazena o endereço de memória de outro objeto12. Em outras palavras, um ponteiro “aponta” para a localização de um valor em memória. Isso é útil por várias razões:
Alocação Dinâmica de Memória: Ponteiros permitem que você aloque memória dinamicamente durante a execução do programa. Isso é útil quando você não sabe de antemão quanto de memória vai precisar.
Passagem por Referência: Quando você passa uma variável para uma função em C++, o padrão é que a função receba uma cópia do valor (passagem por valor). No entanto, às vezes você quer que a função seja capaz de modificar a variável original, não apenas a cópia. Isso é possível com ponteiros (ou referências).
Estruturas de Dados Complexas: Ponteiros são usados para criar estruturas de dados complexas como listas ligadas, árvores, grafos etc.
No seu exemplo, y é uma variável que armazena o valor 5, e x é um ponteiro que armazena o endereço de memória de y. Quando você faz std::cout << x;, está imprimindo o endereço de memória de y, não o valor de y. Se você quiser imprimir o valor de y usando o ponteiro x, você pode usar o operador de desreferência * assim: std::cout << *x;.
Espero que isso ajude! Se você tiver mais perguntas, fique à vontade para perguntar.