Foros del Web » Programación para mayores de 30 ;) » C/C++ »

sizeof me funciona mal?

Estas en el tema de sizeof me funciona mal? en el foro de C/C++ en Foros del Web. Hola, vereis tengo una duda es que resulta que a mi sizeof se me comporta de diferente manera dependiendo de si lo utilizo dentro de ...
  #1 (permalink)  
Antiguo 10/09/2013, 05:25
 
Fecha de Ingreso: septiembre-2013
Mensajes: 7
Antigüedad: 10 años, 7 meses
Puntos: 0
sizeof me funciona mal?

Hola, vereis tengo una duda es que resulta que a mi sizeof se me comporta de diferente manera dependiendo de si lo utilizo dentro de una funcion o no. Por ejemplo si en main declaro un array de int de 10 elementos "int array[10];" y hago "cout << sizeof(array) / sizeof(int);" me da el numero de elementos del array sin problema. Pero si lo hago desde una funcion por ejemplo "LongitudArray(int array[]) { return sizeof(array) / sizeof(int); }" cuando en main hago "cout << LongitudArray(array);" en lugar de devolverme el numero de elementos como seria de esperar, me devuelve 1. Que es lo que esta pasando? es que no hay forma de que sizeof se comporte de forma normal usandola dentro de una funcion? gracias
  #2 (permalink)  
Antiguo 10/09/2013, 10:42
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: sizeof me funciona mal?

Hola codigo333.

Cuando se envía un arreglo como parámetro, se está enviando un apuntador al primer elemento del mismo. Es decir que cuando aplicas la función sizeof al parámetro, no estas obteniendo el tamaño del arreglo sino del apuntador.

Tal vez la situación se vea mas clara declarando la función de este modo:
Código C++:
Ver original
  1. LongitudArray(int *array)
  2. {
  3.   return sizeof(array) / sizeof(array[0]);  // = 1
  4. }
La función no posee información sobre el tamaño del arreglo que se le envía como argumento.

Saludos. :)

Etiquetas: funcion, int, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:04.