Come funziona un accesso dinamico all'array?

-2

In C se dichiaro

 int x[4]

Che mi dice che è un array intero con ogni dimensione di elemento dell'array fissa di dimensione 4.

Quindi dopo l'inizializzazione quando accedo a x [3]: indirizzo della dimensione dell'array + element che è 2 * index = > (x [3] = 2000 + 2 * 3) Supponendo che 2000 sia l'indirizzo dell'array

In Javascript

Abbiamo

var a=[3,"rohan",6] //Dynamically typed

Qui gli elementi dell'array non sono ugualmente dimensionati per eg.a [2] è una stringa la cui dimensione dell'elemento è diversa da un [0] che è un numero intero

Quindi come funziona l'accesso all'array?

    
posta Mohan Pierce 12.06.2018 - 13:48
fonte

2 risposte

2

Nelle lingue dinamiche, tutti i valori sono in genere implementati come oggetti con una base comune (o puntatori a strutture con un'intestazione comune, in cui l'intestazione descrive il tipo). L'effetto è che possiamo passare i puntatori a questi valori intorno, e tutti i puntatori hanno le stesse dimensioni. La matrice quindi contiene i puntatori ai valori effettivi.

es. un oggetto array a = [3, "rohan", 6] potrebbe essere implementato in questo modo:

| a
v
+--------+---------+------+-----+
| header | storage | size | cap |
+--------+-|-------+------+-----+
           |
           v
           +---+---+---+
           |   |   |   | (this memory is the "C array")
           +-|-+-|-+-|-+
.------------'   |   |
v                |   v
+--------+---+   |   +--------+---+
| header | 3 |   |   | header | 6 |
+--------+---+   |   +--------+---+
                 v
                 +--------+------+---------+
                 | header | size | "rohan" |
                 +--------+------+---------+

I layout di oggetti equivalenti a questo sono anche usati da Perl, CPython o OpenJDK (L'equivalente Java sarebbe qualcosa come Object[] a = { new Integer(3), "rohan", new Integer(6) }; )

    
risposta data 12.06.2018 - 14:45
fonte
0

Gli array JS non sono come i tuoi primitivi array C; sono Oggetti: un elenco di coppie chiave, valore con qualche sintassi speciale per farlo apparire e comportarsi come una matrice.

    
risposta data 12.06.2018 - 14:02
fonte

Leggi altre domande sui tag