Ciao zazi77,
Una espresione produce un risultato che poi puoi assegnare a una variabile oppure testare in un 'if', ad esempio 3 + 5 produce 8 e 'a + b' produce la somma dei valori contenuti in a è b. Oltre a produrre un risultato una espressione può avere effetti collaterali ovvero può alterare il valore di qualche variabile, as esempio 'a + b++' restituisce la somma di 'a' e 'b' e inoltre incrementa il valore di b.
Una espressione inoltre può contenere una chiamata a funzione ad es '3 + MyFunc(5)', quindi la valutazione di questa espressione può avere come effetto collaterale la scrittura sullo schermo o la formattazione del computer.
In C non è obbligatorio assegare o testare una espressione, se uno vuole può scrivere:
3;
Non serve a niente ma è corretto, l' espressione (composta da un solo termine) viene valutata e il risultato buttato via.
per quanto riguarda l' operatore virgola hai capito giusto:
b = 0;
a = (b++, d = 4, b + d);
- viene valutata prima l' espressione b++, il suo risultato (0) viene buttato ma ha come effetto quello di incrementare 'b'
- viene poi valutata 'd = 4' il suo risultato (4) viene buttato ma ha come effetto quello di assegnare 'd'
- viene valutata 'b + d' e il suo risultato (5) viene assegnato ad 'a'.
Corrisponde a:
b = 0;
b++;
d = 4;
a = b + d;