Pagina didattica di G. Servizi
Home >> Linguaggio C++ >> vocabolario C++


livello medio

struct

Quanto detto a proposito della parola class vale, in C++, anche per struct, fatta salva la differenza tra private e public nell'accessibilità implicita delle variabili membro.

In questa pagina saranno quindi presentate altre peculiarità di struct che erano presenti già nell'ANSI C e che, naturalmente, sono preservate anche in C++.

In particolare si mostra come la parola struct consenta di dichiarare delle variabili che accedono ad aree di memoria più piccole di un byte, fino ad arrivare a indirizzare il singolo bit (GRAN LINGUAGGIO): i cosiddetti bitfields.

Si consideri la seguente dichiarazione:

struct Ciccio
{signed a : 4; unsigned b : 8; unsigned int c : 1; int d : 13;} ciccio = {3, 124, 1, 4000};

Qui la variabile ciccio, dichiarata di tipo Ciccio, ha delle variabili membro dichiarate, a loro volta, in un modo poco usuale: il numero intero che segue il carattere ':' (due punti) sta a significare il numero di bit indirizzati dalla corrispondente variabile membro.
Pertanto, nel caso presente, ciccio.a indirizza 4 bit segnati, il che significa che i suoi valori possibili coprono l'intervallo -8 ----> +7 inclusi; la variabile ciccio.b indirizza 8 bit non segnati, il che significa che i suoi valori possibili coprono l'intervallo 0 ----> 255 inclusi; la variabile ciccio.c indirizza UN UNICO BIT (!) e quindi rappresenta per natura una variabile booleana e infine la variabile ciccio.d indirizza 13 bit segnati con valori compresi tra -4096 ----> +4095 compresi. Tutto ciò occupa in memoria 4+8+1+13=26 bit e quindi sta abbondantemente entro lo spazio di una singola variabile di tipo int.

Si osservi che i bitfields sono per natura dei tipi interi e che pertanto la parola int può essere omessa a vantaggio delle più significative specifiche signed e unsigned. Si osservi altresì come l'inizializzatore posto immediatamente dopo la dichiarazione di ciccio attribuisca valori iniziali legittimi a tutte le variabili membro.

Torna in cima alla pagina