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.