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[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

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

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