Vediamo il seguente esempio:
Questi 3 array 1D possono essere rappresentati come un array 2D come segue:
Vediamo un altro esempio:
Questi 3 array 1D non possono rappresentare come un array 2D perché le dimensioni degli array sono diverse.
Dichiarazione di array 2D
tipo di dati Array-Name[RIGA] [COL"
int a [2] [3];
Usando il codice C sopra, possiamo dichiarare un numero intero vettore, UN di dimensioni 2*3 (2 righe e 3 colonne).
Char B [3] [2];
Usando il codice C sopra, possiamo dichiarare a carattere vettore, B di dimensioni 2*3 (3 righe e 2 colonne).
Inizializzazione di array 2D
Possiamo inizializzare durante la dichiarazione nei seguenti modi:
Si noti che in 2 e 4 non abbiamo menzionato il 1st Sobbrotteria. Il compilatore C calcola automaticamente il numero di righe dal numero di elementi. Ma il 2nd Il pedice deve essere specificato. Le seguenti inizializzazioni non sono valide:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //Esempio 1.C #includere #define riga 3 #define col 2 int main () int i, j; int a [riga] [col] = 1,2, 3,4, 5,6 ; printf ("elementi saggi di riga dell'array a sono: \ n"); per (i = 0; i printf ("riga %d:", i); per (j = 0; j printf (" %d", a [i] [j]); printf ("\ n"); printf ("\ n \ nColumn Elements of the Array a are: \ n"); per (i = 0; i printf ("colonna %d:", i); per (j = 0; j printf (" %d", a [j] [i]); printf ("\ n"); restituzione 0; |
Nell'esempio1.C, abbiamo dichiarato una matrice intera di dimensione 3*2 e inizializzato. Per accedere agli elementi dell'array, ne usiamo due per loop.
Per accedere a riga, il ciclo esterno è per le righe e il ciclo interno è per le colonne.
Per accedere a colonna, il ciclo esterno è per le colonne e il ciclo interno è per le righe.
Si noti che quando dichiariamo un array 2D, utilizziamo un [2] [3], che significa 2 righe e 3 colonne. L'indicizzazione dell'array inizia da 0. Per accedere al 2nd riga e 3Rd colonna, dobbiamo usare la notazione A [1] [2].
Mappatura della memoria di un array 2D
La vista logica di un array A [3] [2] può essere il seguente:
La memoria del computer è una sequenza 1D di byte. In lingua C, un negozio di array 2D nella memoria in Ordine di riga-Major. Alcuni altri linguaggi di programmazione (E.G., Fortran), memorizza in Ordine di colonna-Major nella memoria.
Puntatore aritmetico di un array 2d
Per capire l'aritmetica puntatore dell'array 2D, prima, dai un'occhiata all'array 1D.
Considera un array 1D:
In un array 1D, UN è una costante e il suo valore è l'indirizzo di 0th Posizione dell'array a [5]. Valore di A+1 è l'indirizzo del 1st Posizione dell'array a [5]. a+i è l'indirizzo del ioth Posizione dell'array.
Se incrediamo UN di 1, è incrementato dalla dimensione del tipo di dati.
a [1] è equivalente a *(a+1)
a [2] è equivalente a *(a+2)
a [i] è equivalente a *(a+i)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Esempio2.C #includere #define riga 3 #define col 2 int main () int a [5] = 10,20,30,40,50; printf ("sizeof (int): %ld \ n \ n", sizeof (int)); printf ("a: %p \ n", a); printf ("a+1: %p \ n", a+1); printf ("a+2: %p \ n \ n", a+2); printf ("a [1]: %d, *(a+1): %d \ n", a [1], *(a+1)); printf ("a [2]: %d, *(a+2): %d \ n", a [1], *(a+1)); printf ("a [3]: %d, *(a+3): %d \ n", a [1], *(a+1)); restituzione 0; |
Nell'esempio2.C, l'indirizzo di memoria viene visualizzato in esadecimale. La differenza tra A e A+1 è 4, che ha la dimensione di un numero intero in byte.
Ora, considera un array 2D:
B è un puntatore di tipo: int [] [4] O int (*) [4]
int [] [4] è una fila di 4 interi. Se incrediamo B di 1, è incrementato dalla dimensione della riga.
B è l'indirizzo del 0th riga.
B+1 è l'indirizzo del 1st riga.
b+i è l'indirizzo di ioth riga.
La dimensione di una riga è: (Numero di colonna * sizeof (tipo di dati)) byte
La dimensione di una fila di un array intero b [3] [4] è: 4 * sizeof (int) = 4 * 4 = 16 byte
Una fila di un array 2D può essere vista come un array 1D. B è l'indirizzo del 0th riga. Quindi, otteniamo quanto segue
Indirizzo di B [i] [j]: B + sizeof (tipo di dati) * (numero di colonna * i + j)
Considera un array 2D: int b [3] [4]
L'indirizzo di B [2] [1] è : B + sizeof (int) * (4 * 2 + 1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // Esempio3.C #includere #define riga 3 #define col 4 int main () int i, j; int b [row] [col] = 10,20,30,40, 50,60,70,80, 90.100.110.120 ; printf ("sizeof (int): %ld \ n", sizeof (int)); printf ("dimensione di una riga: %ld \ n", col*sizeof (int)); printf ("b: %p \ n", b); printf ("b+1: %p \ n", b+1); printf ("b+2: %p \ n", b+2); printf ("*b: %p \ n",*b); printf ("*b+1: %p \ n",*b+1); printf ("*b+2: %p \ n",*b+2); printf ("b [0] [0]: %d ** b: %d \ n", b [0] [0], ** b); printf ("b [0] [1]: %d*(*b+1): %d \ n", b [0] [1],*(*b+1)); printf ("b [0] [2]: %d*(*b+2): %d \ n", b [0] [2],*(*b+2)); printf ("b [1] [0]: %d*(*(b+1)): %d \ n", b [1] [0],*(*(b+1))); printf ("b [1] [1]: %d*(*(b+1) +1): %d \ n", b [1] [1],*(*(b+1) +1) ); restituzione 0; |
Nell'esempio3.C, abbiamo visto quella dimensione di una riga è 16 in notazione decimale. La differenza tra B+1 e B è 10 in esadecimale. 10 in esadecimale equivale a 16 in decimale.
Conclusione
Quindi, in questo articolo, abbiamo imparato
Ora possiamo usare l'array 2D nel nostro programma C senza dubbio,
Riferimenti
Il merito di alcune idee in questo lavoro è stato ispirato dal corso, dai puntatori e dalle array 2-D, dal Dipartimento di Informatica e Engg di Palash Dey. Indian Institute of Technology Kharagpur