Passando arrays para funções em C

Passando arrays para funções em C

Podemos passar um array como argumento em uma função em C de forma bem simples. Para isso, basta passar o array se utilizar os colchetes. Por exemplo, seja o array Temperaturas, com 5 posições, declarado com segue:

int Temperaturas[5];

Podemos passá-lo para uma função de nome ajustaTemperaturas da seguinte forma:

ajustaTemperaturas(Temperaturas, 5);

Passamos o array Temperaturas e seu tamanho para a função ajustaTemperaturas. Quando passamos um array para uma função, o tamanho desse array é frequentemente passado também, de modo que a função possa processar o número específico de elementos que o array contém.

Exemplo

Vejamos um programa com um exemplo de aplicação dessa técnica:

#include <stdio.h>
#include <stdlib.h>
#define TAMANHO 5

 //protótipos das funções
void ajustaTemperaturas(float [], int);
float mediaTemperaturas(float [], int);
int main()
{
 int i;
 float Temperaturas[TAMANHO] = { 23.9, 24.5, 26.8, 22.9, 19.4 };
 printf("Conteúdo atual do array de temperaturas:\n\n");
 for (i = 0; i < TAMANHO; i++) {
   printf("Temperatura %d: %4.2f\n", i + 1, Temperaturas[i]);
 }

// Calculando a temperatura média:
 printf("Temperatura media: %4.2f\n", mediaTemperaturas(Temperaturas, TAMANHO));
// Chamando a função de ajuste de temperatura e passando o array para ela:
 ajustaTemperaturas(Temperaturas, TAMANHO);
 printf("\n\nVerificando as novas temperaturas armazenadas no array:\n\n");
 for (i = 0; i < TAMANHO; i++) {
   printf("Temperatura %d: %4.2f\n", i + 1, Temperaturas[i]);
 }
return 0;
}
// função que altera as temperaturas armazenadas no array, diminuindo 2 graus:
void ajustaTemperaturas(float a[], int tam) {
 int j;
 for (j = 0; j < tam; j++) {
   a[j] -= 2.0;
 }
}

// função que calcula a média das temperaturas:
float mediaTemperaturas(float a[], int tam) {
 int t;
 float acumula = 0;
 float media = 0;
 for (t = 0; t < tam; t++) {
   acumula += a[t];
 }
 media = acumula / tam;
 return media;
}

Os arrays em C são passados automaticamente para as funções usando uma chamada por referência simulada. Isso significa que as funções podem modificar os valores dos elementos  dentro dos arrays originais. Dessa forma, tome cuidado ao passar um array como argumento de uma função, caso você precise manter os valores originalmente armazenados nele após o processamento de seu conteúdo.

Na verdade, o nome do array passado é o endereço do primeiro elemento do array. Desta forma, a função chamada sabe exatamente onde o array está armazenado na memória, e ao modificar os valores do array passado dentro de seu corpo, os elementos reais do array são modificados, em seu local de memória original.

Passando um elemento do array para uma função

Elementos individuais de um array são passados para uma função por valor, da mesma forma que acontece com variáveis comuns. Chamamos a essas unidades de dados de quantidades escalares, ou simplesmente escalares.

Passamos um elemento de um array a uma função como um parâmetro comum, da seguinte forma:

nomeFunção(tipo nome_variável);

Vejamos um exemplo:

#include <stdio.h>
#include <locale.h>
#define TAM 5
void modificaElemento(int);
int main ()
{
 setlocale(LC_ALL, "");
 int x[TAM] = {2, 4, 6, 8, 10};
 int i;
 printf("Conteúdo atual do array x:\n");
 for(i = 0; i < TAM; i++)
 {
   printf("x[%d]: %2d\n", i, x[i]);
 }
// passando o terceiro elemento do array para a função
 printf("\nPassando o terceiro elemento do array para a função: ");
 modificaElemento(x[2]);
 printf("\nValor atual do elemento x[2]: %d\n", x[2]);
 return 0;
}

// função que incrementa o valor de um elemento em 10:
void modificaElemento (int y)
{
 printf("\nValor do elemento dentro da função: %d\n", y+=10);
}

No código apresentado, criamos um array de nome “x”, com 5 posições, e o preenchemos com os valores numéricos 2, 4, 6, 8 e 10. Em seguida, mostramos na saída o conteúdo do array usando um laço for.

Criamos uma função denominada “modificaElemento” e a chamamos, passando para ela o elemento da terceira posição do array (x[2]). Essa função soma o valor 10 ao valor atual da posição do array utilizada, e imprime o resultado na tela.

Por último, mandamos exibir o conteúdo da posição 3 do array na tela, o qual permaneceu inalterado, pois foi passado por valor à função.

Anterior: Arrays em C – Declaração, inicialização e atribuição de valores

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*