Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Chi ? ossessionato dalla morte, a causa d'essa diviene colpevole.

Elias Canetti 

Sondaggio:

Quale telegiornalista trasmette pi? carica erotica?

M.Grazia Capulli
Lilli Gruber
Benedetta Parodi
Siria Magri
Tiziana Ferrario
M.Concetta Mattei
Tutte, anche quelle non elencate

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-2019 Cataldo Sasso