Carregando
0x80Lição 9 de 20

Arrays (vetores)

Guarde muitos valores do mesmo tipo lado a lado na memória e percorra-os com segurança.

14 min Questionário com 5 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Declarar, inicializar e indexar arrays
  • Percorrer um array sem sair dos limites
  • Passar arrays para funções junto com o tamanho deles

Um array é um número fixo de valores do mesmo tipo, guardados um depois do outro na memória. Em vez de score1, score2, score3... você escreve int scores[3] e chega a cada um pelo seu índice.

scores.c
1#include <stdio.h>
2
3int main(void) {
4    int scores[5] = {90, 72, 85, 64, 99};
5
6    printf("First: %d\n", scores[0]);
7    printf("Last: %d\n", scores[4]);
8
9    scores[1] = 75;   // change an element
10    printf("Second is now %d\n", scores[1]);
11    return 0;
12}
Saída
First: 90
Last: 99
Second is now 75

Os índices começam em zero

Um array de 5 elementos tem os índices de 0 a 4. O índice é, na verdade, um deslocamento: "o início do array, mais esta quantidade de elementos". Então scores[0] é o primeiro elemento e scores[4] o último. Não existe scores[5].

Percorrendo um array

O laço padrão visita os índices de 0 até o tamanho, sem incluí-lo. Você pode calcular o tamanho de um array (na mesma função em que ele é declarado) com sizeof:

average.c
1#include <stdio.h>
2
3int main(void) {
4    int scores[] = {90, 72, 85, 64, 99};
5    size_t count = sizeof scores / sizeof scores[0];
6
7    int total = 0;
8    for (size_t i = 0; i < count; i++) {
9        total += scores[i];
10    }
11    printf("%zu scores, average %.1f\n", count, (double)total / count);
12    return 0;
13}
Saída
5 scores, average 82.0

Com um inicializador, você pode deixar o tamanho vazio (int scores[] = {...}) e o compilador conta para você. Se você der um tamanho e menos valores, o resto é zerado: int counts[26] = {0}; é o jeito idiomático de zerar um array.

Arrays e funções

Quando você passa um array para uma função, o C não o copia. A função recebe o endereço do primeiro elemento, o que tem uma consequência importante: dentro da função, o sizeof não consegue mais dizer o tamanho. Por isso você sempre passa o tamanho como um parâmetro separado. Isso também significa que uma função pode modificar o array de quem chamou.

max.c
1#include <stdio.h>
2
3int find_max(const int values[], size_t length) {
4    int best = values[0];
5    for (size_t i = 1; i < length; i++) {
6        if (values[i] > best) {
7            best = values[i];
8        }
9    }
10    return best;
11}
12
13int main(void) {
14    int data[] = {3, 41, 7, 26, 9};
15    printf("Max: %d\n", find_max(data, 5));
16    return 0;
17}
Saída
Max: 41

Arrays bidimensionais

int grid[3][4]; são 3 linhas de 4 colunas. Acesse os elementos com dois índices, grid[row][col], e percorra-os com laços for aninhados. Na memória, ele continua sendo uma sequência plana de 12 ints, uma linha depois da outra.

Principais conclusões

  • Um array de N elementos tem os índices de 0 a N-1. O C nunca verifica os limites por você.

  • Percorra com for (size_t i = 0; i < length; i++). Obtenha o tamanho com sizeof array / sizeof array[0] onde o array é declarado.

  • Arrays passados para funções não são copiados: passe o tamanho separadamente e use const se a função não deve modificá-lo.

Quiz da aula

5 perguntas · aprovação com 4 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C

Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.

Exercício 1

Imprima ao contrário

+25 XP

Leia 5 inteiros num array e depois imprima-os em ordem inversa, separados por espaços, seguidos de uma quebra de linha.

Para a entrada 1 2 3 4 5, imprima 5 4 3 2 1.

  • 1 2 3 4 5
  • Números variados
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Exercício 2

Acima da média

+25 XP

O primeiro número da entrada é n (no máximo 100), seguido de n inteiros. Imprima quantos deles são estritamente maiores que a média.

Para 5 e depois 1 2 3 4 10, a média é 4, então a resposta é 1.

  • 1 2 3 4 10
  • Todos iguais
  • Metade acima
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…