[C con Clase] Pasaje de listas con punteros a una funcion

Steven Davidson steven en conclase.net
Jue Ago 9 18:54:11 CEST 2007


Hola Richard,

El pasado 2007-08-09 14:44:09, Richard Sandes escribió:

RS> Estimados,
RS> Tengo la siguiente duda, tengo una estructura definida de la siguiente
RS> manera:
RS> struct ListaNum {
RS>     int valor;
RS>     ListaNum *siguiente;
RS> }
RS> El cual es una lista de numeros, me pueden enviar una función para insertar
RS> un elemento al comienzo de la lista, he probado varias formas de pasar la
RS> estructura a la función utilizando los operadores * y & y no hay caso, si me
RS> pueden ayudar con esto les agradezco.

Según veo estás implementando una lista dinámicamente enlazada. Sugiero leer el capítulo 1 de nuestro curso de "Estructuras Dinámicas de Datos" (EDD). El enlace es: http://c.conclase.net/edd/index.php?cap=001

Tendrías que definir lo que es una lista enlazada. Si por ejemplo haces lo siguiente,
ListaNum *pComienzo;

entonces podemos pasar la lista de esta manera:

void func( ListaNum *ptr );

Si quieres modificar la lista, por ejemplo para inicializarla, entonces necesitas la variable (puntero) original. En C++, podemos hacer esto con otro puntero,

void init( ListaNum **ptr )
{
  *ptr = 0;
}

y su uso sería:
int main()
{
  ListaNum *pLista;

  init( &pLista );
  ...
}

o por referencia,
void init( ListaNum * &ref )
{
  ref = 0;
}

y este uso sería:
int main()
{
  ListaNum *pLista;

  init( pLista );
  ...
}


Espero que esto te ayude.

Steven


Más información sobre la lista de distribución Cconclase