{"id":980,"date":"2021-02-04T21:45:00","date_gmt":"2021-02-04T20:45:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=980"},"modified":"2026-02-19T21:23:17","modified_gmt":"2026-02-19T20:23:17","slug":"tablice","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/c\/tablice\/","title":{"rendered":"Tablice"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Tablica C<\/strong> jest jedn\u0105 z podstawowych struktur danych w j\u0119zykach proceduralnych. Umo\u017cliwia przechowywanie wielu element\u00f3w tego samego typu w ci\u0105g\u0142ym obszarze pami\u0119ci. W kontek\u015bcie j\u0119zyk\u00f3w niskiego poziomu jej zrozumienie wymaga spojrzenia zar\u00f3wno na sk\u0142adni\u0119, jak i na model pami\u0119ci. W j\u0119zykach takich jak C i C++ tablica nie jest obiektem z dodatkowymi informacjami &#8211; to po prostu blok kolejnych kom\u00f3rek pami\u0119ci. W dalszej cz\u0119\u015bci notatek poj\u0119cie tablic b\u0119dzie rozpatrywane g\u0142\u00f3wnie na gruncie C oraz 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-jako-ciagly-blok-pamieci-i-zaleznosc-miedzy-indeksem-a-adresem\">Tablice jako ci\u0105g\u0142y blok pami\u0119ci i zale\u017cno\u015b\u0107 mi\u0119dzy indeksem a adresem<\/a><\/li><li class=\"\"><a href=\"#tablica-c-definicja-wlasnosci-i-zachowanie-w-kontekscie-wskaznikow\">Tablica C &#8211; definicja, w\u0142asno\u015bci i zachowanie w kontek\u015bcie wska\u017anik\u00f3w<\/a><\/li><li class=\"\"><a href=\"#deklaracja-tablicy-c-oraz-inicjalizacja-statyczna-i-dynamiczna\">Deklaracja tablicy C oraz inicjalizacja statyczna i dynamiczna<\/a><ol><li class=\"\"><a href=\"#tablica-dynamiczna-w-c\">Tablica dynamiczna w C<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#tablice-c-i-przekazywanie-do-funkcji-oraz-utrata-informacji-o-rozmiarze\">Tablice C i przekazywanie do funkcji oraz utrata informacji o rozmiarze<\/a><\/li><li class=\"\"><a href=\"#tablice-w-jezyku-c-a-tablice-wielowymiarowe-i-sposob-ich-przechowywania\">Tablice w j\u0119zyku C a tablice wielowymiarowe i spos\u00f3b ich przechowywania<\/a><\/li><li class=\"\"><a href=\"#tablica-char-jako-reprezentacja-napisu-i-zakonczenie-znakiem-null\">Tablica char jako reprezentacja napisu i zako\u0144czenie znakiem null<\/a><\/li><li class=\"\"><a href=\"#wprowadzanie-danych-do-tablicy-przy-uzyciu-petli-i-funkcji-wejscia\">wprowadzanie danych do tablicy przy u\u017cyciu p\u0119tli i funkcji wej\u015bcia<\/a><\/li><li class=\"\"><a href=\"#porownanie-implementacji-tablic-w-c-c-i-python\">Por\u00f3wnanie implementacji tablic w C, C++ i Python<\/a><ol><li class=\"\"><a href=\"#c\">C++<\/a><\/li><li class=\"\"><a href=\"#python\">Python<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#typowe-bledy-przy-pracy-z-tablicami-i-konsekwencje-naruszenia-pamieci\">Typowe b\u0142\u0119dy przy pracy z tablicami i konsekwencje naruszenia pami\u0119ci<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-jako-ciagly-blok-pamieci-i-zaleznosc-miedzy-indeksem-a-adresem\">Tablice jako ci\u0105g\u0142y blok pami\u0119ci i zale\u017cno\u015b\u0107 mi\u0119dzy indeksem a adresem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tablica to uporz\u0105dkowany zbi\u00f3r element\u00f3w jednego typu, przechowywanych obok siebie w pami\u0119ci. Je\u017celi pierwszy element znajduje si\u0119 pod adresem <code>A<\/code>, to kolejny znajduje si\u0119 pod adresem <code>A + sizeof(typ)<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla przyk\u0142adu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int tab&#91;4] = {10, 20, 30, 40};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zak\u0142adaj\u0105c, \u017ce <code>int<\/code> zajmuje 4 bajty, rozmieszczenie w pami\u0119ci b\u0119dzie wygl\u0105da\u0107 logicznie tak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tab[0] \u2192 adres A<\/li>\n\n\n\n<li>tab[1] \u2192 A + 4<\/li>\n\n\n\n<li>tab[2] \u2192 A + 8<\/li>\n\n\n\n<li>tab[3] \u2192 A + 12<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Indeks jest wi\u0119c tylko wygodnym sposobem obliczania przesuni\u0119cia wzgl\u0119dem pocz\u0105tku tablicy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wa\u017cne: j\u0119zyk C nie przechowuje informacji o d\u0142ugo\u015bci tablicy. Kompilator zna j\u0105 tylko w miejscu deklaracji. Po przekazaniu do funkcji tablica \u201edegeneruje\u201d do wska\u017anika.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablica-c-definicja-wlasnosci-i-zachowanie-w-kontekscie-wskaznikow\">Tablica C &#8211; definicja, w\u0142asno\u015bci i zachowanie w kontek\u015bcie wska\u017anik\u00f3w<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tablica C to konstrukcja statyczna o ustalonej liczbie element\u00f3w, okre\u015blonej w czasie kompilacji (z wyj\u0105tkiem VLA w standardzie C99). Jej nazwa jest w wi\u0119kszo\u015bci kontekst\u00f3w traktowana jak wska\u017anik do pierwszego elementu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int tab&#91;5];\nint *p = tab;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tab<\/code> jest adresem pierwszego elementu (<code>&amp;tab[0]<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Istnieje subtelna r\u00f3\u017cnica:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>tab<\/code> &#8211; typ: \u201etablica 5 element\u00f3w int\u201d<\/li>\n\n\n\n<li><code>&amp;tab<\/code> &#8211; wska\u017anik do ca\u0142ej tablicy<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To ma znaczenie przy operacjach arytmetycznych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rozmiar tablicy mo\u017cna obliczy\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int n = sizeof(tab) \/ sizeof(tab&#91;0]);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dzia\u0142a to tylko w tym samym zakresie, w kt\u00f3rym tablica zosta\u0142a zadeklarowana.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deklaracja-tablicy-c-oraz-inicjalizacja-statyczna-i-dynamiczna\">Deklaracja tablicy C oraz inicjalizacja statyczna i dynamiczna<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deklaracja tablicy C wymaga podania typu oraz liczby element\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podstawowa forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int liczby&#91;10];\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 liczby&#91;5] = {1, 2, 3, 4, 5};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cliwe jest pomini\u0119cie rozmiaru, gdy podajemy inicjalizator:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int liczby&#91;] = {1, 2, 3};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kompilator sam ustali d\u0142ugo\u015b\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi inicjalizator jest kr\u00f3tszy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int liczby&#91;5] = {1, 2};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pozosta\u0142e elementy zostan\u0105 wyzerowane.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tablica-dynamiczna-w-c\">Tablica dynamiczna w C<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamiczna alokacja:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdlib.h&gt;\n\nint *tab = malloc(10 * sizeof(int));\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po zako\u0144czeniu pracy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>free(tab);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Brak <code>free<\/code> prowadzi do wycieku pami\u0119ci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-c-i-przekazywanie-do-funkcji-oraz-utrata-informacji-o-rozmiarze\">Tablice C i przekazywanie do funkcji oraz utrata informacji o rozmiarze<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy przekazujemy tablic\u0119 do funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void wypisz(int t&#91;], int n) {\n    for (int i = 0; i &lt; n; i++) {\n        printf(\"%d\\n\", t&#91;i]);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Parametr <code>t[]<\/code> jest r\u00f3wnowa\u017cny <code>int *t<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Informacja o d\u0142ugo\u015bci nie jest przekazywana automatycznie, dlatego zawsze nale\u017cy przekazywa\u0107 rozmiar jako osobny argument.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty b\u0142\u0105d:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void f(int t&#91;]) {\n    int n = sizeof(t) \/ sizeof(t&#91;0]);\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj <code>sizeof(t)<\/code> zwr\u00f3ci rozmiar wska\u017anika, a nie ca\u0142ej tablicy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablice-w-jezyku-c-a-tablice-wielowymiarowe-i-sposob-ich-przechowywania\">Tablice w j\u0119zyku C a tablice wielowymiarowe i spos\u00f3b ich przechowywania<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tablice wielowymiarowe s\u0105 przechowywane w spos\u00f3b liniowy (tzw. row-major order).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/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\">W pami\u0119ci:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1, 2, 3, 4, 5, 6<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Indeksowanie:<\/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\u0142umaczone 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\">Przy przekazywaniu do funkcji trzeba zna\u0107 drugi wymiar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void f(int m&#91;]&#91;3]) {\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lub:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void f(int (*m)&#91;3]) {\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tablica-char-jako-reprezentacja-napisu-i-zakonczenie-znakiem-null\">Tablica char jako reprezentacja napisu i zako\u0144czenie znakiem null<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tablica char jest u\u017cywana do przechowywania tekstu w C. \u0141a\u0144cuch znak\u00f3w to tablica znak\u00f3w zako\u0144czona znakiem <code>'\\0'<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>char napis&#91;6] = \"Hello\";\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W pami\u0119ci:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8217;H&#8217; 'e&#8217; 'l&#8217; 'l&#8217; 'o&#8217; '\\0&#8242;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Brak znaku null powoduje niekontrolowane czytanie pami\u0119ci przez funkcje takie jak <code>printf(\"%s\", napis);<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamiczna wersja:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>char *napis = malloc(6);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nale\u017cy pami\u0119ta\u0107 o r\u0119cznym wpisaniu <code>'\\0'<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wprowadzanie-danych-do-tablicy-przy-uzyciu-petli-i-funkcji-wejscia\">wprowadzanie danych do tablicy przy u\u017cyciu p\u0119tli i funkcji wej\u015bcia<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wprowadzanie danych do tablicy odbywa si\u0119 zwykle przy u\u017cyciu p\u0119tli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad dla liczb ca\u0142kowitych:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int tab&#91;5];\n\nfor (int i = 0; i &lt; 5; i++) {\n    scanf(\"%d\", &amp;tab&#91;i]);\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dla napisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>char napis&#91;100];\nfgets(napis, 100, stdin);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>gets<\/code> nie powinno by\u0107 u\u017cywane &#8211; brak kontroli d\u0142ugo\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty b\u0142\u0105d to brak sprawdzenia, czy u\u017cytkownik nie przekroczy\u0142 rozmiaru tablicy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"porownanie-implementacji-tablic-w-c-c-i-python\">Por\u00f3wnanie implementacji tablic w C, C++ i Python<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c\">C++<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W C++ istnieje klasyczna tablica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int tab&#91;5];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ale dost\u0119pne s\u0105 te\u017c kontenery:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;vector&gt;\n\nstd::vector&lt;int&gt; v = {1, 2, 3};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>vector<\/code> przechowuje rozmiar i zarz\u0105dza pami\u0119ci\u0105 automatycznie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python\">Python<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W Python nie ma klasycznej tablicy o sta\u0142ym rozmiarze. Lista jest struktur\u0105 dynamiczn\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tab = &#91;1, 2, 3]\ntab.append(4)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nie wyst\u0119puje r\u0119czne zarz\u0105dzanie pami\u0119ci\u0105 ani problem z przekroczeniem zakresu w sensie naruszenia pami\u0119ci &#8211; pojawi si\u0119 wyj\u0105tek.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-bledy-przy-pracy-z-tablicami-i-konsekwencje-naruszenia-pamieci\">Typowe b\u0142\u0119dy przy pracy z tablicami i konsekwencje naruszenia pami\u0119ci<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wyj\u015bcie poza zakres indeksu.<\/li>\n\n\n\n<li>U\u017cycie niezainicjalizowanej tablicy.<\/li>\n\n\n\n<li>Brak zwolnienia pami\u0119ci dynamicznej.<\/li>\n\n\n\n<li>Brak znaku <code>'\\0'<\/code> w napisie.<\/li>\n\n\n\n<li>Mylenie <code>sizeof(tab)<\/code> z <code>sizeof(wsaznik)<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Wyj\u015bcie poza zakres w C nie generuje wyj\u0105tku. Mo\u017ce nadpisa\u0107 inne dane lub doprowadzi\u0107 do trudnych do wykrycia b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tablice C<\/strong> w j\u0119zykach niskopoziomowych jest konstrukcj\u0105 prost\u0105, ale wymaga \u015bcis\u0142ej kontroli nad rozmiarem i zakresem dost\u0119pu. Zrozumienie zale\u017cno\u015bci mi\u0119dzy indeksem a adresem, mi\u0119dzy nazw\u0105 tablicy a wska\u017anikiem oraz mi\u0119dzy alokacj\u0105 statyczn\u0105 i dynamiczn\u0105 jest kluczowe dla poprawnego programowania w C i C++.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tablica C jest jedn\u0105 z podstawowych struktur danych w j\u0119zykach proceduralnych. Umo\u017cliwia przechowywanie wielu element\u00f3w tego samego typu w ci\u0105g\u0142ym obszarze pami\u0119ci. W kontek\u015bcie j\u0119zyk\u00f3w niskiego poziomu jej zrozumienie wymaga spojrzenia zar\u00f3wno na sk\u0142adni\u0119, jak i na model pami\u0119ci. W j\u0119zykach takich jak C i C++ tablica nie jest obiektem z dodatkowymi informacjami &#8211; to po prostu blok kolejnych kom\u00f3rek pami\u0119ci. W dalszej cz\u0119\u015bci notatek poj\u0119cie tablic b\u0119dzie rozpatrywane g\u0142\u00f3wnie na gruncie C oraz C++. Tablice jako ci\u0105g\u0142y blok pami\u0119ci i zale\u017cno\u015b\u0107 mi\u0119dzy indeksem a adresem Tablica to uporz\u0105dkowany zbi\u00f3r element\u00f3w jednego typu, przechowywanych obok siebie w pami\u0119ci. Je\u017celi pierwszy element znajduje si\u0119 pod adresem A, to kolejny znajduje si\u0119 pod adresem A + sizeof(typ). Dla przyk\u0142adu: Zak\u0142adaj\u0105c, \u017ce int zajmuje 4 bajty, rozmieszczenie w pami\u0119ci b\u0119dzie wygl\u0105da\u0107 logicznie tak: Indeks jest wi\u0119c tylko wygodnym sposobem obliczania przesuni\u0119cia wzgl\u0119dem pocz\u0105tku tablicy. Wa\u017cne: j\u0119zyk C nie przechowuje informacji o d\u0142ugo\u015bci tablicy. Kompilator zna j\u0105 tylko w miejscu deklaracji. Po przekazaniu do funkcji tablica \u201edegeneruje\u201d do wska\u017anika. Tablica C &#8211; definicja, w\u0142asno\u015bci i zachowanie w kontek\u015bcie wska\u017anik\u00f3w Tablica C to konstrukcja statyczna o ustalonej liczbie element\u00f3w, okre\u015blonej w czasie kompilacji (z wyj\u0105tkiem VLA w standardzie C99). Jej nazwa jest w wi\u0119kszo\u015bci kontekst\u00f3w traktowana jak wska\u017anik do pierwszego elementu. Przyk\u0142ad: tab jest adresem pierwszego elementu (&amp;tab[0]). Istnieje subtelna r\u00f3\u017cnica: To ma znaczenie przy operacjach arytmetycznych. Rozmiar tablicy mo\u017cna obliczy\u0107: Dzia\u0142a to tylko w tym samym zakresie, w kt\u00f3rym tablica zosta\u0142a zadeklarowana. Deklaracja tablicy C oraz inicjalizacja statyczna i dynamiczna Deklaracja tablicy C wymaga podania typu oraz liczby element\u00f3w. Podstawowa forma: Inicjalizacja przy deklaracji: Mo\u017cliwe jest pomini\u0119cie rozmiaru, gdy podajemy inicjalizator: Kompilator sam ustali d\u0142ugo\u015b\u0107. Je\u017celi inicjalizator jest kr\u00f3tszy: Pozosta\u0142e elementy zostan\u0105 wyzerowane. Tablica dynamiczna w C Dynamiczna alokacja: Po zako\u0144czeniu pracy: Brak free prowadzi do wycieku pami\u0119ci. Tablice C i przekazywanie do funkcji oraz utrata informacji o rozmiarze Gdy przekazujemy tablic\u0119 do funkcji: Parametr t[] jest r\u00f3wnowa\u017cny int *t. Informacja o d\u0142ugo\u015bci nie jest przekazywana automatycznie, dlatego zawsze nale\u017cy przekazywa\u0107 rozmiar jako osobny argument. Cz\u0119sty b\u0142\u0105d: Tutaj sizeof(t) zwr\u00f3ci rozmiar wska\u017anika, a nie ca\u0142ej tablicy. Tablice w j\u0119zyku C a tablice wielowymiarowe i spos\u00f3b ich przechowywania Tablice wielowymiarowe s\u0105 przechowywane w spos\u00f3b liniowy (tzw. row-major order). Przyk\u0142ad: W pami\u0119ci: 1, 2, 3, 4, 5, 6 Indeksowanie: Jest t\u0142umaczone na: Przy przekazywaniu do funkcji trzeba zna\u0107 drugi wymiar: Lub: Tablica char jako reprezentacja napisu i zako\u0144czenie znakiem null Tablica char jest u\u017cywana do przechowywania tekstu w C. \u0141a\u0144cuch znak\u00f3w to tablica znak\u00f3w zako\u0144czona znakiem '\\0&#8242;. Przyk\u0142ad: W pami\u0119ci: &#8217;H&#8217; 'e&#8217; 'l&#8217; 'l&#8217; 'o&#8217; '\\0&#8242; Brak znaku null powoduje niekontrolowane czytanie pami\u0119ci przez funkcje takie jak printf(&#8222;%s&#8221;, napis);. Dynamiczna wersja: Nale\u017cy pami\u0119ta\u0107 o r\u0119cznym wpisaniu '\\0&#8242;. wprowadzanie danych do tablicy przy u\u017cyciu p\u0119tli i funkcji wej\u015bcia Wprowadzanie danych do tablicy odbywa si\u0119 zwykle przy u\u017cyciu p\u0119tli. Przyk\u0142ad dla liczb ca\u0142kowitych: Dla napisu: gets nie powinno by\u0107 u\u017cywane &#8211; brak kontroli d\u0142ugo\u015bci. Cz\u0119sty b\u0142\u0105d to brak sprawdzenia, czy u\u017cytkownik nie przekroczy\u0142 rozmiaru tablicy. Por\u00f3wnanie implementacji tablic w C, C++ i Python C++ W C++ istnieje klasyczna tablica: Ale dost\u0119pne s\u0105 te\u017c kontenery: vector przechowuje rozmiar i zarz\u0105dza pami\u0119ci\u0105 automatycznie. Python W Python nie ma klasycznej tablicy o sta\u0142ym rozmiarze. Lista jest struktur\u0105 dynamiczn\u0105: Nie wyst\u0119puje r\u0119czne zarz\u0105dzanie pami\u0119ci\u0105 ani problem z przekroczeniem zakresu w sensie naruszenia pami\u0119ci &#8211; pojawi si\u0119 wyj\u0105tek. Typowe b\u0142\u0119dy przy pracy z tablicami i konsekwencje naruszenia pami\u0119ci Wyj\u015bcie poza zakres w C nie generuje wyj\u0105tku. Mo\u017ce nadpisa\u0107 inne dane lub doprowadzi\u0107 do trudnych do wykrycia b\u0142\u0119d\u00f3w. Tablice C w j\u0119zykach niskopoziomowych jest konstrukcj\u0105 prost\u0105, ale wymaga \u015bcis\u0142ej kontroli nad rozmiarem i zakresem dost\u0119pu. Zrozumienie zale\u017cno\u015bci mi\u0119dzy indeksem a adresem, mi\u0119dzy nazw\u0105 tablicy a wska\u017anikiem oraz mi\u0119dzy alokacj\u0105 statyczn\u0105 i dynamiczn\u0105 jest kluczowe dla poprawnego programowania w C i C++.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":968,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-980","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/980","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=980"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/980\/revisions"}],"predecessor-version":[{"id":982,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/980\/revisions\/982"}],"up":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/968"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}