Oppure

Loading
20/02/09 22:21
frankus89
salve a tutti!
ho scoperto questo bellissimo forum sulla programmazione e ho subito qualche domanda da fare.

devo scrivere un programma che consenta le normali funzioni di gestione di una lista, come l'inserimento di un elemento, la sua cancellazione o la ricerca di esso.

ecco quindi la parte di codice che dovrebbe servire alle mie domande:
struct EL {
		int n;
		struct EL *next;
          }
typedef struct EL elemList;

typedef elemList *listOfElem;


"*listOfElem" rappresenta una classe di puntatori che fanno riferimento a elemList??

int Elemento_in_lista(listOfElem list,int elem);


perchè per controllare se un elemento è in lista uso un semplice riferimento per parametro e non per indirizzo??

					
void Inizializza(listOfElem *list){
					*list=NULL;


questo servirebbe ad inizializzare la lista a null, cioè a far puntare da "list" NULL??
quindi "list" è il puntatore che punta al primo elemento dopo la testa della lista??

ultima domanda:
per controllare se una lista è vuota o meno (cioè se è composta solo dalla sua testa), scrivo
 if(list==NULL) 

o
if(*list==NULL)

??

spero possiate darmi una risposta..contando su di voi, saluti.:)
aaa
24/02/09 3:01
gioser
Postato originariamente da frankus89:

struct EL {
		int n;
		struct EL *next;
          }
typedef struct EL elemList;

typedef elemList *listOfElem;


"*listOfElem" rappresenta una classe di puntatori che fanno riferimento a elemList??



listOfElem non è una classe. È un tipo definito dall'utente. Rappresenta un puntatore alla struttura EL.
Anche elemList è un tipo definito dall'utente. Sostanzialmente serve a evitare di scrivere "struct" tutte le volte :)

Postato originariamente da frankus89:

int Elemento_in_lista(listOfElem list,int elem);


perchè per controllare se un elemento è in lista uso un semplice riferimento per parametro e non per indirizzo??



il parametro è di tipo listOfElem, che è un puntatore a EL.

Postato originariamente da frankus89:

					
void Inizializza(listOfElem *list){
					*list=NULL;


questo servirebbe ad inizializzare la lista a null, cioè a far puntare da "list" NULL??
quindi "list" è il puntatore che punta al primo elemento dopo la testa della lista??


list è un puntatore a un puntatore.
In C per permettere alle funzioni di modificare i parametri bisogna passarli per indirizzo.
Per modificare un puntatore bisogna passarne l'indirizzo, cioè un puntatore a un puntatore. :)

Postato originariamente da frankus89:

ultima domanda:
per controllare se una lista è vuota o meno (cioè se è composta solo dalla sua testa), scrivo
 if(list==NULL) 

o
if(*list==NULL)

??

spero possiate darmi una risposta..contando su di voi, saluti.:)


se list è di tipo listOfElem, allora è un semplice puntatore e quindi devi usare

 if(list==NULL) 



ciao :)
aaa
24/02/09 9:23
frankus89
grazie 10000!! ho capito adesso!
olo che una domanda chiave mi "affligge"..
perchè usiamo un puntatore a puntatore per il primo elemento della lista, piuttosto che un semplice puntatore??
forse la risposta è nella precedente , ma io non l'ho capita..
grazie
saluti
aaa
02/03/09 16:32
il motivo è che per modificare il valore di una variabile passata come parametro bisogna passarla per indirizzo, ossia come puntatore, altrimenti verrebbe modificata localmente alla funzione e basta.

Nel tuo caso specifico ciò che fai non è altro che passare un puntatore ad una variabile di tipo listOfElem tutto qui. Il fatto che poi listOfElem sia a sua volta un puntatore e quindi risulti un puntatore a puntatore è per così una cosa relativa.

spero di essere stato chiaro