Cómo pasar arrays 1D y 2D a funciones en C – Guía práctica
Cómo pasar arrays 1D y 2D a funciones en C
Este tutorial explica cómo pasar arrays completos —tanto unidimensionales como multidimensionales— a funciones en C, con ejemplos de código claros y buenas prácticas.
En C, el nombre de un array decae a un puntero cuando se pasa a una función, permitiendo que esta opere sobre los datos originales sin copiarlos. Comprender este comportamiento es esencial para escribir código eficiente y mantenible.
Pasar elementos individuales de un array
Pasar un único elemento es idéntico a pasar cualquier tipo primitivo.
Ejemplo 1: Pasar elementos individuales de un array
#include <stdio.h>
void display(int age1, int age2) {
printf("%d\n", age1);
printf("%d\n", age2);
}
int main() {
int ageArray[] = {2, 8, 4, 12};
// Pasar el segundo y tercer elemento a display()
display(ageArray[1], ageArray[2]);
return 0;
}
Salida
8 4
Aquí pasamos ageArray[1] y ageArray[2] como variables ordinarias. La función los recibe por valor, por lo que el array original permanece inalterado.
Pasar arrays unidimensionales completos
Para entregar un array completo a una función, basta con proporcionar el nombre del array. El prototipo debe indicar un parámetro de tipo array, pero el tamaño real puede omitirse. El compilador trata el parámetro como un puntero al primer elemento.
Ejemplo 2: Calcular la suma de un array
#include <stdio.h>
float calculateSum(float num[]);
int main() {
float result, num[] = {23.4, 55, 22.6, 3, 40.5, 18};
// Pasar el array completo a calculateSum()
result = calculateSum(num);
printf("Resultado = %.2f", result);
return 0;
}
float calculateSum(float num[]) {
float sum = 0.0;
for (int i = 0; i < 6; ++i) {
sum += num[i];
}
return sum;
}
Salida
Resultado = 162.50
La firma float calculateSum(float num[]) indica al compilador que num es un puntero a un array de float. El bucle procesa el array in situ sin copiarlo.
Pasar arrays multidimensionales
Los arrays multidimensionales siguen el mismo principio: el nombre del array decae a un puntero a la primera fila. Sin embargo, el compilador debe conocer el tamaño de todas las dimensiones excepto la primera. Esto es necesario para calcular los desplazamientos de memoria correctos.
Ejemplo 3: Pasar un array bidimensional
#include <stdio.h>
void displayNumbers(int num[2][2]);
int main() {
int num[2][2];
printf("Introduzca 4 números:\n");
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
scanf("%d", &num[i][j]);
}
}
// Pasar el array bidimensional a una función
displayNumbers(num);
return 0;
}
void displayNumbers(int num[2][2]) {
printf("Mostrando:\n");
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
printf("%d\n", num[i][j]);
}
}
}
Salida
Introduzca 4 números: 2 3 4 5 Mostrando: 2 3 4 5
El prototipo void displayNumbers(int num[2][2]) declara un array de enteros 2×2. Al llamar a la función, simplemente pasamos num; el compilador maneja automáticamente la conversión a puntero.
Nota que se puede omitir la dimensión de filas pero se debe especificar el tamaño de columnas: int num[][2] es válido, mientras que el tamaño de columna es esencial para el cálculo de direcciones.
Importante: C permite pasar arrays a funciones, pero no soporta devolver arrays directamente desde funciones. Use punteros o estructuras si necesita devolver datos complejos.
Lenguaje C
- Dominando arrays en C#: Declaración, inicialización y operaciones
- Tipos de datos en C explicados: int, float, char y más – guía completa
- Dominando funciones en C: Estructura, declaración y mejores prácticas
- Uso eficiente de memoria con campos de bits en C
- Dominando E/S de archivos en C: Crear, abrir y gestionar archivos
- Dominando Argumentos Variables en C: Guía Práctica
- Entendiendo el Polimorfismo en C++: Guía Práctica
- Métodos en C#: Definición, llamada y uso de funciones
- Dominando la sentencia pass en Python: Guía práctica
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables