Programación General => C/C++ => Mensaje iniciado por: Checho360 en Miércoles 20 de Julio de 2011, 01:28
Título: Hallar el tamaño de un vector
Publicado por: Checho360 en Miércoles 20 de Julio de 2011, 01:28
Hola, me gustaría saber por qué funciones del tipo:
Código: C
int f (int v []){
return(sizeof(v)/sizeof(int));
}
o definiciones del tipo:
Código: C
#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!
Título: Re:Hallar el tamaño de un vector
Publicado por: ProfesorX en Miércoles 20 de Julio de 2011, 02:41
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:
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 :)
Título: Re:Hallar el tamaño de un vector
Publicado por: Checho360 en Miércoles 20 de Julio de 2011, 19:32