Avatar ·

Quais são as diferenças entre ponteiro e referência em C++?

Olá, colegas! Acabei de começar a estudar C++ depois de Java e Python, e fiquei confuso com ponteiros e referências. Parece que ambos permitem trabalhar com objetos sem cópia, mas não entendo quando usar cada um. Aqui está um exemplo do meu código. Escrevi uma função que troca os valores de duas variáveis. Primeiro, tentei usar referências: ```cpp void swap_ref(int &a, int &b) { int temp = a; a = b; b = temp; } ``` Depois descobri que posso fazer o mesmo com ponteiros: ```cpp void swap_ptr(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } ``` Ambas as versões funcionam. Mas notei que com ponteiros preciso colocar asteriscos e e-comerciais em toda chamada, enquanto com referências não. Também ouvi que referências não podem ser reatribuídas, mas ponteiros podem. E que referências sempre devem ser inicializadas, enquanto ponteiros podem ser nullptr. Minha principal pergunta: quais são as diferenças fundamentais entre ponteiros e referências?