> [!NOTE] Ponteiros > Em programação, um ponteiro é um tipo de dado cujo valor se refere diretamente a outro valor armazenado em uma área da memória, através de seu endereço [^1]. Essencialmente, um ponteiro "aponta" para a localização de outro dado na memória. É uma implementação fundamental do conceito de referência em ciência da computação. # Como os Ponteiros Funcionam Ponteiros são cruciais para o gerenciamento de memória e para operações de baixo nível em muitas linguagens de programação. 1. **Endereço de Memória**: O valor de um ponteiro é um endereço de memória. Ao "desreferenciar" um ponteiro, você acessa o valor armazenado naquele endereço. 2. **Alocação de Memória**: Em contextos de [[Alocação de memória]] dinâmica, como a [[Heap na alocação de memória|alocação no heap]], quando você solicita espaço na memória, o sistema retorna um ponteiro para o início desse bloco de memória alocado [^2]. Isso permite que o programa acesse e manipule os dados armazenados ali. ## Ponteiros em C A linguagem [[Linguagem de programação C|C]] faz uso extensivo de ponteiros, permitindo um controle preciso sobre a memória. **Exemplo de Declaração e Uso em C**: Em C, um ponteiro é declarado com um asterisco (`*`) e o endereço de uma variável é obtido com o operador `&`. ```c #include <stdio.h> int main(void) { int n = 50; // *p é um ponteiro chamado p que aponta para o endereço de n. int *p = &n; // imprime o que estiver no endereço para o qual p aponta (o valor de n). printf("%i", *p); // Saída: 50 } ``` **Aritmética de Ponteiros**: É possível realizar operações matemáticas simples com ponteiros, como adição e subtração. Isso é particularmente útil para navegar em estruturas de dados contíguas na memória, como arrays [^4]. ```c #include <stdio.h> int main (void) { char *s = "hi!"; // s é um ponteiro para o primeiro caractere da string "hi!" printf ("%c", *s); // Saída: h printf ("%c", *(s+1)); // Saída: i (acessa o próximo caractere) printf ("%c\n", *(s+2)); // Saída: ! (acessa o caractere seguinte) } ``` ## Ponteiros em Python (Referências) Em [[Linguagem de programação Python|Python]], as variáveis funcionam como referências (ou "ponteiros") para objetos na memória. Quando você atribui um valor a uma variável, ela passa a apontar para aquele objeto. Se você atribui um novo valor, ela pode passar a apontar para um novo objeto [^5]. ```python lista_a = [1, 2, 3] lista_b = lista_a # lista_b agora referencia o MESMO objeto que lista_a lista_b.append(4) print(lista_a) # Saída: [1, 2, 3, 4] - Ambos foram alterados porque apontam para o mesmo objeto. lista_c = [5, 6, 7] lista_d = lista_c[:] # Cria uma CÓPIA do objeto, não uma referência ao mesmo objeto. lista_d.append(8) print(lista_c) # Saída: [5, 6, 7] - lista_c não foi alterada. print(lista_d) # Saída: [5, 6, 7, 8] ``` ### Ver também - [[Aritmética de ponteiros]] - [[Exemplo de ponteiros em C]] - [[Linguagem de programação C]] - [[Alocação de memória]] - [[Heap na alocação de memória]] - [[Variáveis em Python]] - [[MdC - Programação]]