Arrays
Arrays são estruturas de dados que permitem armazenar mais do que um valor numa só variável.
Características de um array
- Um array é composto por elementos todos do mesmo tipo de dados.
- Um array tem um tamanho que é o numero de elementos que o compõem.
- Esse tamanho é fixo e não pode ser alterado durante a execução do programa. Os arrays são estruturas estáticas.
- Cada elemento de um array tem um índice interno (a começar em zero) que identifica cada elemento dentro do array. Acedemos a cada elemento do array, seja para colocar um valor ou para lhe alterar o valor, através do seu índice.
Dimensão de um array
Um array pode ter uma ou mais dimensões. Normalmente, trabalhamos com arrays até 3 dimensões, sendo que é mais comum fazê-lo com arrays de uma ou duas dimensões.
Um array com uma dimensão diz-se unidimensional.
Um array unidimensional pode representar-se visualmente com a imagem seguinte mostra:

De notar que cada elemento tem um indice que o identifica e que começa no zero.
Um array com duas dimensões diz-se bidimensional :

Vantagens e desvantagens dos arrays
A principal vantagem dos arrays é poderem armazenar vários valores numa só variável. A principal desvantagem é o facto de os arrays serem estruturas estáticas, ou seja, não podemos alterar o seu tamanho durante a execução do programa, o que significa que não podemos acrescentar ou eliminar elementos.
Declaração de um array
A sintaxe para a declaração de um array é a seguinte:
tipo_dados nome_array[tamanho_do_array];
tipo_dados : tipo de dados do array
tamanho_do_array: número inteiro que define quantos elementos tem o array.
Exemplos:
int nrs[7]; //array com 7 elementos do tipo int
char letras[10]; //array com 10 elementos do tipo char
Inicialização de um array
Inicializar um array é atribuir valores a cada um dos seus elementos.
Podemos inicializar um array quando o declaramos com a sintaxe seguinte:
tipo_dados nome_array[] = {valor1, valor2,…, valor};
De notar nesta sintaxe que não declaramos explicitamente o tamanho do array. O C depreende o seu tamanho pelo numero de valores que atribuímos ao array entre as chavetas:
Exemplo:
int numeros[] = {7, 11, 4, 9, 3};
No exemplo acima, declaramos um array com 5 elementos (tamanho 5) pois é esse o numero de valores que atribuímos ao array entre as chavetas.
Outra forma de inicializarmos um array é declarar o array e depois aceder a cada um dos elementos individualmente, através do índice, e colocar um valor nesse elemento:
int numeros[4];
numeros[0] = 7;
numeros[1] = 4;
numeros[2] = 11;
numeros[3] = 9;
Acesso aos elementos de um array
Podemos aceder a qualquer um dos elementos de um array, através do seu índice, seja para obter o seu valor seja para alterar o seu valor:
inteiro numeros[5] = {7, 3, 1, 6, 9}
//obter o valor de um elemento:
inteiro valor = numeros[3]
//alterar o valor de um elemento:
numeros[3] = 11
Percorrer um array
Podemos atravessar um array do inicio ao fim acedendo a cada um dos seus elementos, através da repetição for:
double numeros[] = {9.43, 4,3, 12,7, 0,65};
int i;
for(i=0; i<4; i++){
printf("%lf\n", numeros[i]);
}
Neste exemplo a variável i percorre os valores de 0 a 3 servindo de índice para aceder a cada um dos elementos do array.
Obter o tamanho de um array com sizeof()
O C não possui nenhuma forma direta para obter o t amanho de um array. No entanto podemos obter esse tamanho com o operador sizeof.
Como vimos atrás, o operador sizeof dá-nos o tamanho de uma variável ou tipo de dados em bytes. Podemos usar esse facto para obter o tamanho de um array. Para tal, basta dividirmos o tamanho em bytes de todo o array pelo tamanho em bytes de um dos seus elementos, o primeiro por exemplo:
Tamanho_do_array = tamanho_do_array_em_bytes / tamanho_do_primeiro_elemento
O código em C será:
double numeros[] = {9.43, 4.3, 12.7, 0.65};
int tamanho = sizeof(numeros) / sizeof(numeros[0]);
printf("%d", tamanho); //Output: 4
Passagem de arrays para uma função
Podemos passar arrays para funções em C. No entanto, os arrays são tratados como ponteiros para o primeiro elemento do array dentro da função. Quando passamos um array para uma função temos de passar também o seu tamanho:
// Função que calcula a soma dos elementos de um array
int somaArray(int arr[], int tamanho)
{
int soma = 0;
for (int i = 0; i < tamanho; i++)
{
soma += arr[i];
}
return soma;
}
int main()
{
int numeros[] = {1, 2, 3, 4, 5};
int tamanho = 5;
//chamamos a função passando a função e o seu tamanho:
int resultado = somaArray(numeros, tamanho);
printf("A soma dos elementos do array é: %d\n", resultado);
return 0;
}
Na instrução
int resultado = somaArray(numeros, tamanho);
quando passamos o array pelo seu nome, estamos a passar de facto o endereço de memória do primeiro elemento do array.