Arrays como parámetros en C: ejercicio resuelto
Arrays como parámetros en C: ejercicio resuelto
Si buscas arrays como parámetros en C ejercicio resuelto, aquí tienes el patrón fundamental: en C los arrays se pasan a funciones como un puntero al primer elemento, lo que significa que la función puede modificar el array original y que el tamaño debe pasarse por separado.
Este comportamiento —denominado decaimiento a puntero— es uno de los primeros puntos de confusión para quien viene de Java o Python, donde los arrays llevan su tamaño consigo.
Enunciado
Escribe tres funciones:
rellenar(arr, n): rellena el array con los valores0, 2, 4, …, 2*(n-1).suma(arr, n): devuelve la suma de todos los elementos (sin modificar el array).imprimir(arr, n): imprime todos los elementos separados por espacios.
Demuestra que las modificaciones de rellenar son visibles en main.
Solución en C
Resultado esperado
Errores frecuentes
- Intentar obtener el tamaño del array dentro de la función con
sizeof(arr): devuelve el tamaño del puntero (8 bytes en 64 bits), no el del array. El tamaño siempre debe pasarse como parámetro. - Olvidar
consten funciones que solo leen el array: el compilador no puede optimizar ni detectar modificaciones accidentales. - Pasar
&ven lugar dev:&ves un puntero a array (int (*)[5]), tipo diferente al esperado por la función. - Confundir arrays en la pila (
int v[5]) con arrays dinámicos (malloc): ambos se pasan como puntero, pero el ciclo de vida es distinto.
Aplicación práctica
El paso de arrays a funciones es la base de algoritmos de ordenación, búsqueda y transformación en C. Separar la lógica en funciones con const permite al compilador aplicar optimizaciones y al programador razonar mejor sobre los efectos secundarios.
Siguiente ejercicio recomendado
- Arreglos y vectores en C: ejercicios resueltos
- Punteros en C: ejercicios resueltos
- Funciones en C: ejercicios resueltos
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Por qué sizeof(arr) dentro de la función no da el tamaño del array?
Porque cuando un array se pasa a una función, se decae a un puntero al primer elemento. La función recibe solo la dirección de memoria, no la longitud. sizeof de un puntero devuelve el tamaño del puntero (4 u 8 bytes según la arquitectura).
¿Qué diferencia hay entre int arr[] e int *arr como parámetro de función?
Ninguna en la práctica: ambas declaraciones son equivalentes en el contexto de parámetros de función. C las trata exactamente igual. Se prefiere int arr[] por claridad semántica.
¿Cómo pasar un array de dos dimensiones a una función?
Para matrices, hay que especificar el número de columnas: void f(int mat[][COLS], int filas). Las columnas deben ser constantes conocidas en tiempo de compilación, o usar punteros a puntero para dimensiones dinámicas.