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.
Desafío
FácilEscribe un programa en C que demuestre cómo pasar arreglos a funciones creando una función que procese datos de temperatura. Tu programa debe:
- Crear una función llamada
analyzeTemperaturesque reciba un arreglo de enteros y su tamaño como parámetros - Dentro de la función
analyzeTemperatures, calcular e imprimir el promedio de temperatura con exactamente 1 decimal en el formato:Average temperature: [value] - Dentro de la función
analyzeTemperatures, encontrar e imprimir la temperatura más alta en el formato:Highest temperature: [value] - 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] - En la función
main, leer un enteronque represente el número de lecturas de temperatura - Leer
nvalores de temperatura y almacenarlos en un arreglo de enteros - 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 26Tu salida debe ser:
Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3Este 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;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas