Ver Mensaje Individual
  #15 (permalink)  
Antiguo 04/04/2015, 10:50
ecfisa
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: El "sizeof" para saber el tamaño del arreglo no me funciona

Cita:
no entiendo bien tus ejemplos :(
usas diferentes variables y cosas raras ej:
stv.sz
sv
...
me estoy volviendo loco tratando de entender ahahahha
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. }

Cita:
entonces TamanoArreglo sería igual a 5, cierto?. esta es la idea?, puedo usarlo de esta forma?.
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.