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.
Desafio
FácilEscreva 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:
- Criar uma função chamada
analyzeTemperaturesque recebe um array de inteiros e seu tamanho como parâmetros - Dentro da função
analyzeTemperatures, calcular e imprimir a temperatura média com exatamente 1 casa decimal no formato:Average temperature: [value] - Dentro da função
analyzeTemperatures, encontrar e imprimir a maior temperatura no formato:Highest temperature: [value] - 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] - Na função
main, ler um inteironrepresentando o número de leituras de temperatura - Ler
nvalores de temperatura e armazená-los em um array de inteiros - 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 26Sua saída deve ser:
Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3Este 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;
}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
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato