tamaño de un arreglo

Iniciado por m@o_614, 23 Agosto 2013, 23:52 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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


Alien-Z

#1
¡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 (cpp) [Seleccionar]
int tam_array = sizeof(arrayEnteros) / sizeof(int);

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

Saludos.

m@o_614

#2
Saludos Alien-Z, entonces no puedo hacer algo como esto:

 
#include <stdio.h>
#include <stdlib.h>
#define TAM 10
int main()
{
int i , a[TAM],tam;
for(i=0;i < TAM;i++)
    scanf("%d",&a[i]);

   tam = sizeof(a)/sizeof(int);
   printf("El numero de elementos del arreglo es %d\n",tam);
return 0;
}

do-while

¡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.

#include <stdio.h>
#include <stdlib.h>

int tam_vector(int v[])
{
    return sizeof(v);
}

int main(int argc, char *argc[])
{
    int vector[10];

    printf("Tamaño dentro de scope: %d\n",sizeof(vector));
    printf(" Tamaño fuera de scope: %d\n",tam_vector(vector));

    while(getchar() != '\n');

    return 0;
}


¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

m@o_614

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

Alien-Z

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 (cpp) [Seleccionar]
int contador = 0;
for(i=0;i < TAM;i++) {
    scanf("%d",&a[i]);
    contador++;
}


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

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


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.