Istituto Tecnico Industriale "Enrico Fermi"

Help On Chat

[Ritorna all'elenco sessioni]

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.

[Ritorna all'elenco sessioni]