Ver Mensaje Individual
  #8 (permalink)  
Antiguo 04/04/2015, 08:45
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: El "sizeof" para saber el tamaño del arreglo no me funciona

Cita:
Iniciado por RGT Ver Mensaje
Ya lo leí y ahora entendi mejor pero,
No entendi el ejemplo de ella, que fue lo que hizo?..
En el enlace que te he puesto queda explicado.

Bueno, al entender que el pasar un array como parámetro es equivalente a pasar un puntero al primer elemento del array, ecfisa ha supuesto que estabas haciendo esto último (que en todo caso es realmente lo mismo).

Y como esa dirección de memoria no te da información del tamaño total del array, lo suyo es que estas funciones se usen con dos parámetros, uno el propio array (o puntero al primer elemento) y otro el tamaño del array, puesto que una vez dentro de la función no se podrá averiguar.

Edito:

Sin embargo, si defines el array con su tamaño en la función si podrás saber dicho tamaño dentro de la función, pero la función será poco operativa (solo valdrá para arrays con el tamaño indicado por la función).

Te pongo un ejemplo de tres formas de enfocar la función:
1.- Pasando como parámetro a la función un array con tamaño definido (sencillo pero poco funcional)
2.- Pasando como parámetro a la función un array sin tamaño predefinido y un valor que indique el tamaño del array.
3.- Pasando como parámetro un puntero y el tamaño del array.
Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void mostrar (int array[], int tam);
  6. void mostrar2 (int array[5]);
  7. void mostrar3 (int* punt, int tam);
  8.  
  9. int main()
  10. {
  11.  
  12.     int v[]={10,20,30,40,50};
  13.  
  14.     mostrar (v, sizeof(v)/sizeof(int));
  15.     mostrar2(v);
  16.     mostrar3(v,sizeof(v)/sizeof(int));
  17.  
  18.     return 0;
  19. }
  20.  
  21. void mostrar (int array[], int tam)
  22. {
  23.     for (int i=0;i<tam;i++)
  24.     {
  25.         cout<<array[i]<<"-";
  26.     }
  27.     cout<<endl;
  28. }
  29.  
  30. void mostrar2 (int array[5])
  31. {
  32.     for (int i=0;i<=sizeof(array[5]);i++)
  33.     {
  34.         cout<<array[i]<<"-";
  35.     }
  36.     cout<<endl;
  37. }
  38.  
  39. void mostrar3 (int* punt, int tam)
  40. {
  41.     for (int i=0;i<tam;i++)
  42.     {
  43.         cout<<*(punt+i)<<"-";
  44.     }
  45.     cout<<endl;
  46. }

Espero que esto te ayude
__________________
Mi calculadora en Qt

Última edición por dehm; 04/04/2015 a las 08:58