Arrays com várias dimensões em C

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[19],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;
}

Tela de execução

Arrays com varias dimensoes exemplo 1

Tela de execução Inicializando o vetor com zeros

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)
{
  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

Arrays com varias dimensões exemplo 2

Tela de execução Atribuindo valores na própria declaraçã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

Arrays com varias dimensões exemplo 3

Tela de execução Valores atribuídos para a matriz

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

Arrays com varias dimensões exemplo 4

Tela de execução outra forma de atribuiçã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

Arrays com varias dimensões exemplo 5

Tela de execução Inicializando uma matriz sem tamanho definido

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