Arrays (vetores)
Guarde muitos valores do mesmo tipo lado a lado na memória e percorra-os com segurança.
- 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.
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}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:
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}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.
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}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 comsizeof array / sizeof array[0]onde o array é declarado.Arrays passados para funções não são copiados: passe o tamanho separadamente e use
constse 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.
Imprima ao contrário
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
Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.
Acima da média
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
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…