Newsgroup: it.comp.lang.c
Titolo: espressioni?

i+3 e' una espressione.
i=k+5 e' una espressione?
L' assegnamento restituisce un valore che posso riassegnare, es. v=i=k+5,
percio' a me sembra che sia un' espressione.
Come utilizzo il concatenamento di espessioni?
Se scrivo i=j+3,k+5   , mi ritrovo con i uguale a 9, se j vale 3, e non il
valore di k+5, che sarebbe il valore dell' ultima espressione.
E di assegnamenti?
Se scrivo k= i=1,,j=3   ,mi aspetterei per k il valore 3, quello dell'
ultimo assegnamento, e invece viene 1.
Chiederei per favore una spiegazione.Grazie, Gianmaria.

 ultimo assegnamento, e invece viene 1.
E perchè ti aspetti una cosa del genere?
Forse mi sfugge qualcosa di quello che chiedi, ma io la concatenazione di
espressioni l'ho sempre intesa come una espressione usata per raggruppare
insieme varie espressioni, e il cui risultato è il valore dell'ultima
espressione (cioè di quella più a destra); le espressioni concatenate
verranno eseguite da sx a dx. Ad esempio:
int x, y, z;
y = z = 3;
x = ( y++, z--, y-z );
allora risulterà:
y = 4
z = 2
x = 2 (cioè 4-2)
Ciao,
Cecco

ultimo assegnamento, e invece viene 1.
E' lo stesso motivo di prima:
k=i=1, j=3;
equivale a:
(k=i=1),(j=3);
non a:
k=(i=1,j=3);
-- 
The Follet

ma non dovrebbe in entrambi i casi ritornare il valore k+5?
No, vedi il mio messaggio precedente. 
L'assegnazione di k+5 nell'esempio dell'OP viene ignorato
dal compilatore, perche' la precedenza dell'operatore
virgola e' piu' bassa di tutti gli altri operatori.
In generale, se l'operatore x ha precedenza minore rispetto
all'operatore y, l'espressione:
A x B y C x D
viene raggruppata nel modo seguente:
(A x B) y (C x D)
Se al posto di x ci metti = e al posto di y ci metti
l'operatore virgola, ti accorgi del perche' il nostro amico
ottiene quei risultati.
-- 
The Follet

 Nel mio esempio, assumo che k valga 4 e che j valga 3.
Allora adesso mi torna tutto.
Grazie,
Cecco

 (i = j+3),(k+5); /* che da' risultato 6 */
                                ^^^^^^^^^^^^^
Cosa vuol dire nelle parti che ho evidenziato la frase "che dà risultato
xxx"? Ti riferisci al valore ritornato da ",". A parte il fatto che non ho
capito come fai ad attribuirgli dei valori senza sapere i valori delle
variabili in gioco, ma non dovrebbe in entrambi i casi ritornare il valore
k+5?
Ti dispiacerebbe spiegarmi come funziona l'operatore ",", mi sa che non l'ho
capito.
Ciao,
Cecco

(A x B) y (C x D)
Uff... ovviamente intendo dire che x ha precedenza
*maggiore* (non minore) rispetto a y ! :)
-- 
The Follet

 No, e' un'assegnazione.
ma le assegnazioni sono anche espressioni. 
"In C ogni assegnamento, come 
        c= getchar()
costituisce un'espressione con un particolare valore, che' quello della 
parte sinistra dopo l'assegnamento", B.W. Kernighan, D. Ritchie, 
"Linguaggio C seconda edizione", Jackson
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

parte sinistra dopo l'assegnamento", B.W. Kernighan, D. Ritchie, 
Si', fondamentalmente e' una questione di interpretazione.
-- 
The Follet