Ver Mensaje Individual
  #16 (permalink)  
Antiguo 04/04/2015, 15:00
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: El "sizeof" para saber el tamaño del arreglo no me funciona

Cita:
Iniciado por ecfisa Ver Mensaje
Te pido disculpas, soy medio haragán para escribir.

Espero que quede mas entendible de este modo:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. typedef struct {
  4.   int *array;  // arreglo
  5.   int size;    // tamaño
  6. } stArray;
  7.  
  8. void mostrar (stArray sa) {
  9.   int i;
  10.   for ( i = 0; i < sa.size; i++ )
  11.     printf ( "%d ", sa.array[i] );
  12. }
  13.  
  14. int main() {
  15.   int array10[10] = {5, 8, 2, 3, 1, 4, 6, 9, 2, 10};
  16.   stArray sArray;
  17.  
  18.   sArray.array = array10;
  19.   sArray.size  = sizeof(array10) / sizeof(array10[0]);
  20.   mostrar(sArray);
  21.  
  22.   getchar();
  23.   return 0;
  24. }


A ver, cuando declaras:
Código C++:
Ver original
  1. int Arreglo[] = {2,5,4,8,2};
Así es, "Arreglo" tiene cinco elementos a los cuales accedes mediante los índices 0 a 4 (Arreglo[0], ..., Arreglo[4])

Si "Arreglo" está declarado "por encima" de la función,
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int Arreglo[] =  {2,5,4,8,2};
  4.  
  5. void mostrar (...
la función lo conoce (es del ámbito), por lo que podes usar sin problemas: sizeof(Arreglo) / sizeof(int). Es mas, hasta podes omitir enviar el arreglo como parámetro:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int Arreglo[] =  {2,5,4,8,2};
  4.  
  5. void mostrar ( void ) {
  6.   int i;
  7.   for ( i = 0; i < sizeof(Arreglo) / sizeof(int); i++ )
  8.   ...
  9. }
En cambio cuando está declarado fuera del ámbito de la función, como en este caso:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. void mostrar (int *arreglo, int tamanio) {
  4.   int i;
  5.   for ( i = 0; i < tamanio; i++ )
  6.     printf ( "%d ", arreglo[i] );
  7. }
  8.  
  9. int main() {
  10.   int Arreglo[] = {2,5,4,8,2};
  11.   mostrar(Arreglo, sizeof(Arreglo)/sizeof(Arreglo[0]));
  12.   ...
Debes enviar su tamaño o especificarlo explícitamente. Las formas en que podes declarar los parámetros para pasar el arreglo, te lo mostró dehm en el código del mensaje #8

Si no fuí claro en algún punto por favor decime e intento explicarlo de otro modo.

Saludos.
Hola, gracias por la explicación.

Tenía las funciones abajo del MAIN y no me funcionaba como dices, tuve que enviar el tamaño en otro argumento con los métodos que me han enseñado.

Otra cosa que leí es que debería usar size_t para guardar tamaños usando sizeof.

Ejemplo;

Código:
funcion(Arreglo, sizeof (Arreglo) / sizeof (int);

void funcion(int Arreglo[], size_t TamanoArreglo)
{
{
es correcto esto?.
y también es cierto que haciendo eso no tendría que enviar el Arreglo a la función?

Ejemplo:
Código:
funcion(sizeof (Arreglo) / sizeof (int);

void funcion(size_t TamanoArreglo)
{
podría usar el Arreglo normalmente y TamanoArreglo también....
{