</AULA 07>

Algoritmos e Lógica de Programação

Ponteiros e Endereçamento de Memória

Portugol
Linguagem C
Python

O que são Ponteiros?

Ponteiros são variáveis especiais que não armazenam um valor comum (como 10 ou 'A'), mas sim o Endereço de Memória de outra variável.

  • Para que serve? Otimização, passagem por referência e manipulação direta de memória.
  • Endereço de Memória: O identificador único de cada Byte na RAM.

Atenção: A sintaxe de Portugol que estamos utilizando não possui estrutura para manipulação de ponteiros.

Por que não em Python?

Python foca em segurança total. O programador não manipula endereços reais para evitar erros como "falha de segmentação". A linguagem gerencia tudo via Garbage Collector.

Unidades de Medida e Memória

O endereço de memória aponta para onde o espaço físico de uma variável começa na RAM.

UnidadeConversão
1 Bit0 ou 1
1 Byte8 Bits
1 KB / MB / GBBase 1024
1 TB1024 GB
Tipo Primitivo (C)Tamanho
char1 Byte (8 bits)
int / float4 Bytes (32 bits)
double8 Bytes (64 bits)
Ponteiro4 ou 8 Bytes

Endereçamento e Espaço Ocupado

Como um int ocupa 4 Bytes, os endereços não pulam de 1 em 1.

Se a Var A começa em 1000, a próxima (Var B) só começa em 1004.

Regra: O endereço de uma variável é o local do primeiro byte que ela ocupa.

Mapa de Memória (int)

[1000] [1001] [1002] [1003]
▲ Var_A (4 Bytes)

[1004] [1005] [1006] [1007]
▲ Var_B (4 Bytes)

Operadores em C: & e *

& (Operador de Endereço)

Retorna o local da variável.

"Onde a variável mora?"

printf("%p", &x); // Ex: 0x7ffd...

* (Operador de Conteúdo)

Pense no * como a mira de um alvo:

Ele não olha para o ponteiro em si, mas foca e "atira" diretamente no conteúdo que está guardado lá no endereço de outra variável.

int val = *ptr; // Mira no alvo e pega o valor

Visualizando o Ponteiro

X = 25 Endereço: 1024 Variável Comum P = &X Endereço: 5000 Ponteiro (*P) P aponta para 1024
O ponteiro P armazena o endereço de X (&X). Ao usar a "mira" (*p), o C acessa o valor 25.

Ponteiros na Prática

Programa Completo em C

#include <stdio.h> int main() { int x = 10; int *p; // Declaração do ponteiro // P recebe o endereço (&) da variável X p = &x; printf("Valor original de X: %d\n", x); printf("Endereço de X (armazenado em P): %p\n", (void*)p); // Alteramos o conteúdo do endereço apontado por P utilizando a desreferenciação (*) *p = 20; printf("Novo valor de X (alterado via ponteiro): %d\n", x); return 0; }

Note que ao alterar *p, modificamos o valor físico no endereço compartilhado com x.

Referências de Estudo

O Programador Pragmático
Andrew Hunt & David Thomas. Um guia indispensável para ser um profissional completo, abordando ética, automação e refatoração.
Ver na Amazon
Código Limpo
Robert C. Martin. O clássico sobre escrever códigos legíveis e sustentáveis, focando na importância de sub-rotinas pequenas e bem nomeadas.
Ver na Amazon
Arquitetura Limpa
Robert C. Martin. Explica como estruturar sistemas para que sejam fáceis de manter e escaláveis, aplicando os princípios fundamentais do SOLID.
Ver na Amazon
Fundamentos de Arquitetura
Mark Richards & Neal Ford (O'Reilly). Uma visão moderna sobre padrões de design e as decisões técnicas que definem softwares de sucesso.
Ver na Amazon