Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 23 Agosto 2013, 23:52 pm



Título: tamaño de un arreglo
Publicado por: m@o_614 en 23 Agosto 2013, 23:52 pm
Saludos tengo una duda de como calcular el tamanio de de un arreglo con el uso de alguna funcion tipo strlen, pero strlen tengo entendido que solo es para cadenas y no para un array de enteros, que es lo que estoy buscando.

gracias



Título: Re: tamaño de un arreglo
Publicado por: Alien-Z en 24 Agosto 2013, 00:00 am
¡Buenas!

El operador "sizeof(arrayEnteros)" devuelve el tamaño del array en bytes. Si quieres saber cuántos elementos tiene dicho arreglo divide el tamaño del array entre el tamaño de un elemento:

Código
  1. int tam_array = sizeof(arrayEnteros) / sizeof(int);

Nota: sizeof funciona únicamente si el array ha sido creado estáticamente.

Saludos.


Título: Re: tamaño de un arreglo
Publicado por: m@o_614 en 24 Agosto 2013, 22:06 pm
Saludos Alien-Z, entonces no puedo hacer algo como esto:

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define TAM 10
  5. int main()
  6. {
  7. int i , a[TAM],tam;
  8. for(i=0;i < TAM;i++)
  9.     scanf("%d",&a[i]);
  10.  
  11.    tam = sizeof(a)/sizeof(int);
  12.    printf("El numero de elementos del arreglo es %d\n",tam);
  13. return 0;
  14. }
  15.  


Título: Re: tamaño de un arreglo
Publicado por: do-while en 24 Agosto 2013, 22:26 pm
¡Buenas!

Tienes que tener cuidado con el tema del tamaño de los vectores. Si haces un sizeof del vector dentro de su alcance (o scope, como prefieras) te dará el tamaño total en bytes del vector. Pero si aplicas el sizeof al parámetro de una función, aunque se declare como un vector, solo te dará el tamaño de un puntero al tipo de dato que contenga el vector.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int tam_vector(int v[])
  5. {
  6.    return sizeof(v);
  7. }
  8.  
  9. int main(int argc, char *argc[])
  10. {
  11.    int vector[10];
  12.  
  13.    printf("Tamaño dentro de scope: %d\n",sizeof(vector));
  14.    printf(" Tamaño fuera de scope: %d\n",tam_vector(vector));
  15.  
  16.    while(getchar() != '\n');
  17.  
  18.    return 0;
  19. }
  20.  

¡Saludos!


Título: Re: tamaño de un arreglo
Publicado por: m@o_614 en 24 Agosto 2013, 23:42 pm
Gracias por tu respuesta do-while creo que el problema que tengo con mi codigo es que tengo declarado un arreglo[10] de tamanio 10, pero en el ciclo for no voy a utilizar los 10 espacios, solo unos pocos, porque en el for le tengo que copiar al arreglo[] algunos elementos de otro arreglo, por eso no voy a necesitar las 10 posiciones.

pero cuando hago esto

tam = sizeof(arreglo)/sizeof(int)

no me calcula bien el numero de elementos, porque sizeof(arreglo) siempre me va a dar 40,(10 elementos * 4bytes que se necesitan para un entero)

y eso es lo que no se como corregir


Título: Re: tamaño de un arreglo
Publicado por: Alien-Z en 25 Agosto 2013, 01:51 am
Si no te he entendido mal lo que tú buscas no es una forma de calcular el tamaño del array sino la manera de saber cuántas posiciones has llenado. Hay varias formas de hacerlo, te comento un par sencillas:

1- Dentro del bucle lleva un contador con el cual, cada vez que llenes una posición del array, sume uno.

Código
  1. int contador = 0;
  2. for(i=0;i < TAM;i++) {
  3.    scanf("%d",&a[i]);
  4.    contador++;
  5. }

2- Inicializa el array con un valor no-viable (un número que no tenga sentido y sirva como marca fin):

Código
  1. for (int i = 0; i < TAM; i++) { //Lo inicializamos a -1
  2.   arrayEnteros[i] = -1;
  3. }

Cuando quieras saber el tamaño del array basta con que lo recorras hasta llegar a un elemento que sea igual a -1; o si no hay ninguno es que se ha llenado entero.

Saludos.