Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Blaster en 8 Noviembre 2012, 16:40 pm



Título: Como saber el tamaño de un array de tipo int
Publicado por: Blaster en 8 Noviembre 2012, 16:40 pm
Estoy trabajando con un progrma que hace uso de un array de tipos entero, y necesito determinar el tamaño en base al cotenido de esta; probe con strlen pero esta solo devuelve la longitud de uno de tipo char.

Código
  1. char cadena[15]= "Hola" ;

Aka definimos una arary de tamaño 15, pero la hemos inicializado y tiene una longitud de solo  4,
pasando esto a strlen efectivamente devuelve 4; existe una funcion igual a esta para
aplicarla a un entero.

Desde ya mucha gracias


Título: Re: Como saber el tamaño de un array de tipo int
Publicado por: Pablo Videla en 8 Noviembre 2012, 16:46 pm
A ver, vamos por parte, según yo, lo que estas haciendo, es calcular el largo de string, y no del arreglo del char puesto que lo has creado con 15 posiciones, por lo tanto el largo será de 15.

Si tu haces esto por ejemplo:

int array[3];
array[0]=1;

y haces el metodo para tomar el tamaño, va a estar ocupado solo una posicion, pero el largo del array seguira siendo 3.

Si estoy equivocado, me avisan.

PD: No se C / C++
pero en JAVA es asi.


Título: Re: Como saber el tamaño de un array de tipo int
Publicado por: do-while en 8 Noviembre 2012, 16:47 pm
¡Buenas!

Cuando declaras un vector, dentro de su ambito de uso puedes saber el tamaño con el operador sizeof, pero si utilizas un vector como parametro de una funcion no podras saber cual es su tamaño original, sizeof siempre te dara la cantidad de bytes que ocupa un puntero del tipo del vector. Si pasas un vector como parametro de una funcion y la funcion depende del tamaño del vector, tendras que añadir a la lista de parametros el tamaño.

Código
  1. #include <stdio.h>
  2.  
  3. void funcion1(int x[])
  4. {
  5.    printf("Como parametro de funcion1: %d bytes.\n", sizeof(x));
  6. }
  7.  
  8. void funcion2(int *x[])
  9. {
  10.    printf("Como parametro de funcion2: %d bytes.\n", sizeof(*x));
  11. }
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.    int x[10];
  16.  
  17.  
  18.    printf("Dentro del ambito en el que se ha declarado: %d bytes.\n", sizeof(x));
  19.  
  20.    funcion1(x);
  21.    funcion2(&x);
  22.  
  23.    return 0;
  24. }
  25.  

A parte funcion2 me insulta por pasarle la direccion de memoria de x...

¡Saludos!

PD: Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje


Título: Re: Como saber el tamaño de un array de tipo int
Publicado por: rir3760 en 8 Noviembre 2012, 16:55 pm
A parte funcion2 me insulta por pasarle la direccion de memoria de x...
Eso sucede porque en tu programa "&x" es de tipo "int (*)[10]" mientras que la función "funcion2" espera, como segundo argumento, un valor de tipo "char **":
Código
  1. void funcion2(int *x[]) ...
  2.  
  3. ==>
  4.  
  5. void funcion2(int **x) ...

Al no coincidir los tipos tu compilador genera el mensaje de error.

Un saludo


Título: Re: Como saber el tamaño de un array de tipo int
Publicado por: Blaster en 8 Noviembre 2012, 19:31 pm
Utilizando la  expresion sizeof c / sizeof *c dividiendo el tamaño completo del array
entre el tamaño del primer elemento, se obtiene la longitud del array de esta forma:
Código
  1. int c[] = { 1, 2, 3, 4 };
  2.  
  3. printf("Cantidad de elemetos: %d", sizeof c / sizeof *c );

Salida: 4

Pero sin especificar el tamaño del array ya que si lo hago me tira solo el tamaño del mismo y no
los elementos que la componen
De esta forma:
Código
  1. int c[10] = { 1, 2, 3, 4 };
Me da el valor que les comentaba que es 10, cuando el que deseo es 4.

Muchas gracias a los que contestaron  ;)