{"id":988,"date":"2021-02-04T21:41:00","date_gmt":"2021-02-04T20:41:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=988"},"modified":"2026-02-19T21:51:21","modified_gmt":"2026-02-19T20:51:21","slug":"tablice-dwuwymiarowe","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/c\/tablice\/tablice-dwuwymiarowe\/","title":{"rendered":"Tablice dwuwymiarowe"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Tablice pozwalaj\u0105 przechowywa\u0107 uporz\u0105dkowane dane w pami\u0119ci w spos\u00f3b ci\u0105g\u0142y i indeksowany. W przypadku danych tabelarycznych, macierzy, plansz czy siatek obliczeniowych pojedynczy indeks przestaje wystarcza\u0107. Wtedy stosuje si\u0119 struktur\u0119, w kt\u00f3rej element identyfikowany jest przez dwa indeksy &#8211; wiersz i kolumn\u0119. W j\u0119zykach niskopoziomowych oznacza to specyficzny spos\u00f3b organizacji pami\u0119ci oraz indeksowania. W dalszej cz\u0119\u015bci <strong>tablice dwuwymiarowe<\/strong> b\u0119d\u0105 analizowane g\u0142\u00f3wnie w kontek\u015bcie j\u0119zyka C.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis tre\u015bci<\/h2><nav><ol><li class=\"\"><a href=\"#tablice-dwuwymiarowe-jako-liniowy-obszar-pamieci-interpretowany-przez-dwa-indeksy\">Tablice dwuwymiarowe jako liniowy obszar pami\u0119ci interpretowany przez dwa indeksy<\/a><\/li><li class=\"\"><a href=\"#tablice-dwuwymiarowe-deklaracja-tworzenie-tablic-dwuwymiarowych-i-inicjalizacja\">Tablice dwuwymiarowe &#8211; deklaracja, tworzenie tablic dwuwymiarowych i inicjalizacja<\/a><ol><li class=\"\"><a href=\"#deklaracja-statyczna\">Deklaracja statyczna<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#uzupelnianie-tablic-dwuwymiarowych-przy-uzyciu-petli-zagniezdzonych\">Uzupe\u0142nianie tablic dwuwymiarowych przy u\u017cyciu p\u0119tli zagnie\u017cd\u017conych<\/a><\/li><li class=\"\"><a href=\"#tablice-dwuwymiarowe-przekazywane-do-funkcji-oraz-zaleznosc-od-znanego-rozmiaru-kolumn\">Tablice dwuwymiarowe przekazywane do funkcji oraz zale\u017cno\u015b\u0107 od znanego rozmiaru kolumn<\/a><\/li><li class=\"\"><a href=\"#tablice-wielowymiarowe-jako-uogolnienie-konstrukcji-dwuwymiarowej\">Tablice wielowymiarowe jako uog\u00f3lnienie konstrukcji dwuwymiarowej<\/a><\/li><li class=\"\"><a href=\"#tablica-dwuwymiarowa-w-c-oraz-roznice-wzgledem-c\">Tablica dwuwymiarowa w C++ oraz r\u00f3\u017cnice wzgl\u0119dem C<\/a><\/li><li class=\"\"><a href=\"#tablice-w-pythonie-i-tablica-w-pythonie-jako-struktura-list-zagniezdzonych\">tablice w pythonie i tablica w pythonie jako struktura list zagnie\u017cd\u017conych<\/a><\/li><li class=\"\"><a href=\"#typowe-bledy-przy-pracy-z-tablicami-dwuwymiarowymi\">Typowe b\u0142\u0119dy przy pracy z tablicami dwuwymiarowymi<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-dwuwymiarowe-jako-liniowy-obszar-pamieci-interpretowany-przez-dwa-indeksy\">Tablice dwuwymiarowe jako liniowy obszar pami\u0119ci interpretowany przez dwa indeksy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tablica dwuwymiarowa<\/strong> w C nie jest \u201etablic\u0105 tablic\u201d w sensie logicznym, lecz jednym ci\u0105g\u0142ym blokiem pami\u0119ci. Kompilator przelicza dwa indeksy na jedno przesuni\u0119cie wzgl\u0119dem pocz\u0105tku struktury.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deklaracja:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int macierz&#91;3]&#91;4];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">oznacza tablic\u0119 o 3 wierszach i 4 kolumnach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi <code>int<\/code> zajmuje 4 bajty, to ca\u0142a struktura zajmuje:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 * 4 * 4 = 48 bajt\u00f3w\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W pami\u0119ci dane u\u0142o\u017cone s\u0105 w kolejno\u015bci wierszami (row-major order):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>macierz&#91;0]&#91;0]\nmacierz&#91;0]&#91;1]\nmacierz&#91;0]&#91;2]\nmacierz&#91;0]&#91;3]\nmacierz&#91;1]&#91;0]\n...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dost\u0119p:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>macierz&#91;i]&#91;j]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">jest t\u0142umaczony przez kompilator na:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*( *(macierz + i) + j )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Indeksowanie dzia\u0142a wed\u0142ug wzoru:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>adres = baza + (i * liczba_kolumn + j) * sizeof(int)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Liczba kolumn musi by\u0107 znana kompilatorowi, aby m\u00f3g\u0142 obliczy\u0107 przesuni\u0119cie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-dwuwymiarowe-deklaracja-tworzenie-tablic-dwuwymiarowych-i-inicjalizacja\">Tablice dwuwymiarowe &#8211; deklaracja, tworzenie tablic dwuwymiarowych i inicjalizacja<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tworzenie tablic dwuwymiarowych mo\u017ce odbywa\u0107 si\u0119 statycznie lub dynamicznie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deklaracja-statyczna\">Deklaracja statyczna<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int macierz&#91;2]&#91;3];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inicjalizacja przy deklaracji:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int macierz&#91;2]&#91;3] = {\n    {1, 2, 3},\n    {4, 5, 6}\n};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cliwe jest r\u00f3wnie\u017c zapisanie liniowe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int macierz&#91;2]&#91;3] = {1, 2, 3, 4, 5, 6};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kompilator przypisze warto\u015bci kolejno wierszami.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi liczba element\u00f3w jest mniejsza ni\u017c rozmiar, pozosta\u0142e zostan\u0105 wyzerowane.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cna pomin\u0105\u0107 pierwszy wymiar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int macierz&#91;]&#91;3] = {\n    {1, 2, 3},\n    {4, 5, 6}\n};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nie mo\u017cna pomin\u0105\u0107 drugiego wymiaru &#8211; jest potrzebny do oblicze\u0144 adres\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uzupelnianie-tablic-dwuwymiarowych-przy-uzyciu-petli-zagniezdzonych\">Uzupe\u0142nianie tablic dwuwymiarowych przy u\u017cyciu p\u0119tli zagnie\u017cd\u017conych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uzupe\u0142nianie tablic dwuwymiarowych odbywa si\u0119 zwykle za pomoc\u0105 dw\u00f3ch p\u0119tli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n\nint main() {\n    int macierz&#91;2]&#91;3];\n\n    for (int i = 0; i &lt; 2; i++) {\n        for (int j = 0; j &lt; 3; j++) {\n            scanf(\"%d\", &amp;macierz&#91;i]&#91;j]);\n        }\n    }\n\n    for (int i = 0; i &lt; 2; i++) {\n        for (int j = 0; j &lt; 3; j++) {\n            printf(\"%d \", macierz&#91;i]&#91;j]);\n        }\n        printf(\"\\n\");\n    }\n\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zewn\u0119trzna p\u0119tla iteruje po wierszach, wewn\u0119trzna po kolumnach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zagnie\u017cd\u017cenie p\u0119tli jest naturaln\u0105 konsekwencj\u0105 dw\u00f3ch wymiar\u00f3w. Ka\u017cdy indeks odpowiada jednej p\u0119tli.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-dwuwymiarowe-przekazywane-do-funkcji-oraz-zaleznosc-od-znanego-rozmiaru-kolumn\">Tablice dwuwymiarowe przekazywane do funkcji oraz zale\u017cno\u015b\u0107 od znanego rozmiaru kolumn<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Przy przekazywaniu do funkcji nale\u017cy okre\u015bli\u0107 drugi wymiar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void wypisz(int m&#91;]&#91;3], int wiersze) {\n    for (int i = 0; i &lt; wiersze; i++) {\n        for (int j = 0; j &lt; 3; j++) {\n            printf(\"%d \", m&#91;i]&#91;j]);\n        }\n        printf(\"\\n\");\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alternatywnie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void wypisz(int (*m)&#91;3], int wiersze);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dlaczego drugi wymiar musi by\u0107 znany? Poniewa\u017c kompilator musi wiedzie\u0107, jak daleko przesun\u0105\u0107 wska\u017anik przy przej\u015bciu do kolejnego wiersza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi drugi wymiar nie jest znany, kompilator nie jest w stanie obliczy\u0107 poprawnego adresu elementu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-wielowymiarowe-jako-uogolnienie-konstrukcji-dwuwymiarowej\">Tablice wielowymiarowe jako uog\u00f3lnienie konstrukcji dwuwymiarowej<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tablice wielowymiarowe<\/strong> to rozszerzenie idei na wi\u0119cej ni\u017c dwa wymiary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int t&#91;2]&#91;3]&#91;4];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Rozmiar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 * 3 * 4 element\u00f3w\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Indeksowanie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>t&#91;i]&#91;j]&#91;k]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Obliczenie przesuni\u0119cia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>((i * 3 + j) * 4 + k)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cdy kolejny wymiar zwi\u0119ksza z\u0142o\u017cono\u015b\u0107 indeksowania, ale w pami\u0119ci dane nadal s\u0105 liniowe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce najcz\u0119\u015bciej stosowane s\u0105 dwa lub trzy wymiary (np. grafika 3D, przetwarzanie obraz\u00f3w).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablica-dwuwymiarowa-w-c-oraz-roznice-wzgledem-c\">Tablica dwuwymiarowa w C++ oraz r\u00f3\u017cnice wzgl\u0119dem C<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W C++ klasyczna sk\u0142adnia jest identyczna:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int macierz&#91;2]&#91;3];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dodatkowo mo\u017cna u\u017cy\u0107 kontenera <code>std::vector<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;vector&gt;\n\nstd::vector&lt;std::vector&lt;int&gt;&gt; macierz(2, std::vector&lt;int&gt;(3));\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tu ka\u017cdy wiersz jest osobnym wektorem. Pami\u0119\u0107 nie musi by\u0107 ci\u0105g\u0142a w ca\u0142ej strukturze.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnica jest istotna przy operacjach wymagaj\u0105cych jednego bloku pami\u0119ci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-w-pythonie-i-tablica-w-pythonie-jako-struktura-list-zagniezdzonych\">tablice w pythonie i tablica w pythonie jako struktura list zagnie\u017cd\u017conych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W Python nie istnieje klasyczna tablica dwuwymiarowa w sensie C. Stosuje si\u0119 listy zagnie\u017cd\u017cone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>macierz = &#91;\n    &#91;1, 2, 3],\n    &#91;4, 5, 6]\n]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dost\u0119p:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>macierz&#91;0]&#91;1]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jednak <strong>tablica w pythonie<\/strong> jest struktur\u0105 dynamiczn\u0105. Wiersze mog\u0105 mie\u0107 r\u00f3\u017cne d\u0142ugo\u015bci:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>macierz = &#91;\n    &#91;1, 2],\n    &#91;3, 4, 5]\n]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W C taka konstrukcja nie by\u0142aby poprawn\u0105 klasyczn\u0105 tablic\u0105 dwuwymiarow\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie pami\u0119\u0107 nie musi by\u0107 ci\u0105g\u0142a, a zarz\u0105dzanie pami\u0119ci\u0105 odbywa si\u0119 automatycznie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-bledy-przy-pracy-z-tablicami-dwuwymiarowymi\">Typowe b\u0142\u0119dy przy pracy z tablicami dwuwymiarowymi<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Zamiana liczby wierszy i kolumn.<\/li>\n\n\n\n<li>Wyj\u015bcie poza zakres indeksu.<\/li>\n\n\n\n<li>Niezgodno\u015b\u0107 deklaracji przy przekazywaniu do funkcji.<\/li>\n\n\n\n<li>B\u0142\u0119dne obliczenie rozmiaru przy dynamicznej alokacji.<\/li>\n\n\n\n<li>Pr\u00f3ba u\u017cycia niezainicjalizowanej macierzy.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Wyj\u015bcie poza zakres w C skutkuje niezdefiniowanym zachowaniem. Mo\u017ce nadpisa\u0107 s\u0105siednie dane w pami\u0119ci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przy dynamicznej alokacji cz\u0119sto pope\u0142nia si\u0119 b\u0142\u0105d polegaj\u0105cy na alokacji wska\u017anik\u00f3w bez alokacji w\u0142a\u015bciwych wierszy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tablice dwuwymiarowe s\u0105 logicznym rozszerzeniem jednowymiarowych struktur danych i wymagaj\u0105 zrozumienia sposobu liniowego przechowywania danych w pami\u0119ci. Ka\u017cdy dodatkowy wymiar oznacza dodatkowy poziom przeliczania indeks\u00f3w na przesuni\u0119cia adresowe. Precyzyjne rozumienie tego mechanizmu jest niezb\u0119dne przy pracy z algorytmami macierzowymi, przetwarzaniem obraz\u00f3w oraz strukturami danych o charakterze tabelarycznym.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tablice pozwalaj\u0105 przechowywa\u0107 uporz\u0105dkowane dane w pami\u0119ci w spos\u00f3b ci\u0105g\u0142y i indeksowany. W przypadku danych tabelarycznych, macierzy, plansz czy siatek obliczeniowych pojedynczy indeks przestaje wystarcza\u0107. Wtedy stosuje si\u0119 struktur\u0119, w kt\u00f3rej element identyfikowany jest przez dwa indeksy &#8211; wiersz i kolumn\u0119. W j\u0119zykach niskopoziomowych oznacza to specyficzny spos\u00f3b organizacji pami\u0119ci oraz indeksowania. W dalszej cz\u0119\u015bci tablice dwuwymiarowe b\u0119d\u0105 analizowane g\u0142\u00f3wnie w kontek\u015bcie j\u0119zyka C. Tablice dwuwymiarowe jako liniowy obszar pami\u0119ci interpretowany przez dwa indeksy Tablica dwuwymiarowa w C nie jest \u201etablic\u0105 tablic\u201d w sensie logicznym, lecz jednym ci\u0105g\u0142ym blokiem pami\u0119ci. Kompilator przelicza dwa indeksy na jedno przesuni\u0119cie wzgl\u0119dem pocz\u0105tku struktury. Deklaracja: oznacza tablic\u0119 o 3 wierszach i 4 kolumnach. Je\u017celi int zajmuje 4 bajty, to ca\u0142a struktura zajmuje: W pami\u0119ci dane u\u0142o\u017cone s\u0105 w kolejno\u015bci wierszami (row-major order): Dost\u0119p: jest t\u0142umaczony przez kompilator na: Indeksowanie dzia\u0142a wed\u0142ug wzoru: Liczba kolumn musi by\u0107 znana kompilatorowi, aby m\u00f3g\u0142 obliczy\u0107 przesuni\u0119cie. Tablice dwuwymiarowe &#8211; deklaracja, tworzenie tablic dwuwymiarowych i inicjalizacja Tworzenie tablic dwuwymiarowych mo\u017ce odbywa\u0107 si\u0119 statycznie lub dynamicznie. Deklaracja statyczna Inicjalizacja przy deklaracji: Mo\u017cliwe jest r\u00f3wnie\u017c zapisanie liniowe: Kompilator przypisze warto\u015bci kolejno wierszami. Je\u017celi liczba element\u00f3w jest mniejsza ni\u017c rozmiar, pozosta\u0142e zostan\u0105 wyzerowane. Mo\u017cna pomin\u0105\u0107 pierwszy wymiar: Nie mo\u017cna pomin\u0105\u0107 drugiego wymiaru &#8211; jest potrzebny do oblicze\u0144 adres\u00f3w. Uzupe\u0142nianie tablic dwuwymiarowych przy u\u017cyciu p\u0119tli zagnie\u017cd\u017conych Uzupe\u0142nianie tablic dwuwymiarowych odbywa si\u0119 zwykle za pomoc\u0105 dw\u00f3ch p\u0119tli. Przyk\u0142ad: Zewn\u0119trzna p\u0119tla iteruje po wierszach, wewn\u0119trzna po kolumnach. Zagnie\u017cd\u017cenie p\u0119tli jest naturaln\u0105 konsekwencj\u0105 dw\u00f3ch wymiar\u00f3w. Ka\u017cdy indeks odpowiada jednej p\u0119tli. Tablice dwuwymiarowe przekazywane do funkcji oraz zale\u017cno\u015b\u0107 od znanego rozmiaru kolumn Przy przekazywaniu do funkcji nale\u017cy okre\u015bli\u0107 drugi wymiar: Alternatywnie: Dlaczego drugi wymiar musi by\u0107 znany? Poniewa\u017c kompilator musi wiedzie\u0107, jak daleko przesun\u0105\u0107 wska\u017anik przy przej\u015bciu do kolejnego wiersza. Je\u017celi drugi wymiar nie jest znany, kompilator nie jest w stanie obliczy\u0107 poprawnego adresu elementu. Tablice wielowymiarowe jako uog\u00f3lnienie konstrukcji dwuwymiarowej Tablice wielowymiarowe to rozszerzenie idei na wi\u0119cej ni\u017c dwa wymiary. Przyk\u0142ad: Rozmiar: Indeksowanie: Obliczenie przesuni\u0119cia: Ka\u017cdy kolejny wymiar zwi\u0119ksza z\u0142o\u017cono\u015b\u0107 indeksowania, ale w pami\u0119ci dane nadal s\u0105 liniowe. W praktyce najcz\u0119\u015bciej stosowane s\u0105 dwa lub trzy wymiary (np. grafika 3D, przetwarzanie obraz\u00f3w). Tablica dwuwymiarowa w C++ oraz r\u00f3\u017cnice wzgl\u0119dem C W C++ klasyczna sk\u0142adnia jest identyczna: Dodatkowo mo\u017cna u\u017cy\u0107 kontenera std::vector: Tu ka\u017cdy wiersz jest osobnym wektorem. Pami\u0119\u0107 nie musi by\u0107 ci\u0105g\u0142a w ca\u0142ej strukturze. R\u00f3\u017cnica jest istotna przy operacjach wymagaj\u0105cych jednego bloku pami\u0119ci. tablice w pythonie i tablica w pythonie jako struktura list zagnie\u017cd\u017conych W Python nie istnieje klasyczna tablica dwuwymiarowa w sensie C. Stosuje si\u0119 listy zagnie\u017cd\u017cone. Przyk\u0142ad: Dost\u0119p: Jednak tablica w pythonie jest struktur\u0105 dynamiczn\u0105. Wiersze mog\u0105 mie\u0107 r\u00f3\u017cne d\u0142ugo\u015bci: W C taka konstrukcja nie by\u0142aby poprawn\u0105 klasyczn\u0105 tablic\u0105 dwuwymiarow\u0105. W Pythonie pami\u0119\u0107 nie musi by\u0107 ci\u0105g\u0142a, a zarz\u0105dzanie pami\u0119ci\u0105 odbywa si\u0119 automatycznie. Typowe b\u0142\u0119dy przy pracy z tablicami dwuwymiarowymi Wyj\u015bcie poza zakres w C skutkuje niezdefiniowanym zachowaniem. Mo\u017ce nadpisa\u0107 s\u0105siednie dane w pami\u0119ci. Przy dynamicznej alokacji cz\u0119sto pope\u0142nia si\u0119 b\u0142\u0105d polegaj\u0105cy na alokacji wska\u017anik\u00f3w bez alokacji w\u0142a\u015bciwych wierszy. Tablice dwuwymiarowe s\u0105 logicznym rozszerzeniem jednowymiarowych struktur danych i wymagaj\u0105 zrozumienia sposobu liniowego przechowywania danych w pami\u0119ci. Ka\u017cdy dodatkowy wymiar oznacza dodatkowy poziom przeliczania indeks\u00f3w na przesuni\u0119cia adresowe. Precyzyjne rozumienie tego mechanizmu jest niezb\u0119dne przy pracy z algorytmami macierzowymi, przetwarzaniem obraz\u00f3w oraz strukturami danych o charakterze tabelarycznym.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":980,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-988","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=988"}],"version-history":[{"count":2,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/988\/revisions"}],"predecessor-version":[{"id":994,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/988\/revisions\/994"}],"up":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/980"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}