|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
[c] ma queste righe non sono uguali?
stavo riguardando uno dei primi esercizi di uno dei corsi dell'università. robbbbba facile, e poi io sono beccio, quell'esame me lo sono mangiato... mmmmmmmh.. forse no, mi sono venuti dei dubbi
la linea dell'umiliazione è questa Codice:
mq->lg=((mq->lg+1)%MAX); data mq un puntatore a struttura perfettamente allocata nella mia mente doveva sommarci uno, farci un banale modulo 16 (è questo che vale MAX) e riassegnarlo a lg.... nono, col cavolo che lo fa! alemeno non su quel codice... però lo fa questa linea... Codice:
mq->lg++ % MAX; ok, al di là che l'ultima opzione non mi sarei nemmeno sognato di scriverla non capisco che differenza ci sia tra le due righe.... sapete illuminarmi? ciao ciao! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Entrambe le istruzioni sono corrette sintatticamente ma ... il risultato è molto differente.
Codice:
mq->lg=((mq->lg+1)%MAX); Codice:
mq->lg++ % MAX; Il risultato del modulo però non va a finire in mq->lg (perché non è una assegnazione) ma va a finire nel risultato della espressione. Messa così una espressione ... non serve a niente, perché il risultato del modulo ... si "perde". Supponiamo di avere il seguente codice (supponiamo che lg sia un intero): Codice:
mq->lg = 14;
printf ("espr: %d\n", mq->lg++ % MAX);
printf ("mq->lg: %d\n", mq->lg);
printf ("espr: %d\n", mq->lg++ % MAX);
printf ("mq->lg: %d\n", mq->lg);
printf ("espr: %d\n", mq->lg++ % MAX);
printf ("mq->lg: %d\n", mq->lg);
printf ("espr: %d\n", mq->lg++ % MAX);
printf ("mq->lg: %d\n", mq->lg);
Codice:
espr: 14 mq->lg: 15 espr: 15 mq->lg: 16 espr: 0 mq->lg: 17 espr: 1 mq->lg: 18 Spero di essere stato chiaro, naturalmente.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:32.



















