---
# System prepended metadata

title: Tablice dwuwymiarowe
tags: [Zajęcia SP76]

---

###### tags: `Zajęcia SP76`

# Tablice dwuwymiarowe

Tablice dwuwymiarowe pozwalają nam przechowywać zestawy danych, ale nie tak jak w zwykłej tablicy gdzie możemy przechowywać dane w ciągu, teraz możemy identyfikować dane po kolumnach i wierszach.

## Jak utowrzyć i używać takiej tablicy?

```cpp=
// W celu utowrzenia piszemy:
int tab[N][M]; // gdzie int to typ, N to liczba wierszy, a M kolumn
// różnice między deklaracją w funkcji oraz poza funkcją przedstawiłem w FAQ

// ...

tab[x][y] = 5; // do wiersza x oraz kolumny y, przypisujemy 5

func(4, tab[3]); // do funkcji func, jako drugi arguemnt przekazujemy trzeci wiersz tablicy. Ten wiersz będzie tablicą jednowymiarową.
```

Ten efekt da się również uzyskać na zwykłej tablicy gdzie zamiast odwoływać się do komórki **tab[row][col]** odwołujemy się do komórki **tab[row * n + col]**, gdzie $n$ to długość wiersza (aka ilość kolumn, czyli u nas $M$). Tak naprawdę to tablica dwuwymiarowa też jest tablicą jednowymiarową, kolejne wiersze leżą jeden za drugim w długiej tablicy jednowymiarowej.

Inaczej możemy to zinterpretować tak, że powstaje tablica jednowymiarowa, która ma N komórek, a w każdej komórce znajduje się kolejna tablica, która tym razem ma M komórek.

Stąd też, jak już może część z was zauważyła, jeżeli czasem czytacie błędy które kompilator wam wypisuje, typ tablicy dwuwymiarowej int **tab[N][M]** to **int****.

**int*** to typ zestawu danych, można pwoiedzieć **wskaźnik** na pamięć, w której są przechowywane inty, zatem **int**** to zestaw zestawów danych.

## Film

Dla ciekawych, więcej o tych ułożeniach danych oraz tych dziwnych gwiazdkach możecie objerzeć na kanale **The Cherno**.

[LINK!](https://youtu.be/gNgUMA_Ur0U)

:::info
Uwaga: Cherno używa w tym filmie notacji:
```cpp=
int* tab = new int[n];
```

Jest to prawie to samo, jakbyście zadeklarowali tablicę poza funkcją (w obu przypadkach jest deklarowana na stercie).

Dla uproszczenia możecie przyjąć, że Cherno w tych momentach pisze:
```cpp=
int tab[n];
```
:::