Problema al pasar un arreglo como parametro

guspo_89
08 de Abril del 2010
#include <iostream.h>
#include <stdio.h>

void mostrarArreglo (int arreglo[])
{
int n = sizeof (arreglo) / sizeof (int); //calcula el numero de elementos contenidos en el arreglo

for (int i = 0; i < n; i++)
{
cout << arreglo[i];
if (i < (n - 1))
cout << ", ";
}
}

Si llamamos a la funcion mostrarArreglo desde el main y le pasamos un arreglo de cierta cantidad de elementos aparentemente lo recibe sin ningun problema el parametro int arreglo[]. Si desde el ciclo for nosotros mismos especificamos cuantos elementos estan contenidos dentro del arreglo en vez de hacer el calculo en la variable n, visualiza el arreglo sin nungun problema. Pero cuando intento realizar el calculo:

int n = sizeof (arreglo) / sizeof (int);

la llamada a la funcion sizeof (arreglo) me arroja simpre como resultado 4, cuando en realidad deberia arrojar 4 * (el numero de elementos contenidos en arreglo). La razon por la que deberia multiplicar 4, es porque es esa la asignacion de memoria que se le da a un unico valor entero (int). Ahora ya entederan la operacion completa para el calculo de n. Si aparentemente la intruccion esta bien implementada, ¿porque no me calcula el numero total de elementos contenidos en el arreglo?

Capitan Kirk
08 de Abril del 2010
Los arrays siempre se pasan por referencia. En el ejemplo que has puesto, es igual ponerlo como lo has hecho que poner

void mostrarArreglo(int *arreglo)

y al efectuar sizeof(arreglo) te devuelve el tamaño de un puntero (que, al fin y al cabo, es realmente lo que ha recibido la función como parámetro). Por eso te devuelve siempre el valor 4.

Así pues, cuando pases arrays a alguna función, tendrás que pasar también información que indique el número de elementos (número total de elementos, filas y columnas si es bidimensional, etc).

Saludos,