C/Visual C - Problema al pasar un arreglo como parametro

   
Vista:

Problema al pasar un arreglo como parametro

Publicado por Guspo (1 intervención) el 03/04/2010 19:59:06
Me piden implementar una funcion que dado un arreglo lo imprima en la pantalla:

#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?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema al pasar un arreglo como parametro

Publicado por Tom (481 intervenciones) el 05/04/2010 12:16:46
A ver ... si te da tamaño 4 es porque no es un array declarado estáticamente, o sea, es un puntero a memoria de asignación dinámica.

sizeof() es, normalmente una macro que se resuelve _en_tiempo_de_compilación_.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar