Warning: Declaration of action_plugin_subjectindex_indexer::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php on line 15
Warning: Declaration of action_plugin_mathjax_enable::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/mathjax/action/enable.php on line 62
Warning: Declaration of action_plugin_googleanalytics::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/googleanalytics/action.php on line 40
Warning: Declaration of action_plugin_folded::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/folded/action.php on line 40
Warning: Declaration of action_plugin_hidden::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/hidden/action.php on line 28
Warning: Declaration of action_plugin_include::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/include/action.php on line 354
Warning: Declaration of action_plugin_tag::register(&$contr) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/tag/action.php on line 175
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/auth.php on line 532
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/auth.php on line 818
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
====== Dynamická vícerozměrná pole ======
* [[dox>dynamicka-vicerozmerna-pole/soucina-matic.c|Součin_matic]]
* [[dox>dynamicka-vicerozmerna-pole/cetnost-znaku-v-poli-retezcu.c|Četnost_znaku_v_poli_řetězců]]
Níže jsou uvedeny příklady všech možností vytvoření dynamického dvourozměrného pole.
Pro vytvoření dynamických polí s více než dvěma rozměry lze použít stejných principů.
Pro všechny níže uvedené možnosti platí, že přístup k prvkům pole je stejný jako u statického pole.
Varianty pole se liší pouze svým tvarem (stejně vs. různě dlouhé řádky),
vnitřním uspořádáním prvků v paměti a tím, které rozměry
je možné určit až v průběhu výpočtu (a který je naopak nutné zadat celočíselnou
konstantou již při psaní programu).
======Dvourozměrné pole jako pole ukazatelů======
Jedná se o typ pole s různě dlouhými řádky.
Počet řádků je nutné určit pevně konstantou,
naopak velikosti řádků lze specifikovat až v průběhu výpočtu.
Jednotlivé řádky nejsou v paměti uloženy za sebou v jednom bloku.
Tento typ pole se v praxi používá relativně často (např. pole textových řetězců).
Příklad vytvoření pole:
int *pole[2];
pole[0]=(int *)malloc(3 * sizeof(int));
pole[1]=(int *)malloc(3 * sizeof(int));
======Dvourozměrné pole jako ukazatel na pole======
Jde o méně používaný typ pole.
Druhý rozměr je dán pevně, první je možné určit až v průběhu výpočtu.
Jednotlivé řádky mají stejnou délku a jsou uloženy v jednom bloku paměti za sebou (stejně jako u statického pole).
Příklad:
int (*pole)[3];
pole = (int(*)[3])malloc(2 * 3 * sizeof(int));
======Dvourozměrné pole jako ukazatel na ukazatel======
Oba rozměry pole je možné určit až v průběhu výpočtu. Řádky mohou mít různou
délku a jsou obecně uloženy v různých blocích paměti.
Příklad:
int **poleD;
poleD = (int **)malloc(2 * sizeof(int *));
poleD[0] = (int *)malloc(3 * sizeof(int));
poleD[1] = (int *)malloc(3 * sizeof(int));
======Pole textových řetězců======
Toto dvourozměrné pole se používá často v programech, které pracují s textem.
Jde o pole typu "pole ukazatelů" nebo "ukazatel na ukazatel". Pokud použijeme
jen jeden operátor indexu, můžeme pohodlně pracovat s celým textovým řetězcem
na daném řádku.
Příklad:
char *p_text[4];
p_text[0] = "prvni";
p_text[1] = "druhy";
p_text[2] =(char *)malloc(6 * sizeof(char));
strcpy(p_text[2], "treti");
p_text[3] = "ctvrty";
printf("%s\n", p_text[1]);
----
odkaz cc, upol/sujc