Arrays em C
Arrays são coleções de elementos do mesmo tipo, armazenados em sequência na memória.
Array Unidimensional
Vetor simples de elementos
int numeros[5] = {1, 2, 3, 4, 5};
Array Bidimensional
Matriz com linhas e colunas
int matriz[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
Acesso aos Elementos
Usando índices
int primeiro = numeros[0];
int elemento = matriz[1][2];
Tamanho do Array
Definido na declaração
int tamanho = sizeof(numeros) / sizeof(int);
Ponteiros em C
Ponteiros são variáveis que armazenam endereços de memória de outras variáveis.
Declaração
Usando asterisco (*)
int* ptr;
int valor = 10;
ptr = &valor;
Dereferenciamento
Acessando o valor apontado
int valor = *ptr;
*ptr = 20; // Modifica o valor
Aritmética
Navegando na memória
ptr++; // Próximo elemento
ptr--; // Elemento anterior
Arrays e Ponteiros
Relação próxima
int* p = numeros; // Array decai para ponteiro
int primeiro = *p; // Primeiro elemento
Regras Importantes:
- Arrays começam no índice 0
- Ponteiros não inicializados apontam para lugar indefinido
- Sempre inicialize ponteiros antes de usar
- Cuidado com acesso fora dos limites do array
- Arrays são passados como ponteiros para funções
Exemplos Práticos:
// Trabalhando com Arrays
int numeros[5] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++) {
printf("%d ", numeros[i]);
}
// Trabalhando com Ponteiros
int x = 10;
int* ptr = &x;
printf("Valor: %d\n", *ptr);
printf("Endereço: %p\n", (void*)ptr);
// Arrays e Ponteiros juntos
int* p = numeros;
for(int i = 0; i < 5; i++) {
printf("%d ", *(p + i));
}
Dica: Arrays e ponteiros têm uma relação muito próxima em C. Quando você passa um array para uma função, na verdade está passando um ponteiro para seu primeiro elemento!