elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  tamaño de un arreglo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: tamaño de un arreglo  (Leído 1,945 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
tamaño de un arreglo
« 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



En línea

Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: tamaño de un arreglo
« Respuesta #1 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.


« Última modificación: 24 Agosto 2013, 00:06 am por Alien-Z » En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: tamaño de un arreglo
« Respuesta #2 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.  
« Última modificación: 24 Agosto 2013, 22:21 pm por m@o_614 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: tamaño de un arreglo
« Respuesta #3 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!
En línea

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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: tamaño de un arreglo
« Respuesta #4 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
En línea

Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: tamaño de un arreglo
« Respuesta #5 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Arreglo en ComboBox
Programación Visual Basic
yonky_85 2 2,509 Último mensaje 28 Septiembre 2006, 18:40 pm
por CeLaYa
JMenuItem en arreglo
Java
ioshi 2 4,351 Último mensaje 15 Abril 2009, 20:41 pm
por celestino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines