Linguaggio C per MSX – lezione 4

da | Dic 17, 2023 | Linguaggio C | 0 commenti

Linguaggio C per MSX

Rubrica a cura di Nicola Brogelli (Parte 4)

Puntatori

In questa dispensa accenneremo cosa sono i puntatori. Queste informazioni saranno utili per le dispense successive dove andremmo a parlare dell’aritmetica dei puntatori legata agli array, di come realizzare il passaggio di parametri per riferimento ecc.

Accenni ai puntatori

Dai tipi fondamentali che abbiamo incontrato nella prima dispenda si possono derivare altri tipi di dato. Per esempio da un tipo int possiamo derivare un puntatore a int e così via per tutti gli altri tipi. Ora ci possiamo chiedere che cosa è un puntatore. Possiamo dire che una variabile appartenente a questo tipo è un oggetto il cui valore è un indirizzo di memoria. Quindi un oggetto di tipo puntatore ha come valore l’indirizzo di un altro oggetto o di una funzione (in questa dispensa non tratteremo i puntatori a funzione).

La più semplice forma di dichiarazione di un puntatore è la seguente:

tipo variabile *nome_variabile

Nell’esempio seguente possiamo vedere la dichiarazione di variabili di tipo puntatore.

int *p;

double *d;

float *f;

Ad un puntatore possiamo assegnare dei valori, se gli assegniamo 0 o NULL, otterremo un puntatore nullo. Il puntatore nullo non si riferisce a nessun oggetto e quindi il tentativo di deferenziarlo porterà ad un errore a tempo di esecuzione. Oppure potremmo assegnare al puntatore l’indirizzo di memoria di una variabile. Questo è possibile tramite l’uso dell’operatore & (operatore di indirizzo). L’operatore & è unario e prefisso, restituisce l’indirizzo di memoria del suo operando. Nell‘ esempio seguente dichiariamo una variabile di tipo int e le assegniamo il valore 5, successivamente dichiariamo una variabile puntatore a int e contestualmente le assegniamo l’indirizzo di memoria di i.

int i = 5;

int *pi = &i;

Per accedere ad una variabile puntatore si utilizza l’operatore * (deferenziazione o indirezione). Anche questo operatore è unario e prefisso e restituisce il valore della variabile puntata dal puntatore.
L’esempio seguente stampa il valore della variabile i e cioè 5.

printf(“%d”, *pi);

In alcuni casi particolari potremmo voler specificare che un dato puntatore non deve essere usato per modificare l’oggetto a cui punta, questo potremmo ottenerlo tramite la parola chiave const

int i;

const int *pi = &i;

In seguito a questa dichiarazione tutte le istruzioni successive che tenteranno di cambiare il valore i usando il puntatore pi verranno segnalate come errore.

*pi = 5; // non lecito

Puntatori a void

Abbiamo detto che la dichiarazione di un puntatore specifica il tipo dell’oggetto riferito. In alcuni casi può essere utile che una variabile possa contenere puntatori a tipi di oggetti diversi. In questo caso la variabile viene definita come puntatore a void. Prima di essere deferenziato un puntatore a void deve essere convertito mediante un cast al tipo opportuno. Con un semplice esempio vediamo come un puntatore a void viene utilizzato per accedere prima a un numero intero e poi a un carattere.

int i;

int *pi = &i;

int c;

int *pc = &c;

void *vp;

vp = pi;

*(int*)vp = 3;

vp = pc;

*(char*)vp = ‘c’;

Per chi fosse interessato l’Associazione MSX Italia ha creato un gruppo di lavoro di Ricerca e sviluppo sulla programmazione C per MSX. Per maggiori info: associazioneMSXitalia@gmail.com

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Linguaggio C per MSX – lezione 6

Linguaggio C per MSX – lezione 6

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 6) Array e Puntatori Array Multidimensionali             Fino ad ora abbiamo considerato array monodimensionali, i quali richiedevano un solo indice per l’individuazione di un elemento. Il C permette di...

Linguaggio C per MSX – lezione 6

Linguaggio C per MSX – lezione 5

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 5) Array e Puntatori Array Gli array sono sequenze di variabili dello stesso tipo che vengono memorizzare consecutivamente nella memoria ed alle quali è possibile accedere usando uno stesso nome...

Linguaggio C per MSX – lezione 3

Linguaggio C per MSX – lezione 3

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 3) Enumerazioni Gli enum o enumerazioni sono particolari tipi di dato che contengono un elenco di costanti, ciascuna delle quali è associata ad un valore intero. Nello specifico i valori costanti contenuti...

MSXgl una libreria di giochi scritta in C

MSXgl una libreria di giochi scritta in C

MSXgl è una libreria di giochi scritta in C e destinata ai computer MSX. L'obiettivo di questa libreria è quello di offrire ai programmatori C l'intero set di funzionalità per creare un gioco ad alte prestazioni. Anche se un programma C non potrà mai essere efficiente...

Linguaggio C per MSX – lezione 3

Linguaggio C per MSX – lezione 2

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 2) Conversioni di Tipo Come abbiamo visto nella dispensa precedente, in C ogni dato ha un Tipo ben definito. Quando in una espressione compaiono variabili di tipo diverso, spesso il compilatore è in grado...

it_ITIT_IT