STB1019 / SkullOfSummer

Learn stuff with less 7-days
Apache License 2.0
5 stars 0 forks source link

problematiche relative a enum, union, struct #10

Closed Koldar closed 7 years ago

Koldar commented 7 years ago
  1. Nella fonte disponi il link non alla fine del testo: magari crea il riferimento come testo del link;
  2. "un'ulteriore" al posto di "una ulteriore";
  3. Nella sezione enum: metti un esempio concreto dove l'enumerazione ha un valore preciso in una riga diversa... non lo so, tipo i giorni della settimana;
    typedef enum {
    LUNEDI,
    MARTEDI,
    MERCOLEDI,
    GIOVEDI,
    VENERDI,
    SABATO,
    DOMENICA
    } giorno_settimana
  4. Dark side delle union è troppo grosso: spostalo in fondo: prima uni vuole sapere cosa è e come si usa; poi al massimo se è curioso va a vedere i tramini;
  5. Della union manca una frase importante: la size di una union è il massimo delle size dei suoi componenti (e qui l'hai detto) e i puntatori di ciascun campo sono uguali e puntano tutti al primo byte in cui la union è allocata in memoria (vedi immagine );
  6. è bello spiegare il profondo parallelismo tra union e typedef. Il numero di byte allcoati ad una union è il MAX delle size dei suoi campi mentre nella struct è la SOMMA. Mentre i puntatori ai vari campi di una union sono tutti uguali e combaciano con il puntatore al primo byte della union mentre nella struct i puntatori dei campi sono la somma cumulata dei puntatori (per esempio struct {int a, float b}, se la struttura è stata allocata in 0xFF34, a è in 0xFF34 mentre b è un 0xFF38 (se un int è grosso 4 byte);
  7. " In caso di attributi composti da array di dimensione non definita, la dimensione totale varierà in base a questi.": la size di una struct è sempre definita in fase di compilazione: semplicemente una variabile di tipo array in cui la dimensione dell'array non è specificata è di fatto un puntatore e quindi la sua size sarà una roba tipo 4 o 8 (a seconda dell'architettura del sistema. Se invece la dimensione dell'array è specificata l'intero array è contenuto nella struct. Fai questo esempio che è figo:
typedef struct {
    int a;
    int b[];
} a1;

typedef struct {
    int a;
    int b[100];
} a2;

int main() {
    printf("sizeof a1: %ld\n", sizeof(a1));
    printf("sizeof a2: %ld\n", sizeof(a2));
}
  1. "Per accedere all'attributo del CF della struttura puntata" forse l'esempio è più adatto nella sezione "puntatori a struttura"?
  2. "definizione" al posto di "chiarazione";
  3. "t1.d[0] = 4.2; // potrebbe dare errore": perché potrebbe dare errore? siccome la cella considerata è la prima non può mai dare errore. Diverso è il discorso con t1.d[1];
RedsAnDev commented 7 years ago

Ho un paio di dubbi:

Koldar commented 7 years ago

Per il punto 6: non è collocato da nessuna parte. Sarebbe bello aggiungere questa spiegazione per capire appieno le struct e le union; Per il punto 10: puoi dirmi la sezione in cui è citata questa problematica?