Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Non si ? mai abbastanza attenti nella scelta dei propri nemici.

Oscar Wilde 

Sondaggio:

A tuo giudizio, riaprire le "casechiuse" ?...

Un modo per combattere la criminalit?
Un insulto alle donne
Una cosa da fare al pi? presto
L'ennesima stupidaggine di questo governo
Una cosa che non mi interessa

visualizza risultati


 

Assegnamento

 

Il C++ e` un linguaggio pesantemente basato sul paradigma imperativo, questo vuol dire che un programma C++ e` sostanzialmente una sequenza di assegnamenti di valori a variabili. E` quindi naturale iniziare parlando proprio dell'assegnamento.
L'operatore di assegnamento e` denotato dal simbolo = (uguale) e viene applicato con la sintassi:

 

< lvalue > = < rvalue >;

 

Il termine lvalue indica una qualsiasi espressione che riferisca ad una regione di memoria (in generale un identificatore di variabile), mentre un rvalue e` una qualsiasi espressione la cui valutazione produca un valore. Ecco alcuni esempi:

 

Pippo = 5;
Topolino = 'a';
Clarabella = Pippo;
Pippo = Pippo + 7;
Clarabella = 4 + 25;

 

Il risultato dell'assegnamento e` il valore prodotto dalla valutazione della parte destra (rvalue) e ha come effetto collaterale l'assegnazione di tale valore alla regione di memoria denotato dalla parte sinistra (lvalue). Cio` ad esempio vuol dire che il primo assegnamento sopra produce come risultato il valore 5 e che dopo tale assegnamento la valutazione della variabile Pippo produrra` tale valore fino a che un nuovo assegnamento non verra` eseguito su di essa.

Si osservi che una variabile puo` apparire sia a destra che a sinistra di un assegnamento, se tale occorrenza si trova a destra produce il valore contenuto nella variabile, se invece si trova a sinistra essa denota la locazione di memoria cui riferisce. Ancora, poiche` un identificatore di variabile puo` trovarsi contemporaneamente su ambo i lati di un assegnamento e` necessaria una semantica non ambigua: come in qualsiasi linguaggio imperativo (Pascal, Basic, ...) la semantica dell'assegnamento impone che prima si valuti la parte destra e poi si esegua l'assegnamento del valore prodotto all'operando di sinistra.

Poiche` un assegnamento produce come risultato il valore prodotto dalla valutazione della parte destra (e` cioe` a sua volta una espressione), e` possibile legare in cascata piu` assegnamenti:

 

Clarabella = Pippo = 5;

 

Essendo l'operatore di assegnamento associativo a destra, l'esempio visto sopra e` da interpretare come

 

Clarabella = (Pippo = 5);

 

cioe` viene prima assegnato 5 alla variabile Pippo e il risultato di tale assegnamento (il valore 5) viene poi assegnato alla variabile Clarabella.

Esistono anche altri operatori che hanno come effetto collaterale l'assegnazione di un valore, la maggior parte di essi sono comunque delle utili abbreviazioni, eccone alcuni esempi:

 

Pippo += 5;   // equivale a Pippo = Pippo + 5;
Pippo -= 10;  // equivale a Pippo = Pippo - 10;
Pippo *= 3;   // equivale a Pippo = Pippo * 3;

 

si tratta cioe` di operatori derivanti dalla concatenazione dell'operatore di assegnamento con un altro operatore binario.

Gli altri operatori che hanno come effetto laterale l'assegnamento sono quelli di autoincremento e autodecremento, ecco come possono essere utilizzati:

 

Pippo++;   // cioe` Pippo += 1;
++Pippo;   // sempre Pippo += 1;
Pippo--;   // Pippo -= 1;
--Pippo;   // Pippo -= 1;

 

Questi due operatori possono essere utilizzati sia in forma prefissa (righe 2 e 4) che in forma postfissa (righe 1 e 3); il risultato comunque non e` proprio identico poiche` la forma postfissa restituisce come risultato il valore della variabile e poi incrementa tale valore e lo assegna alla variabile, la forma prefissa invece prima modifica il valore associato alla variabile e poi restituisce tale valore:

 

Clarabella = ++Pippo;

/* equivale a */

Pippo++;
Clarabella = Pippo;

/* invece */


Clarabella = Pippo++;

/* equivale a */

Clarabella = Pippo;
Pippo++;

 

 

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2022 Cataldo Sasso