C/Visual C - tabla dinamica como parametro

 
Vista:

tabla dinamica como parametro

Publicado por chujkero (10 intervenciones) el 07/08/2004 18:33:31
Mu wenas a tod@s!!
Tengo una tabla dinamica de registros. Tengo una funcion que me devuelve la misma tabla con una posicion mas, utilizando para ello una tabla temporal :
1.- Crei una tabla temporal con una posicion mas
2.- Vuelco mi tabla en esta tabla temporal
3. Borro mi tabla antigua
4. Hago que el puntero de mi tabla antigua apunte a la temporal.

Mi problema es que no se como pasar bien como parametro mi tabla, dinamica pues cuando salgo de la funcion no tiene la informacion que debiera.
Gracias de antemano
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:tabla dinamica como parametro

Publicado por Nicolas (183 intervenciones) el 07/08/2004 20:41:27
Hola!!!!!!!!!!1

Si vos pasas un puntero por parametro a una funcion, salvo q sea "const", a la salida tendra el nuevo valor. O sea, la funcion no deberia devolver nada ya q modificas "la tabla" en esa funcion y a la salida ya va a estar modificada. Si queres mandar algo de codigo aca al foro, estaria un poco mejor.

Salu2!!!!!
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:tabla dinamica como parametro

Publicado por chuidiang (677 intervenciones) el 08/08/2004 10:13:02
Buenas:

Primero un pequeño detalle. La función realloc() suele estar en casi todos los compiladores y hace lo que pretendes hacer.

En cuanto a tu pregunta, te pongo un pequeño ejemplo

void funcion (int *a)
{
a = malloc (...); /* o new si usas c++ */
}

Esto no funciona bien. Aunque estás pasando un puntero, el puntero en sí se pasa por copia. Eso quiere decir que el puntero fuera de la función y el de dentro son distintos punteros, aunque apunten al mismo sitio inicialmente.
Si haces que dentro de la función, el puntero apunte a otro lado (con un new o malloc o cualquier otro metodo), el puntero de dentro apuntará a ese nuevo sitio, mientras que el de fuera no lo hará.

int *b = NULL;
funcion (b);
/* Aqui b sigue apuntando a NULL */

Para hacer esto bien, tienes dos opciones:
- Devolver el nuevo puntero en el return
int *funcion()
{
int *a = malloc (...);
return a;
}
b = funcion ();

- La otra opción es pasar por parámetro un puntero al puntero, algo tan "liado" como esto

void funcion (int **a)
{
*a = malloc (...);
}
...
/* La llamada sería ... */
int *b;
funcion (&b);

Puedes ver algo más de esto en http://www.geocities.com/chuidiang/funciones/punteros.html en un apartado que hay de paso de punteros por parámetro.

Se bueno.
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:tabla dinamica como parametro

Publicado por chujkero (10 intervenciones) el 09/08/2004 17:30:17
Muchas gracias!! al devolverlo en el return de la funcion va perfectamente, jejeje despues de darle tantas vueltas al fin funciona.
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