C++: Fundamentos de Arrays
Última atualização: 2026-08-26
Nas aulas anteriores, cada variável podia armazenar apenas um valor.
Mas se você precisa armazenar as notas de 100 alunos, não pode declarar 100 variáveis, certo?
Arrays resolvem este problema — um bloco contíguo de memória usado para armazenar múltiplos valores do mesmo tipo.
1. O que é um Array?
(1) 1.1 Arrays no Dia a Dia
| Analogia da Vida Real | Equivalente em Programa |
|---|---|
| Uma fileira de caixas de correio (cada uma com número diferente) | Array (cada elemento tem um índice diferente) |
| Uma caixa de ovos (12 ovos, numerados 1-12) | Array (12 elementos, índices 0-11) |
Características dos arrays:
- Todos os elementos são do mesmo tipo (todos
int, ou todosdouble) - Memória contígua (elementos são armazenados um após o outro)
- Índices começam em 0 (não em 1!)
(2) 1.2 Por Que Precisamos de Arrays?
Sem arrays (exemplo ruim):
▶ Exemplo 2: Prática Básica de Programação (Dificuldade ⭐)
#include <iostream>
int main() {
int score1 = 90;
int score2 = 85;
int score3 = 92;
// ... precisa declarar 100 variáveis!
return 0;
}
Saída:
(Program output)
Com arrays (exemplo bom):
#include <iostream>
int main() {
int scores[100]; // array que pode conter 100 inteiros
// usa loop para atribuir valores
for (int i = 0; i < 100; i++) {
scores[i] = 0;
}
return 0;
}
2. Declaração e Inicialização de Arrays
(1) 2.1 Declarando um Array
Sintaxe:
Type arrayName[Número de elementos];
Exemplo:
int scores[5]; // array que pode conter 5 inteiros
double prices[10]; // array que pode conter 10 doubles
char letters[26]; // array que pode conter 26 chars
💡 Ponto-chave: Os índices de um array começam em 0, então scores[5] tem índices de 0 a 4 (não 1 a 5).
(2) 2.2 Inicializando um Array
Método 1: Inicializar na declaração
int scores[5] = {90, 85, 92, 78, 88};
Método 2: Inicialização parcial
int scores[5] = {90, 85}; // inicializa apenas os dois primeiros, resto se torna 0 automaticamente
Método 3: Deixar o compilador inferir o tamanho
int scores[] = {90, 85, 92, 78, 88}; // compilador infere tamanho como 5
💡 Dica: O Método 3 é recomendado — se você mudar o conteúdo do array depois, não precisa atualizar o tamanho manualmente.
3. Acessando Elementos do Array
(1) 3.1 Lendo Elementos
Sintaxe:
arrayName[Índice]
Exemplo:
#include <iostream>
int main() {
int scores[5] = {90, 85, 92, 78, 88};
std::cout << "First score: " << scores[0] << std::endl; // 90
std::cout << "Third score: " << scores[2] << std::endl; // 92
std::cout << "Last score: " << scores[4] << std::endl; // 88
return 0;
}
(2) 3.2 Modificando Elementos
#include <iostream>
int main() {
int scores[5] = {90, 85, 92, 78, 88};
scores[1] = 95; // muda a segunda nota para 95
std::cout << "Modified second score: " << scores[1] << std::endl; // 95
return 0;
}
4. Percorrendo um Array
(1) 4.1 Percorrendo com um Loop for
#include <iostream>
int main() {
int scores[5] = {90, 85, 92, 78, 88};
std::cout << "All scores: " << std::endl;
for (int i = 0; i < 5; i++) {
std::cout << "No. " << i + 1 << " Score: " << scores[i] << std::endl;
}
return 0;
}
💡 Ponto-chave: Ao percorrer um array, a condição do loop é tipicamente i < array_size, em vez de i <= array_size - 1 (que é mais propenso a erros).
5. Tamanho do Array
(1) 5.1 Calculando o Número de Elementos com sizeof
#include <iostream>
int main() {
int scores[5] = {90, 85, 92, 78, 88};
int size = sizeof(scores) / sizeof(scores[0]); // calcula tamanho do array
std::cout << "Array size:" << size << std::endl; // 5
return 0;
}
Como funciona:
sizeof(scores)— bytes totais do array inteiro (5 × 4 = 20 bytes)sizeof(scores[0])— bytes de um elemento (4 bytes)- Dividindo, obtém-se o número de elementos
💡 Dica: Este método só funciona para arrays reais, não para ponteiros (coberto mais tarde).
6. Arrays como Parâmetros de Função
(1) 6.1 O Problema: Arrays Decaem para Ponteiros
Quando você passa um array para uma função, ele decai para um ponteiro (perdendo informação de tamanho).
#include <iostream>
// array como parâmetro, precisa passar o tamanho
void printArray(int arr, int size) {
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main() {
int scores[5] = {90, 85, 92, 78, 88};
printArray(scores, 5); // passa nome do array (que é endereço do primeiro elemento)
return 0;
}
💡 Ponto-chave: Ao passar um array como parâmetro, você deve também passar o tamanho.
7. Erros Comuns
(1) 7.1 Acesso Fora dos Limites do Array
Exemplo de erro:
#include <iostream>
int main() {
int scores[5] = {90, 85, 92, 78, 88};
std::cout << scores[5] << std::endl; // ERRO: fora dos limites! índice máximo é 4
return 0;
}
Consequência: Leitura de valores lixo, ou travamento do programa.
💡 Dica: C++ não verifica automaticamente os limites do array! Isso é uma razão pela qual C++ é rápido, mas também uma fonte comum de bugs.
(2) 7.2 Usando uma Variável como Tamanho do Array (Antes do C++11)
Exemplo de erro (antes do C++11):
#include <iostream>
int main() {
int n = 5;
int scores[n]; // ERRO (antes do C++11): tamanho do array deve ser constante em tempo de compilação
return 0;
}
Abordagem correta (suportada após C++11):
#include <iostream>
int main() {
int n = 5;
int scores[n]; // OK (após C++11): Variable Length Array (VLA) suportado
return 0;
}
💡 Abordagem melhor: Use std::vector (coberto mais tarde), que suporta tamanhos dinâmicos.
8. Prática: Calculando a Média das Notas
▶ Exemplo 1: Calculando Média das Notas (Dificuldade ⭐⭐)
#include <iostream>
#include <iomanip>
int main() {
int scores[5] = {90, 85, 92, 78, 88};
int sum = 0;
// calcula nota total
for (int i = 0; i < 5; i++) {
sum += scores[i];
}
// calcula média
double average = static_cast<double>(sum) / 5;
std::cout << std::fixed << std::setprecision(2);
std::cout << "Total: " << sum << std::endl;
std::cout << "Average: " << average << std::endl;
return 0;
}
Saída:
Total: 433
Average: 86.60
❓ Perguntas Frequentes
P: Por que os índices de arrays começam em 0 em vez de 1? *R: Razão histórica — quando C foi projetado, por eficiência, o nome do array é simplesmente o endereço do primeiro elemento. > > int scores[5]; > // scores é &scores[0](endereço do primeiro elemento) > // scores[i] é (scores + i)(aritmética de ponteiro) > > Começar em 0 torna a aritmética de ponteiros mais simples. P: Arrays podem mudar de tamanho? R: Não! O tamanho de um array deve ser determinado em tempo de compilação e não pode ser alterado.
Se você precisa de dimensionamento dinâmico, use
std::vector(coberto mais tarde).
P: Como inicializo todos os elementos do array com 0? R:> > int scores[100] = {0}; // Método 1: Inicialização parcial(restante preenchido com 0) > > int scores[100]; > for (int i = 0; i < 100; i++) { > scores[i] = 0; // Método 2: Atribuir com loop > } >
▶ Exemplo 3: Travessia de Array (Dificuldade ⭐)
#include <iostream>
int main() {
int scores[] = {85, 92, 78, 90, 88};
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += scores[i];
}
double avg = sum / 5.0;
std::cout << "Average: " << avg << std::endl;
return 0;
}
Saída:
Average: 86.6
{}, e o número de elementos pode ser calculado usando sizeof(arr) / sizeof(arr[0]).
📖 Resumo
- Arrays são um bloco contíguo de memória usado para armazenar múltiplos valores do mesmo tipo
- Os índices de arrays começam em 0
- Declarando um array:
Type arrayName[Size]; - Inicializando um array:
Type arrayName = {val1, val2, ...}; - Acessando elementos:
arrayName[Index] - Percorrendo um array: use um loop
for - Quando passados como parâmetro, arrays decaem para ponteiros e requerem passar o tamanho separadamente
📝 Exercícios
-
Básico (Dificuldade ⭐): Declare um array
doublepara armazenar 5 preços, depois use um loop para calcular o preço total. -
Intermediário (Dificuldade ⭐⭐): Escreva uma função
int findMax(int arr, int size)que encontre o valor máximo em um array. Teste-a emmain. -
Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que permita ao usuário digitar 10 inteiros, armazene-os em um array, depois:
-
Encontre os valores máximo e mínimo
-
Calcule a média
-
Exiba todas as notas acima da média
- Array: uma coleção contígua de memória de elementos do mesmo tipo
- Índices começam em 0; tamanho deve ser especificado na declaração
- Lista de inicialização de array
{}pode omitir o tamanho - Percorra arrays usando loops for com índices
- O nome do array é o endereço do primeiro elemento e não pode ser modificado
9. 🚀 Próximo Passo
Agora que você aprendeu fundamentos de arrays, vamos avançar para Arrays Multidimensionais (Aula 17) — lidando com dados tabulares (como matrizes, tabuleiros de jogos).