Matrizes
As matrizes, assim como os vetores, são estruturas de dados homogêneas. Portanto, todos os valores precisam ser do mesmo tipo de dado. A diferença principal é que, na matriz, podemos ter mais de uma dimensão.
💡 Conceitos fundamentais
Uma matriz de duas dimensões pode ser representado visualmente da seguinte forma:
Assim como no vetor, cada elemento de uma matriz é armazenado em um espaço de memória exclusivo. A diferença é que, para navergamos pelas posições da matriz, usaremos dois índices: um para a linha e outro para a coluna (nesta ordem). Na linguagem C, esse indicador sempre começa a ser contado a partir do 0
.
Observe também, pela figura, que embora enxerguemos essa estrutura como uma matriz (assim como aprendemos na escola), ela é armazenada como um grande vetor.
👨🏽💻 Do conceito ao código
A declaração de um vetor segue a seguinte abordagem:
tipo nomedamatriz[qtdeLinhas][qtdeColunas];
Logo, para declarmos um vetor de inteiros com 4 linhas e 5 colunas, usamos a seguinte sintaxe:
int numeros[4][5];
Atribuindo valores
Podemos atribuir valores à matriz desde a sua declaração, como no exemplo abaixo:
int valores[4][5] = {
{1,2,3,4,5}, // primeira linha
{6,7,8,9,10}, //segunda linha
{11,12,13,14,15}, // terceira linha
{16,17,18,19,20} // quarta linha
};
Ou, também, atribuir ou alterar esses valores ao longo da execução do programa. Nesse caso, precisamos manipular posições específicas da matriz. Para manipular uma posição específica, precisamos informar entre os colchetes [][]
o índice da linha e da coluna desejadas.
Veja como exemplo:
int main(void){
int valores[4][5];
valores[0][0] = 1; // afeta a linha 0, coluna 0
valores[1][0] = 7; // afeta a linha 1, coluna 0
}
Imprimindo a matriz
Para imprimir um único elemento da matriz, usamos a seguinte expressão:
printf("%d", nomedovetor[nrolinha][nrocoluna]);
Da mesma forma, para imprimirmos todos os itens de uma matriz, podemos usar laços de repetição:
for(int i = 0; i < qtdeLinhas; i++){
for(int j = 0; j < qtdeColunas; j++){
printf("%d ", matriz[i][j]);
}
printf("\n");
}