Thread obsoleto Liste e Puntatori

TheJackpot

Utente Mitico
Autore del topic
20 Febbraio 2011
8.015
79
Miglior risposta
0
A scuola abbiamo fatto le liste, però ci ho capito davvero poco.
Allora, che differenza c'è tra:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

e:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Alla dichiarazione di una funzione non ho capito il perchè del ' * ':
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


Mi potreste fare una breve spiegazione? Grazie
 
A scuola abbiamo fatto le liste, però ci ho capito davvero poco.
Allora, che differenza c'è tra:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

e:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Alla dichiarazione di una funzione non ho capito il perchè del ' * ':
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


Mi potreste fare una breve spiegazione? Grazie

Presuppongo che tu conosca cosa sia un puntatore e che sai usarlo nella funzione

Allora ... da dove inizio bene partiamo prp dal primo punto che proponi
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

la prima è una semplice struttura con due elementi e sai che si accede con

struct prodotto c;
c.nome="cassiera 1";
c.prezzo=20;

ok fino a quà normale una semplice struttura

analizziamo la seconda strutture che rappresenta appunto il concetto di lista

struct elemento{
prodotto Prod;
elemento *succ;
};

proviamo a ricreare la strutture in "memoria"
ti metto in evidenza questo elemento *succ
struct elemento lista;
lista.Prod=20;
lista.succ.Prod ... cosi non va bene xk è un puntatore alla struttura stessa che avrà al suo interno un elemento e un altro puntatore a struttura e così via quindi nn posso accedere perché in pratica dovrei dirci accedi al puntatore della lista e vai all'elemento Prod (della nostra seconda lista cioè quella "contenuta" nel puntatore)

E tipo immaginare un Blocco composto da 3 piccoli blocchetti e l'ultimo blocchetto contenga altri 3 blocchetti uguali a se stesso e l'ultimo di questo contenga altri 3 blocchetti (uguali al primo blocco come strutture e al 2°)

Risoluzioni per l'accesso
Soluzione 1

n=lista.(*succ).Prod; // n conterra il valore di Prod non della prima lista bensì quella "contenuta nel puntatore"
per questioni di priorità necessita delle parentesi per obbligare a considerare l'asterisco , in questo caso nei confronti del punto

Soluzione 2 (Usare l'operatore)
i=lista.succ->Prod; // quindi equivale a ciò che ho scritto sopra solo evitando le parentesi



Per quando riguarda questa funzione restituisce un puntatore perché probabilmente dovrà essere contenuto in un nodo della lista.(presumo perché non ho letto il corpo della funzione)
n3.succ=cercaelemento("prova")

elemento *CercaElemento (string x);
//si presume che dovrebbe scorrere la lista
 
  • Like
Reactions: 1 person
Ok ti ringrazio, era questa la cosa che mi premeva sapere di più: elemento *CercaElemento (string x);
Non avevo capito che senso aveva mettere l'asterisco prima del nome della funzione, e da quanto ho capito la funzione restituisce un puntatore, giusto?
 
Ok ti ringrazio, era questa la cosa che mi premeva sapere di più: elemento *CercaElemento (string x);
Non avevo capito che senso aveva mettere l'asterisco prima del nome della funzione, e da quanto ho capito la funzione restituisce un puntatore, giusto?

un puntatore di struttura.

Comunque tra le altre cose che analizzerai a scuola mi sembra ci sta la ricerca -l'eliminazione di un elemento dalla lista e aggiungere elementi a una lista visto che ci troviamo in argomento disolito la fine lista è indicato con un puntatore di tipo struct nullo (0 -1)

esempio :

struct n {
int val;
struct n *next;
}

main(){
struct n n1,n2,n3;
n1.val=300;
n1.next=&n2;
n2.val=210;
n2.next=&n3
//nessun valore per la lista n3
n3.next=(struct n *) 0 // disolito si usa lo 0 o -1 x indicare la fine lista
}