Publicidade

Aula 20: Arrays

Aprenda a declarar, inicializar e acessar arrays em C, com diagramas de memória claros.

📖 O que aprender nesta página
✅ Essencial saber
  • int a[5]; declara um array de 5
  • Índice de a[0] até a[4]
  • Acesso fora dos limites é um bug
⭐ Leia se tiver tempo
  • Inicializador: int a[] = {1,2,3};
  • Arrays 2D: int m[3][4]
  • sizeof(a)/sizeof(a[0]) para contar elementos

Array — agrupa valores do mesmo tipo

Os índices começam em 0.
int a[5] = {10, 20, 30, 40, 50};
printf("%d\n", a[0]); // -> 10
printf("%d\n", a[4]); // -> 50
⚠️ O 5 em int a[5] é a quantidade. a[5] em si não existe!
Esse é o erro principal dos iniciantes em C.
● Na declaração, [5] significa "quantos" → reserva espaço para 5 elementos.
● Num acesso, [ ] significa "qual deles" → só 0 até 4 são válidos.

int a[5]; // reserva 5 slots: a[0], a[1], a[2], a[3], a[4]
a[0] = 10; // ✅ primeiro elemento
a[4] = 50; // ✅ último elemento
a[5] = 99; // ❌ fora dos limites — escreve em memória que não é sua (comportamento indefinido)

Você tem a[0] até a[4] — exatamente 5 slots. Lembre: o tamanho da declaração 5 e o último índice válido 4 sempre diferem em 1.

Por quê? Um índice é "a distância do início." O primeiro elemento está a "0 de distância", e com 5 slots o último está a "4 de distância."
💡 Quão ruim é o acesso fora dos limites? C não vai marcar a[5] ou a[100] como erro (muitas vezes nem como aviso). Em tempo de execução pode sobrescrever outra variável, travar com Segmentation fault, ou — pior — parecer funcionar enquanto silenciosamente corrompe dados.
Por isso os laços usam i < 5 (menor estrito) para "0 até 4". Escrever i <= 5 tocaria em a[5] — o clássico bug de off-by-one.

Layout da memória de array

Elementos de array ficam contíguos na memória. Clique numa célula para inspecioná-la.
Clique numa célula para ver os detalhes.

Execução passo a passo — array com laço for

array_demo.c

Estado das variáveis

NomeTipoValor

Memória do array

Saída padrão

 

Arrays 2D

Para dados tabulares com linhas e colunas, use um array 2D.
Declare como tipo nome[linhas][colunas];.

Declarar e inicializar

// 3 linhas x 4 colunas
int matrix[3][4] = {
    {1,  2,  3,  4},   // linha 0
    {5,  6,  7,  8},   // linha 1
    {9, 10, 11, 12}    // linha 2
};

Layout da memória

Na memória, um array 2D fica numa linha contígua (ordem row-major, ou por linhas).
matrix[1][2] é o terceiro elemento da linha 1, que é 7.
1
2
3
4
5
6
7
8
9
10
11
12
Azul = linha 0, verde = linha 1 (laranja = matrix[1][2]), vermelho = linha 2

Percorrer com laços aninhados

for (int i = 0; i < 3; i++) {        // linha
    for (int j = 0; j < 4; j++) {    // coluna
        printf("%3d", matrix[i][j]);
    }
    printf("\n");
}
Tabuadas e matemática de matrizes são casos de uso clássicos para arrays 2D.
Quando você passa um para uma função, precisa especificar a contagem de colunas: void func(int m[][4], int rows).

Experimente — array

my_array.c
Saída
Clique em "Executar" para rodar...
⚠️ "Média = 80" está realmente certo? — a armadilha da divisão inteira
A soma é 80+65+92+78+88 = 403, então a média real é 403 ÷ 5 = 80.6.
Mas o programa imprime 80. Isso porque em C, int dividido por int trunca em direção a zero (int / int → int).
Para obter 80.6 direito:
Faça cast de um operando para double: double avg = (double)sum / 5;
Depois imprima com printf("Media = %.1f\n", avg); (%.1f = uma casa decimal).
💡 "Divisão inteira trunca" é a pegadinha número um para iniciantes em C. Veja a Aula 8 (Operadores aritméticos) para mais.
💡 Experimente estas ideias também
Publicidade

Aulas Relacionadas

Laços
Aula 11: Laços for e while
Como usar laços for e while em C.
Arrays e Strings
Aula 22: Strings
Como trabalhar com strings em C: arrays de char, strcpy, strlen, strcmp.
Referência
Cheat Sheet de C
Referência rápida de printf, operadores, tipos e mais.
← Aula anterior
Aula 19: Depuração
Próxima aula →
Aula 21: Teste (Arrays)

Teste de Revisão

Teste seu entendimento desta aula!

Q1. Quantos elementos int a[5]; aloca?

4
5
6

a[5] dá 5 elementos, de a[0] até a[4].

Q2. De qual índice um array em C começa?

0
1
Qualquer um

Índices de arrays em C sempre começam em 0. Em a[5], a[0] é o primeiro elemento.

Q3. Para int a[3] = {1, 2};, qual o valor de a[2]?

Indefinido
0
2

Quando um array é parcialmente inicializado, os elementos restantes são inicializados com zero. Então a[2] é 0.

Compartilhe este artigo
Compartilhar no X (Twitter) Compartilhar no Facebook