C/Visual C - problemillas con arrays.

 
Vista:

problemillas con arrays.

Publicado por gothmog (1 intervención) el 14/03/2003 13:56:17
Buenas, a ver si me podeis dar una solucion. Necesito pasar un array como parametro a una funcion y luego dentro, necesito crear un array auxiliar del mismo tamaño. Algo asi:

void funcion(int a[]){
int aux[/***Tamaño de a[]***/];
}

No se si ha quedado muy claro. Los problemas que me surgen son:
- no puedo calcular la longitud de a[]
- si paso la longitud como parametro, al ser variable luego aux[] no me acepta la variable y me requiere un valor cte.

Pense en utilizar sizeof(a)/4 (por ser enteros) pero siempre me da tamaño 1, supongo q por pasar el parametro como puntero.

Bueno, a ver si podeis alumbrarme un poco el camino y muchas gracias si respondeis.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemillas con arrays.

Publicado por El Mogur (202 intervenciones) el 14/03/2003 16:32:48
En C, cuando se pasa un array como parámetro, en realidad se está pasando el puntero. Se hizo así para no tener que hacer copias de array's y meterlas en la pila, así que hay que tener cuidado, porque un array se pasa siempre por referencia (es un parámetro de "entrada/salida").
Cuando dentro de la función quieres conocer su tamaño, la única solución es pasarla también como parámetro.

Y por último, no puedes crear un array estático de tamaño no conocido en tiempo de compilación, pues el compilador debe reservar a la hora de compilarlo, el espacio en la pila. En este caso, la única solución es que utilices memoria dinámica, para crear el array.

Otra solución, es utilizar (si estás en C++), la clase vector de la librería estandar.

Como nota curiosa, el estandar de C/C++, no permite, como he dicho, que hagas cosas como:

void f(int i) {
int vector[i];
...
}

porque no se conoce en tiempo de compilación. Sin embargo, si estás compilando en Linux, esto sí funciona, porque en el gcc han extendido la funcionalidad, y se puede hacer.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemillas con arrays.

Publicado por Malandrin (29 intervenciones) el 16/03/2003 19:38:13
Hola,

Yo creo que lo más cómodo sería pasar el tamaño del array como un parámetro y después hacer un:

int *paiAux = new int[tamano_array];

Y ya lo tienes -no olvides luego llamar al delete[]paiAux - Saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemillas con arrays.

Publicado por gothmog (12 intervenciones) el 16/03/2003 21:50:14
Gracias a los dos, al final he optado por utilizar memoria dinamica y asunto arreglado, aunq esto siempre me da un poco de mal rollo :S Venga, un saludete
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemillas con arrays.

Publicado por El Mogur (202 intervenciones) el 16/03/2003 22:10:28
En C, cuando se pasa un array como parámetro, en realidad se está pasando el puntero. Se hizo así para no tener que hacer copias de array's y meterlas en la pila, así que hay que tener cuidado, porque un array se pasa siempre por referencia (es un parámetro de "entrada/salida").Cuando dentro de la función quieres conocer su tamaño, la única solución es pasarla también como parámetro.Y por último, no puedes crear un array estático de tamaño no conocido en tiempo de compilación, pues el compilador debe reservar a la hora de compilarlo, el espacio en la pila. En este caso, la única solución es que utilices memoria dinámica, para crear el array.Otra solución, es utilizar (si estás en C ), la clase vector de la librería estandar.Como nota curiosa, el estandar de C/C , no permite, como he dicho, que hagas cosas como:void f(int i) { int vector[i]; ...}porque no se conoce en tiempo de compilación. Sin embargo, si estás compilando en Linux, esto sí funciona, porque en el gcc han extendido la funcionalidad, y se puede hacer. Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemillas con arrays.

Publicado por El Mogur (202 intervenciones) el 24/03/2003 14:19:45
En C, cuando se pasa un array como parámetro, en realidad se está pasando el puntero. Se hizo así para no tener que hacer copias de array's y meterlas en la pila, así que hay que tener cuidado, porque un array se pasa siempre por referencia (es un parámetro de "entrada/salida").Cuando dentro de la función quieres conocer su tamaño, la única solución es pasarla también como parámetro.Y por último, no puedes crear un array estático de tamaño no conocido en tiempo de compilación, pues el compilador debe reservar a la hora de compilarlo, el espacio en la pila. En este caso, la única solución es que utilices memoria dinámica, para crear el array.Otra solución, es utilizar (si estás en C ), la clase vector de la librería estandar.Como nota curiosa, el estandar de C/C , no permite, como he dicho, que hagas cosas como:void f(int i) { int vector[i]; ...}porque no se conoce en tiempo de compilación. Sin embargo, si estás compilando en Linux, esto sí funciona, porque en el gcc han extendido la funcionalidad, y se puede hacer. Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemillas con arrays.

Publicado por LACS (21 intervenciones) el 17/04/2003 05:02:47
Espero que el siguiente codigo te sea de utilidad, si no es asi mandame un e-mail y yo me encargare personalmente de resolver tu problema.

int num[10];
int tama;

void funcioen(int *p)
{
tama = (sizeof(p)) / (sizeof(int));
prinf("La longitud del arrary es: %d", tama);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar