Averiguar la longitud de un vector
Publicado por gerard (1 intervención) el 12/07/2005 10:26:07
Bien,lo que me gustaria saber es la longitud que tiene un vector que se recibe en una funcion,sin tener que especificarselo como parametro.
Por ejemplo,supongamos que tengo una funcion que me ordena un vector.Lo que yo quiero es que en la funcion que me lo ordena se pueda saber su longitud,sin tener que especificarselo en la llamada como parametro.
Al principio probé lo siguiente
int longitud;
int vec[234];
longitud=sizeof(vec)/sizeof(vec[0]);//o bien longitud=sizeof(vec)/sizeof(int);
Esto funciona sin problemas si lo haces en la misma funcion en donde te declaras el vector,pero no si por ejemplo haces....
ordena_vector(vec);
void ordena_vector(int *vector)
{
int longitud;
longitud=sizeof(vector)/sizeof(vector[0]);
}
Esto no funciona porque lo que calcula sizeof es el tamaño del puntero pero no del vector entero.Es decir devuelve 1,porque divide 2 entre dos.
Ya sé que normalmente se envia un parametro extra indicando la longitud,pero me gustaria saber,y estoy seguro de que debe de existir,una manera de saberla "al vuelo".
Saludos gente del C.
Por ejemplo,supongamos que tengo una funcion que me ordena un vector.Lo que yo quiero es que en la funcion que me lo ordena se pueda saber su longitud,sin tener que especificarselo en la llamada como parametro.
Al principio probé lo siguiente
int longitud;
int vec[234];
longitud=sizeof(vec)/sizeof(vec[0]);//o bien longitud=sizeof(vec)/sizeof(int);
Esto funciona sin problemas si lo haces en la misma funcion en donde te declaras el vector,pero no si por ejemplo haces....
ordena_vector(vec);
void ordena_vector(int *vector)
{
int longitud;
longitud=sizeof(vector)/sizeof(vector[0]);
}
Esto no funciona porque lo que calcula sizeof es el tamaño del puntero pero no del vector entero.Es decir devuelve 1,porque divide 2 entre dos.
Ya sé que normalmente se envia un parametro extra indicando la longitud,pero me gustaria saber,y estoy seguro de que debe de existir,una manera de saberla "al vuelo".
Saludos gente del C.
Valora esta pregunta


0