Chat del 18 Maggio 2018 dalle 18:35:12 alle 19:13:36
- Dominique DONNICI
- 12 struct a con gli stessi elementi interni?
- Riccardo MIRANDOLA
- Buonasera prof
- Shvetha ARUMUGAM
- Buona sera prof.
- Stefano Salvi
- Buona sera a tutti. Posiamo cominciare con le domande.
- Andrea POTITO
- Buonasera prof
- Dominique DONNICI
- Buonasera
- Andrea POTITO
- Ci saranno esercizi riguardanti l\'aritmetica dei puntatori?
- Riccardo MIRANDOLA
- La dimensione di una struct è data dalla somma dei tipi che la compongono?
- Stefano Salvi
- Il quarto argomento è "puntatori"... cosa potrà mai essere...
- Andrea POTITO
- Cosa intende per puntatori a strutture?
- Stefano Salvi
- un pntatore che non punta a un dato scalare (int, char, double) ma ad una struct.
- Andrea POTITO
- ma a malapena sappiamo cos\'è una struct (mezz\'ora di lezione)
- Stefano Salvi
- Ma sapente invece bene cosa è un puntatore.
- Andrea POTITO
- Può fare un esempio?
- Stefano Salvi
- Non fate i lagnosi e cercate di capire bene (e saper fare)
- Facciamo che ho la struct pippo {int a, double b;};, possi avere una variabile struct pippo x; ed un\'altra struct pippo *p; la prima è una struct (ha la memoria per a e b) mentre la seconda è un puntatore a struct (contiene l\'indirizzo di una struct). Per accedere all\'elemento a sella prima faccio x.a mentre per la seconda p->a (oppure (*p).a, ma non ve lo raccomando...).
- Riccardo MIRANDOLA
- La dimensione di una struct dipende dalla dimensione dei tipi che la compongono? (es se in una struct c è un Char che pesa 1 e un int che pesa 4 la struct pesa 5
- Andrea POTITO
- E cosa cambia nelle strutture utilizzare un puntatore o una variabile normale?
- Stefano Salvi
- In prima approssimazione, si (e noi useremo quella regola). Se poi vediamo invece cosa fa il compilatore, a volte per efficienza "allinea" gli int alla frontiera di 4 byte, ma questo noi facciamo finta che non esista.
- Riccardo MIRANDOLA
- Grazie
- Stefano Salvi
- Ovviamente una struct può contenere array, stringhe (che sono array) ed altre struct, nonché puntatori.
- Riccardo MIRANDOLA
- Può essere un array la struct stessa? (tipo struct a[] { int x, char y}?
- Dominique DONNICI
- A livello base prof,basta saper dichiarare una struct e andare a prendere gli elementi interni per lavorarci sopra?
- Luca TRAZZI
- NO, mi scusi ma non mi è ancora chiaro come lavorano le struct di puntatori o i puntatori di struct
- Dominique DONNICI
- Magari lavorare con un puntatore..
- Stefano Salvi
- Mirandola: a parte che la dichiarazione non è come l\'hai scritta, ma si, posso avere array di struct.
- Riccardo MIRANDOLA
- Per cortesia potrebbe indicarmi come andrebbe fatta la scrittura corretta?
- Stefano Salvi
- Donnici: a livello base, si, occorre capire che cosa è una definizione di struct, ujna dichiarazione di variabile di tipo struct e saper lavorare con gli lementi interni, oltre ad avere cognizione (come detto prima) della memoria impiegata.
- Trazzi: due cose diverse: un elemento di una struct può benissimo essere un puntatore. Posso poi avere un puntatore a struct, che punta al primo elemento della struct. In questo caso se voglio prendere i vari elementi della struct non uso le [] ma il segno di -> prima del nome dell\'elemento.
- Luca TRAZZI
- Ok grazie, un esmpio?
- Andrea POTITO
- Ma qual è l\'elemento di una struct? Quello che c\'è fra le graffe?
- Luca TRAZZI
- *esempio
- Riccardo MIRANDOLA
- Se avessi un puntatore che punta al primo elemento della struct e poi lo incrementassi di uno punterei al secondo elemento contenuto nella struct?
- Stefano Salvi
- Mirandola: facciamola in due fasi: prima dichiariamo il tipo poi definiamo la variabile array: struct a {int x, char u; }; struct a arr[12]; definisce un array di 12 struct a.
- Riccardo MIRANDOLA
- Grazie
- Stefano Salvi
- Trazzi: 1) struct contenente un puntatore: struct pst { char *s; int num; struct pst *pstp; }; 2) puntatore a struct: struct pst x; struct pst px = &x; - Chiaro
- Potito: riferendomi all\'esempio di prima, s, num e pstp sono gli elementi o campi della struct.
- Mirandola: se ho un puntatore al primo elemento della struct (alla struct) e lo incremento, occorre che in realtà esso punti ad un array di struct, perché se lo incremento non va al secondo campo della struct, ma alla prossima struc t nell\'array.
- Riccardo MIRANDOLA
- Capito, grazie
- Stefano Salvi
- Donnici: si, 12 struct con gli stessi identici campi, ovviamente con valori diversi nei vari campi...
- Dominique DONNICI
- Si sì ovvio, grazie
- Stefano Salvi
- Matematica di puntatori, non fa più paura, vero?
- Dominique DONNICI
- No no
- Stefano Salvi
- Vi sono chiari il pre- e post- incremento/decremento?
- Andrea POTITO
- no
- Federico DI GIACOMO
- prof per quanto riguarda le strutture saranno domande teoriche?
- Stefano Salvi
- Non proprio. qualcosa a metà via. Tipo scrivere esempi e non pezzi di codice...
- Spero che gli operatori ++ e -- siano chiari di per loro...
- Andrea POTITO
- si si quello si
- Stefano Salvi
- Naturalmente, gli operatori ++ e -- (che modificano la variabile a cui le applico), hanno anche un valore. Se sono prefissi (--a), ritornano il valore modificato, mentre se sono postfissi (a--) ritornano il valore prima della modifica. Comunque entrambi gli esempi decrementano a
- C
- Andrea POTITO
- ma io non capisco la differenza tra mettere -- prima o dopo, può fare un esempio?
- Stefano Salvi
- Vi è chiaro l\'ordine di esecusione delle operazioni, in particolare quando uso tipi diversi?
- Davide BENATTI
- Non mi è chiaro l\'esecuzione delle operazioni nei puntatori di vettori
- Andrea POTITO
- ma se ho un puntatore e faccio *++p, cosa succede?
- Stefano Salvi
- Potito: in a=1; int b=--a; a e b varranno entrambi 0; int a=1; int b=a--; a varrà sempre 0, ma b userà il valore di prima, quindi varrà 1;
- Andrea POTITO
- ma se faccio b=a--, non dovrebbe fare b=a-1?
- Stefano Salvi
- Benatti: ricorda che un\'operazione su un puntatore (a vettore) è come se fosse fatta sull\'indice dell\'array; se poi assegno ad un altro puntatore (o allo stesso, sovrascrivendolo), il risultato, otterrò un puntatore che punta ad un elemento dell\'array diverso dal primo.
- Davide BENATTI
- Ok grazie
- Stefano Salvi
- Potito: int x = *++p; prima sposta p all\'elemento successivo dell\'array, poi mi ritorna il valore di quell\'elemento. Se invece avessi scritto int x = *p++; prima avrei preso il valore dedll\'elemento puntato e poi avrei spostato il puntatore sull\'elelmnto successivo.
- Andrea POTITO
- ok grazie
- Stefano Salvi
- Che ne dite? Chiudiamo? Avete ancora domande?
- Andrea POTITO
- ma se faccio b=a--, non dovrebbe fare b=a-1?
- Dominique DONNICI
- Come sta?
- Stefano Salvi
- Potito: b=a--; prima fa b=a e POI a--, quindi mette in a il precedente di a.
- Andrea POTITO
- ah ok grazie mille prof
- Stefano Salvi
- Donnici: sto bene, molto impacciato dal piedono, ma bene... grazie
- Dominique DONNICI
- Di nulla ahah, buonasera
- Andrea POTITO
- Buona cena e buona guarigione prof
- Stefano Salvi
- Ok, allora buona cena, buon riposo e in bocca al lupo.
|