Linguaggio C per MSX – lezione 6

da | Gen 22, 2024 | Linguaggio C | 0 commenti

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 definire anche array multidimensionali, in questo caso sono necessari almeno due indici per identificare un elemento desiderato.

type identifier [constant-expressio] [constant-expressio] ……

Anche se un array multidimensionale viene memorizzato come una sequenza di elementi, questo può essere manipolato come un array di array. Quindi per accedere ad un elemento di un array multidimensionale abbiamo bisogno di specificare tanti indici quante sono le dimensioni.

Nell’esempio successivo abbiamo la dichiarazione dell’array multidimensionale numero di tipo intero.

int numeri[3][4] = {{10,0,12,-1}, {7,-3, 2, 5}, {-5,-2, 2, 9}};

Esistono diversi metodi per accedere ad un array multidimensionale, quello mediante gli indici è sicuramente quello più semplice e lo possiamo vedere nell’esempio sottostante alla riga 1.

int a = numeri[1][2];
int b = *(numeri[1]+2);
int c = *(*(numeri+1)+2);
// in tutti e tre i casi il risultato dell’assegnazione è il valore 2

È comunque possibile accedere all’array multidimensionale tramite puntatori, la sintassi è sicuramente più complessa e può essere espressa come nell’esempio alle righe 2 e 3.

Ricordiamo che un array a due indici come quello dell’esempio ( numeri[3][4] ), occupa in memoria 3 × 4 posizioni “contigue” e quindi, per certi versi, si potrebbe considerare come un array unidimensionale di lunghezza 12. Ricordo che l’ordine di memorizzazione degli elementi dell’array segue la regola per cui l’indice più a sinistra cresce più lentamente. Quindi in memoria dopo l’elemento numeri[0][0] abbiamo numeri[0][1], poi numeri[0][2] e così via.

Possiamo pensare all’array numeri[3][4] come a un array di 3 elementi, in cui ciascun elemento punta a un array di 4 elementi. Se adottiamo questo punto di vista appare chiaro che il nome numeri oppure numeri[0] è un puntatore al primo elemento dell’array bidimensionale, cioè al primo sotto-array di lunghezza 4; quindi numeri + 1 o numeri[1] punta al secondo sotto-array di lunghezza 4 e così via.

L’espressione *(numeri + 1) è uguale al contenuto della locazione di memoria a cui punta numeri + 1; questa locazione contiene l’indirizzo del secondo sotto-array, quindi *(numeri + 1) non è un elemento dell’array ma è ancora un puntatore. Per essere più chiaro contiene l’indirizzo dell’sotto -array che contiene i valori {7,-3, 2, 5} . E nello stesso modo è ancora un puntatore l’espressione *(numeri + 1) + 2, che è l’indirizzo del terzo elemento del secondo sotto-array.

E infine l’espressione *(*(numeri + 1)) deferenzia il puntatore *(numeri + 1) restituendo il contenuto della locazione di memoria puntata: tale contenuto corrisponde al primo elemento del secondo sotto-array, che, in termini di indici, possiamo scrivere numeri[1][0], e nello stesso modo l’espressione *(*(numeri + 1) + 3) è uguale ad numeri[1][3].

Spero che la dispensa sia sufficientemente chiara, nel seguito torneremo a parlare di array come parametro di funzioni.

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 5

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