Tablica 2d

Tablica 2d
Tablica dwuwymiarowa (2D) to tablica jednowymiarowej (1D) tablic (1D). Rozmiary tablicy 1D są równe. Tablica 2D jest również nazywana matrycą z rzędami i kolumnami.

Zobaczmy następujący przykład:

Te 3 tablice 1D można reprezentować jako tablicę 2D w następujący sposób:

Zobaczmy inny przykład:

Te 3 tablice 1D nie mogą być reprezentowane jako tablica 2D, ponieważ rozmiary tablic są różne.

Deklaracja tablicy 2D

typ danych nazwa tablicy[[[WIERSZ] [PRZEŁĘCZ]

  • Typ danych to rodzaj danych elementów tablicy.
  • Nazwa tablicy to nazwa tablicy.
  • Dwa indeksy dolne reprezentują liczbę wierszy i kolumn tablicy. Całkowita liczba elementów tablicy będzie rzędem*col.

int a [2] [3];

Korzystając z powyższego kodu C, możemy zadeklarować liczba całkowita szyk, A wielkościowy 2*3 (2 rzędy i 3 kolumny).

char b [3] [2];

Korzystając z powyższego kodu C, możemy zadeklarować postać szyk, B wielkościowy 2*3 (3 wiersze i 2 kolumny).

Inicjalizacja tablicy 2D

Możemy zainicjować podczas deklaracji na następujący sposób:

  1. int a [3] [2] = 1,2,3,4,5,6;
  2. int a [] [2] = 1,2,3,4,5,6;
  3. int a [3] [2] = 1, 2, 3, 4, 5, 6;
  4. int a [] [2] = 1, 2, 3, 4, 5, 6;

Zauważ, że w 2 i 4 nie wspominaliśmy o 1St indeks. Kompilator C automatycznie oblicza liczbę wierszy na podstawie liczby elementów. Ale 2Nd Należy określić indeks dolny. Po inicjalizacji są nieprawidłowe:

  1. int a [3] [] = 1,2,3,4,5,6;
  2. int a [] [] = 1,2,3,4,5,6;
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
//Przykład 1.C
#włączać
#definicja wiersza 3
#definicja col 2
int main ()

int I, J;
int a [wiersz] [col] =
1,2,
3,4,
5,6
;
printf („W mądre elementy tablicy A są: \ n”);
dla (i = 0; i
printf („Row %d:”, i);
dla (j = 0; j
printf („ %d”, a [i] [j]);

printf („\ n”);

printf ("\ n \ ncolumn mądre elementy tablicy a są: \ n");
dla (i = 0; i
printf („kolumna %d:”, i);
dla (j = 0; j
printf („ %d”, a [j] [i]);

printf („\ n”);

powrót 0;

W przykładzie1.c, zadeklarowaliśmy zestaw liczb całkowitych o rozmiarze 3*2 i zainicjowaliśmy. Aby uzyskać dostęp do elementów tablicy, używamy dwóch do pętli.

Aby uzyskać dostęp do wiersza, zewnętrzna pętla dotyczy wierszy, a wewnętrzna pętla jest przeznaczona do kolumn.

Aby uzyskać dostęp do kolumn, zewnętrzna pętla dotyczy kolumn, a wewnętrzna pętla dotyczy wierszy.

Zauważ, że kiedy deklarujemy tablicę 2D, używamy [2] [3], co oznacza 2 wiersze i 3 kolumny. Indeksowanie tablicy rozpoczyna się od 0. Aby uzyskać dostęp do 2Nd Rząd i 3r & D Kolumna, musimy użyć notacji A [1] [2].

Mapowanie pamięci tablicy 2D

Logiczny widok tablicy A [3] [2] może być następujące:

Pamięć komputera to sekwencja 1D bajtów. W języku C, sklep z tablicą 2D w pamięci w Zamówienie szeregu. Niektóre inne języki programowania (e.G., Fortran), przechowuje KOLUMNE MAJOR ZAMÓWIENIE w pamięci.

Wskaźnik arytmetyki tablicy 2D

Aby zrozumieć arytmetykę wskaźnika tablicy 2D, najpierw spójrz na tablicę 1D.

Rozważ tablicę 1D:

W 1d tablic, A jest stała, a jego wartością jest adres 0th Lokalizacja tablicy a [5]. Wartość A+1 to adres 1St Lokalizacja tablicy a [5]. A+i jest adresem Ith Lokalizacja tablicy.

Jeśli zwiększymy A o 1 jest zwiększany o rozmiar typu danych.

a [1] jest równa *(A+1)

a [2] jest równa *(A+2)

a [i] jest równa *(A+i)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Przykład2.C
#włączać
#definicja wiersza 3
#definicja 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));
powrót 0;

W przykładzie2.C, adres pamięci wyświetla się po heksadecimal. Różnica między A i A+1 wynosi 4, czyli wielkość liczby całkowitej w bajtach.

Teraz rozważ tablicę 2D:

B jest wskaźnikiem typu: int [] [4] Lub int (*) [4]

int [] [4] to rząd 4 liczb całkowitych. Jeśli zwiększamy B o 1, jest on zwiększany o rozmiar wiersza.

B jest adresem 0th wiersz.

B+1 jest adresem 1St wiersz.

B+i jest adresem Ith wiersz.

Rozmiar rzędu to: (Liczba kolumny * sizeof (typ danych)) bajty

Rozmiar rzędu tablicy całkowitej B [3] [4] to: 4 * sizeof (int) = 4 * 4 = 16 bajtów

Rząd tablicy 2D może być postrzegany jako tablica 1D. B jest adresem 0th wiersz. Tak więc otrzymujemy następujące

  • *B+1 jest adresem 1St element 0th
  • *B+J jest adresem Jth element 0th
  • *(b+i) jest adresem 0th element Ith
  • *(b+i)+j jest adresem Jth element Ith
  • B [0] [0] jest równoważne ** B
  • B [0] [1] jest równoważne *( *b+1)
  • B [1] [0] jest równoważne *( *(B+1))
  • B [1] [1] jest równoważne *( *(B+1) +1)
  • B [i] [j] jest równoważne *( *(b+i)+j)

Adres B [i] [J]: B + sizeof (typ danych) * (liczba kolumny * i + j)

Rozważ tablicę 2D: int b [3] [4]

Adres b [2] [1] jest : 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
// Przykład3.C
#włączać
#definicja wiersza 3
#definicja kol. 4
int main ()

int I, J;
int b [wiersz] [col] =
10,20,30,40,
50,60,70,80,
90,100,110,120
;
printf („sizeof (int): %ld \ n”, sizeof (int));
printf („Rozmiar wiersza: %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) );
powrót 0;

W przykładzie3.c, widzieliśmy, że rozmiar rzędu wynosi 16 w notacji dziesiętnej. Różnica między B+1 i B wynosi 10 w heksadecimal. 10 po sześciokadcice jest równoważne 16 w dziesięciu.

Wniosek

W tym artykule dowiedzieliśmy się o

  1. Deklaracja tablicy 2D
  2. Inicjalizacja tablicy 2D
  3. Mapowanie pamięci tablicy 2D
  4. Wskaźnik arytmetyki tablicy 2D

Teraz możemy bez wątpienia użyć tablicy 2D w naszym programie C,

Bibliografia

Uznanie za niektóre pomysły w tej pracy zostały zainspirowane kursem, wskazówkami i tablicami 2D, przez Palash Dey Department of Computer Science & Engg. Indian Institute of Technology Kharagpur