• Viernes 17 de Mayo de 2024, 05:26

Autor Tema:  Hallar el tamaño de un vector  (Leído 1831 veces)

Checho360

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Hallar el tamaño de un vector
« en: Miércoles 20 de Julio de 2011, 01:28 »
0
Hola, me gustaría saber por qué funciones del tipo:

Código: C
  1. int f (int v []){
  2.        
  3.         return (sizeof (v)/sizeof(int));
  4.        
  5. }

o definiciones del tipo:

Código: C
  1. #define length_int(x) (sizeof(x)/sizeof(int))

en un archivo ".h" aparte no funcionan y también como sacar el tamaño de un vector en un archivo aparte.

Un saludo!
« última modificación: Miércoles 20 de Julio de 2011, 01:34 por Checho360 »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Hallar el tamaño de un vector
« Respuesta #1 en: Miércoles 20 de Julio de 2011, 02:41 »
0
La respuesta es sencilla, los vectores (y en general los array) cuando se usan como parametro en C/C++, se pasan por referencia (como si fueran punteros), y no por valor. Recordando:

1. Parametros por valor: se copia todo el contenido de la variable en la pila de la funcion:
2. Parametros por referrencia: se copia la direccion en donde se encuentra la variable en la pila de la funcion. Si es un vector, solo se copia la direccion del primer elemento del vector.

Por lo tanto, dado que solo tenemos la direccion del primer elemento, es imposible saber la longitud total del vector, y ademas como dije antes en realidad lo que se pasa es un puntero, entonces sizeof solo nos dara el tamaño del puntero, no el tamaño del pirmer elemento, ni tampoco el tamaño de todos los elementos.

Ahora en respuesta a tu pregunta:

Citar
como sacar el tamaño de un vector en un archivo aparte

No es posible sacar el tamaño, dado que como dije antes los vectores cuando se pasan como parametros a las funciones se comportan como punteros. Esa es la razon por la cual cuando se pasa un vector a una funcion, generalmente tambien se le pasa como parametro el tamaño del vector:

Código: [Seleccionar]
int f (int v [], int tam)
Ahora diras ¿y como es entonces que la funcion strlen() me devuelve el tamaño del vector de caracteres (cadena) sin pasarle yo el tamaño? ah, en ese caso recuerda que las cadenas terminan con nulo '\0', entonces strlen lo que hace es que cuenta los caracteres y se detiene cuando llega al nulo, de esa forma encuentra el tamaño de la cadena.

Entonces, a menos que le pases como parametro el tamaño de tu vector a la funcion, o utilices algun tipo de marcador como en el caso de las cadenas, para indicarle que llego al final del vector, no hay manera de saber el tamaño de un vector pasado como parametro.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Checho360

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:Hallar el tamaño de un vector
« Respuesta #2 en: Miércoles 20 de Julio de 2011, 19:32 »
0
Muchas gracias por la respuesta.