<aside>
Conhecimentos necessários:
Variáveis, entrada e saída de dados, estruturas condicionais e estruturas repetitivas
Dados, bases numéricas e memória
</aside>
<aside>
Navegação
</aside>
Bom… e se quiséssemos salvar múltiplos dados? Tipo as notas de todos os 3400 alunos da uma escola, ou o CPF de todos os cidadãos de uma cidade? Concorda comigo que não seria nada eficiente criar milhares de variáveis? É nesses momentos que precisamos usar os vetores ou as matrizes!
Obs.: um vetor pode ser chamado também de array unidimensional e uma matriz de array multidimensional.
Um vetor nada mais seria do que uma lista de variáveis! Ele não se limita a guardar apenas um número, ou apenas uma letra, por exemplo.
Já uma matriz, é uma “lista de lista de variáveis” ou um “vetor de vetores”! Meio confuso, né? Já, já mostro um exemplo de tudo isso!
Para declararmos um vetor, basta informar o tipo de variável, o nome dela e colchetes na frente. Dentro desses colchetes virão a quantidade de dados que salvaremos lá dentro. Como exemplo, vou criar um vetor para poder guardar a idade de 30 pessoas:
int idades[30];
Viu? Assim criamos um vetor que consegue guardar 30 ints, o que seria o mesmo de criar 30 variáveis para isso, só que se um jeito mais fácil!
Ei… Mas percebe que parece muito como criamos uma string? Exatamente! Pois a string nada mais é do que um vetor de char!
Para declararmos uma matriz é quase da mesma forma… mas lembra que ela é um “vetor de vetores”? Então só precisamos colocar mais um par de colchetes na frente e indicar quantos vetores queremos! Como exemplo, vou querer criar 5 listas de 30 idades, cada:
int idades[5][30];
Lembra que uma string é um vetor de char? Então se quisemos, podemos fazer uma matriz para guardar 5 strings dessa mesma forma!
Para atribuir, vamos colocar os valores entre chaves separados por vírgulas. Desse jeito:
int idades[5] = {18, 19, 31, 7, 34};
Ou podemos colocar elemento por elemento. Desse jeito:
int main(){
int idade[5];
idade[0] = 18; //coloca 18 no primeiro elemento.
idade[1] = 19; //coloca 19 no segundo elemento.
idade[2] = 31; //coloca 31 no terceiro elemento.
idade[3] = 7; //coloca 7 no quarto elemento.
idade[4] = 34; //coloca 34 no quinto elemento.
return 0;
}
Para usar no printf, usamos cada um dos elementos como se fosse uma variável normal. Tipo assim:
printf("Segunda idade: %d", idade[1]);
Já para matrizes, podemos atribuir cada vetor dela do mesmo jeito do primeiro caso acima, sempre lembrando que ela seria tipo um “vetor de vetores”:
int main(){
int idade[3][3] = {{11, 12, 13}, {14, 15, 16}, {17, 18, 19}};
return 0;
}
Ou também podemos colocar elemento por elemento. Desse jeito:
int main(){
int idade[3][3];
idade[0][0] = 11; //atribuindo ao 1º elemento do 1º vetor.
idade[0][1] = 12; //atribuindo ao 2º elemento do 1º vetor.
idade[0][2] = 13; //atribuindo ao 3º elemento do 1º vetor.
idade[1][0] = 14; //atribuindo ao 1º elemento do 2º vetor.
idade[1][1] = 15; //atribuindo ao 2º elemento do 2º vetor.
idade[1][2] = 16; //atribuindo ao 3º elemento do 2º vetor.
idade[2][0] = 17; //atribuindo ao 1º elemento do 3º vetor.
idade[2][1] = 18; //atribuindo ao 2º elemento do 3º vetor.
idade[2][2] = 19; //atribuindo ao 3º elemento do 3º vetor.
return 0;
}
Mas concorda que fazer isso manualmente é trabalhoso? Por isso quase sempre que usamos arrays, também usamos estruturas de repetições!
Um detalhe importante é que a string é um tipo de vetor especial. É o único tipo que podemos atribuir assim:
char nome[5] = "Joao";
Ou assim, também, se quisermos:
char nome[5] = {'J', 'o', 'a', 'o', '\\0'};
Nunca esquecendo o caractere ‘\0’ que é o indicador do final da string.
Um detalhe importante que faz toda a diferença quando trabalhamos com arrays nos parâmetros e argumentos é: todo array é passado por referência. Ou seja, a função tem capacidade de mudar o valor original do array. Um exemplo:
#include <stdio.h>
void MudaArray(int array[]){
array[0] = 31;
array[1] = 41;
array[2] = 51;
}
int main(){
int idade[3] = {18, 19, 20};
MudaArray(idade);
printf("%d %d %d", idade[0], idade[1], idade[2]); //vai mostrar "31 41 51"
return 0;
}