Por: Eduardo Casavella
É possível utilizar arrays com várias dimensões.
Ex;
float notas[20]; //array de 1 dimensão, conhecido como vetor. float matriz1[5][5]; //array de 2 dimensões, conhecido como matriz.
Também é possível declarar matrizes com múltiplas dimensões.
int matriz3d [4][4][4] primeira posição da matriz: 0,0,0 última posição da matriz: 3,3,3
Note que uma matriz desse tamanho tem um consumo de: 4 X 4 X 4 = 64 variáveis, então é necessário um certo cuidado com o consumo excessivo de memória.
Como atribuir um array para outro array?
Suponha dois vetores.
int v1[5], v2[5]; v1 = v2; //Esta atribuição NÃO É CORRETA!
Isto não é possível porque o compilador não copia todas as posições do vetor de uma vez.
Então só seria possível copiar posição por posição. Além do mais os vetores poderiam ter tamanhos diferentes o que poderia causar problemas no caso de uma atribuição desse tipo.
Inicializando de arrays
Veremos como inicializar arrays de uma dimensão (vetores) e de várias dimensões (matrizes).
Como inicializar um vetor com zeros.
É possível usar uma estrutura de repetição for para “zerar” todas as posições do vetor.
Exemplo:
#include<stdio.h> #include<conio.h> int main(void) { int vetor[20],i; /* Inicializando o vetor com zeros */ for (i = 0; i <= 19; i++) { vetor[i] = 0; } /* Imprimindo os valores do vetor */ for (i = 0; i <= 19; i++) { printf ("vetor[%d] = %d\n", i, vetor[i]); } getch(); return 0; }
Note bem que no código acima o vetor tem um total de 20 posições de armazenamento. Neste caso o for inicia em zero que é a primeira posição de armazenamento e termina em 19 que é a última posição. De zero a 19 temos um total de 20 posições de armazenamento pois a posição zero também conta.
Tela de execução
Como podemos ver esta técnica funciona bem e é muito útil especialmente para vetores de muitas posições.
Mas e se os valores atribuídos fossem diferentes?
Neste caso, não poderíamos usar o for pois não há um único valor a ser atribuído e sim vários valores diferentes.
Poderíamos declarar o vetor atribuir valores durante a própria declaraçao assim:
#include<stdio.h> #include<conio.h> int main(void) { /*Declarando e atribuindo valores ao vetor*/ int i,vetor[6] = {7, 55, 5, 4, 76, 89}; /* Imprimindo os valores do vetor */ for (i = 0; i <= 5; i++) { printf ("vetor[%d] = %d\n", i, vetor[i]); } getch(); return 0; }
Tela de execução
Supondo agora uma matriz de duas dimensões:
int m[2][2] = {1,2,3,4}; ou int m[2][2] = {{1,2},{3,4}};
#include<stdio.h> #include<conio.h> int main(void) { int i, j, matriz[2][2] = {10,20,30,40}; /* Imprimindo os atribuídos para a matriz */ for (i = 0; i <= 1; i++) { for(j = 0; j <=1; j++) { printf ("matriz[%d][%d] = %d\n", i,j, matriz[i][j]); } } getch(); return 0; }
Tela de execução
Uma outra forma de atribuição seria
#include<stdio.h> #include<conio.h> int main(void) { int matriz[2][2] = {{11,22},{32,44}}; int i,j; /* Imprimindo os atribuídos para a matriz */ for (i = 0; i <= 1; i++) { for(j = 0; j <=1; j++) { printf ("matriz[%d][%d] = %d\n", i,j, matriz[i][j]); } } getch(); return 0; }
Tela de execução
A segunda forma é um pouco mais trabalhosa, porém considero que seja mais clara.
Inicializando um vetor sem tamanho definido
Para inicializar o vetor sem definir o tamanho usamos a seguinte atribuição;
int v[] = {99,32,45,87,90,76};
Neste caso o compilador vai calcular automaticamente que a quantidade de posições usadas pelo vetor
são 6.
Inicializando uma matriz sem tamanho definido.
int m[][2] = {23, 45, 54, 55,77, 65}
Neste caso como a segunda dimensão é 2, o compilador vai calcular a primeira dimensão como sendo 3.
#include<stdio.h> #include<conio.h> int main(void) { /* Inicializando uma matriz sem tamanho definido */ int matriz[][2] = {23, 45, 54, 55,77, 65}; int i,j; /* Imprimindo os atribuídos para a matriz */ for (i = 0; i <= 2; i++) { for(j = 0; j <= 1; j++) { printf ("matriz[%d][%d] = %d ", i,j, matriz[i][j]); } printf("\n"); } getch(); return 0; }
Tela de execução
Embora seja possível fazer estes tipos de declarações sem tamanhos definidos é mais interessante usar uma variável para guardar o tamanho do vetor, dessa forma fica mais claro o que está sendo feito.
Até a próxima!
Uma resposta a Arrays com várias dimensões em C