gestione della memoria dell'array multidimensionale

1

Potresti mostrarmi un esempio su come calcolare la posizione di un elemento in una matrice multidimensionale.

È illustrato nel libro Concetto dei linguaggi di programmazione di Robert Sebesta che la posizione di un elemento è data dalla formula

location(a[i,j]) = address_of(a[1,1]) + ((i - 1)*n + (j - 1))*element_size

dove n è il numero di elementi per riga e a[1,1] è l'indirizzo di base (indicizzazione basata su 1).

Ho cercato di trovare la posizione di [5,5] in una matrice 7 × 7, assumendo element_size=2 . Calcolando manualmente ho ottenuto il valore 66. Ma durante il calcolo utilizzando la formula ho ottenuto il valore 64:

location(a[5,5]) = 0 + ((4*7) + 4)*2 = 64

È corretto o no? Potresti dirmi come si è verificata la differenza di due.

    
posta justin 18.10.2014 - 06:56
fonte

3 risposte

2

Per me è sempre 64. La posizione di 5,5 è 0 + (((5-1) * 7) + (5-1)) * 2 = ((4 * 7) +4) * 2 = 28 * 2 + 4 * 2 = 56 + 8 = 64.

Quando provavi a calcolare manualmente, per caso hai calcolato l'indirizzo finale dell'elemento nella posizione 5,5 mentre ti aspettavi che fosse l'indirizzo iniziale? È un errore comune, ti sto chiedendo perché non hai pubblicato come lo hai calcolato manualmente.

00 02 04 06 08 10 12
14 16 18 20 22 24 26
28 30 32 34 36 38 40
42 44 46 48 50 52 54
56 58 60 62 64 66 68
70 72 74 76 78 80 82
84 86 88 90 92 94 96

    
risposta data 17.12.2014 - 13:08
fonte
0

Un array multidimensionale si comporta come paging di n elementi. Supponiamo che tu abbia un set di due numeri a e b . Decidi che il tuo pageize dovrebbe essere 1 . Quindi trovi il primo elemento nella prima pagina e il secondo elemento nella seconda pagina.

Questo equivale a dire che hai un array di matrici ; ogni sottoarray contenente solo un elemento. Questo potrebbe anche essere pensato come una matrice monodimensionale.

Per ottenere l'elemento nesimo nella pagina mth , devi ora:

1) Dove iniziare il conteggio

2) Quali sono le dimensioni della pagina

Per ottenere il primo elemento (del set specificato sopra) sulla seconda pagina , devi sapere dove si trova il primo elemento. Da lì devi passare m volte il pageize (here = 1) in avanti. Allora sei sulla pagina m . Quindi prendi il primo elemento. Fatto.

Se hai a che fare con gli indirizzi di elementi o puntatori agli elementi , devi tenere conto della dimensione di questi elementi.

    
risposta data 18.10.2014 - 12:01
fonte
-2

La formula presuppone che gli indici dell'array siano basati su zero (il primo elemento è in posizione 0) ed è perfettamente corretto. Immagino che tu abbia commesso l'errore classico che facevamo tutti all'inizio contando dal punto 1, come mi ha fatto notare un collega più anziano la prima volta che l'ho fatto ...

    
risposta data 18.10.2014 - 07:41
fonte

Leggi altre domande sui tag