Menu
Coddy logo textTech

Passando Arrays para Funções

Parte da seção Logic & Flow do Journey de C da Coddy — lição 29 de 63.

Quando você passa um array para uma função em C, algo interessante acontece nos bastidores. O array em si não é realmente copiado para a função. Em vez disso, o que é passado é um ponteiro para o primeiro elemento do array.

Isso significa que quando você escreve um parâmetro de função como int arr[] ou int *arr, ambos são equivalentes - ambos representam um ponteiro para o primeiro elemento do array. A função recebe o endereço de memória onde o array começa, dando a ela acesso direto aos dados do array original.

void printArray(int arr[], int size) {
    // arr é na verdade um ponteiro para o primeiro elemento
    // A função pode acessar e modificar o array original
}

Como a função trabalha com o local de memória do array original em vez de uma cópia, quaisquer alterações feitas dentro da função afetarão o array original. Isso é diferente de passar variáveis individuais, o que cria cópias.

Você também notará que precisa passar o tamanho do array como um parâmetro separado, porque a função não consegue determinar o comprimento do array apenas a partir do ponteiro.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre a passagem de arrays para funções criando uma função que processa dados de temperatura. Seu programa deve:

  1. Criar uma função chamada analyzeTemperatures que recebe um array de inteiros e seu tamanho como parâmetros
  2. Dentro da função analyzeTemperatures, calcular e imprimir a temperatura média com exatamente 1 casa decimal no formato: Average temperature: [value]
  3. Dentro da função analyzeTemperatures, encontrar e imprimir a maior temperatura no formato: Highest temperature: [value]
  4. Dentro da função analyzeTemperatures, contar quantas temperaturas estão acima de 25 graus e imprimir a contagem no formato: Days above 25 degrees: [count]
  5. Na função main, ler um inteiro n representando o número de leituras de temperatura
  6. Ler n valores de temperatura e armazená-los em um array de inteiros
  7. Chamar a função analyzeTemperatures, passando o array e seu tamanho

Seu programa deve processar os dados de temperatura e exibir os resultados da análise. Por exemplo, se a entrada for:

5
20 28 15 32 26

Sua saída deve ser:

Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3

Este desafio demonstra como arrays são passados para funções como ponteiros para seu primeiro elemento, permitindo que a função acesse e processe todos os elementos do array original sem criar uma cópia.

Folha de consulta

Ao passar arrays para funções em C, o array em si não é copiado. Em vez disso, um ponteiro para o primeiro elemento é passado.

Tanto int arr[] quanto int *arr são parâmetros de função equivalentes - eles representam um ponteiro para o primeiro elemento:

void printArray(int arr[], int size) {
    // arr é na verdade um ponteiro para o primeiro elemento
    // A função pode acessar e modificar o array original
}

Pontos-chave:

  • As funções recebem o endereço de memória onde o array começa
  • Alterações feitas dentro da função afetam o array original
  • O tamanho do array deve ser passado como um parâmetro separado, pois a função não consegue determinar o comprimento apenas pelo ponteiro

Experimente você mesmo

#include <stdio.h>

// TODO: Crie a função analyzeTemperatures aqui

int main() {
    // Ler o número de leituras de temperatura
    int n;
    scanf("%d", &n);
    
    // Declarar array para armazenar as temperaturas
    int temperatures[n];
    
    // Ler os valores de temperatura
    for (int i = 0; i < n; i++) {
        scanf("%d", &temperatures[i]);
    }
    
    // TODO: Chame a função analyzeTemperatures aqui
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow