Menu
Coddy logo textTech

Pasar arrays a funciones

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 29 de 63.

Cuando pasas un array a una función en C, sucede algo interesante entre bastidores. El array en sí no se copia realmente a la función. En su lugar, lo que se pasa es un puntero al primer elemento del array.

Esto significa que cuando escribes un parámetro de función como int arr[] o int *arr, ambos son equivalentes: ambos representan un puntero al primer elemento del array. La función recibe la dirección de memoria donde comienza el array, dándole acceso directo a los datos del array original.

void printArray(int arr[], int size) {
    // arr es en realidad un puntero al primer elemento
    // La función puede acceder y modificar el arreglo original
}

Dado que la función trabaja con la ubicación de memoria del array original en lugar de una copia, cualquier cambio realizado dentro de la función afectará al array original. Esto es diferente a pasar variables individuales, lo cual crea copias.

También notarás que necesitas pasar el tamaño del arreglo como un parámetro separado porque la función no puede determinar la longitud del arreglo solo a partir del puntero.

challenge icon

Desafío

Fácil

Escribe un programa en C que demuestre cómo pasar arreglos a funciones creando una función que procese datos de temperatura. Tu programa debe:

  1. Crear una función llamada analyzeTemperatures que reciba un arreglo de enteros y su tamaño como parámetros
  2. Dentro de la función analyzeTemperatures, calcular e imprimir el promedio de temperatura con exactamente 1 decimal en el formato: Average temperature: [value]
  3. Dentro de la función analyzeTemperatures, encontrar e imprimir la temperatura más alta en el formato: Highest temperature: [value]
  4. Dentro de la función analyzeTemperatures, contar cuántas temperaturas son superiores a 25 grados e imprimir el conteo en el formato: Days above 25 degrees: [count]
  5. En la función main, leer un entero n que represente el número de lecturas de temperatura
  6. Leer n valores de temperatura y almacenarlos en un arreglo de enteros
  7. Llamar a la función analyzeTemperatures, pasando el arreglo y su tamaño

Tu programa debe procesar los datos de temperatura y mostrar los resultados del análisis. Por ejemplo, si la entrada es:

5
20 28 15 32 26

Tu salida debe ser:

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

Este desafío demuestra cómo los arreglos se pasan a las funciones como punteros a su primer elemento, lo que permite que la función acceda y procese todos los elementos del arreglo original sin crear una copia.

Hoja de referencia

Al pasar arreglos a funciones en C, el arreglo en sí no se copia. En su lugar, se pasa un puntero al primer elemento.

Tanto int arr[] como int *arr son parámetros de función equivalentes; representan un puntero al primer elemento:

void printArray(int arr[], int size) {
    // arr es en realidad un puntero al primer elemento
    // La función puede acceder y modificar el arreglo original
}

Puntos clave:

  • Las funciones reciben la dirección de memoria donde comienza el arreglo
  • Los cambios realizados dentro de la función afectan al arreglo original
  • El tamaño del arreglo debe pasarse como un parámetro separado, ya que la función no puede determinar la longitud solo a partir del puntero

Pruébalo tú mismo

#include <stdio.h>

// TODO: Crea la función analyzeTemperatures aquí

int main() {
    // Leer el número de lecturas de temperatura
    int n;
    scanf("%d", &n);
    
    // Declarar un arreglo para almacenar las temperaturas
    int temperatures[n];
    
    // Leer los valores de temperatura
    for (int i = 0; i < n; i++) {
        scanf("%d", &temperatures[i]);
    }
    
    // TODO: Llama a la función analyzeTemperatures aquí
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow