7. UKAZOVATELE, POLIA A REŤAZCE

Size: px
Start display at page:

Download "7. UKAZOVATELE, POLIA A REŤAZCE"

Transcription

1 7. UKAZOVATELE, POLIA A REŤAZCE 7.1. Ukazovatele 7.2. Pole 7.3. Aritmetika ukazovateľov 7.4. Reťazce 7.5. Viacrozmerné pole, ukazovateľ na ukazovateľ 7.6. Ukazovateľ na ukazovateľ a pole ukazateľov 7.7. Ukazovateľ na funkcie Argumenty príkazového riadku Ukazovatele môžu byť používané v súvislosti so statickými dátami, napríklad s premennými. Omnoho elegantnejšie použitie poskytujú v súvislosti s poliami (a najmä s poliami znakov - reťazcami), lebo ako zakrátko uvidíme, (zjednodušene povedané) ukazovateľ a pole je jedno a to isté. Celkom nezastupiteľné miesto majú ukazovatele v súvislosti s dynamickými dátovými štruktúrami. Pretože zmienené použitie ukazovateľov je príliš rozsiahle pre jednu kapitolu, popíšeme ich v dvoch kapitolách. Téme tejto kapitoly napovedá jej názov. Nasledujúca kapitola obsahuje podrobný prehľad vstupu a výstupu. V ďalšej kapitole sa budeme venovať dynamickým dátovým štruktúram Ukazovatele S ukazovateľmi sme sa stručne zoznámili už v kapitole venovanej základným dátovým typom. Preto iste neuškodí krátka rekapitulácia. Ukazovateľ reprezentuje adresu objektu. Nesie so sebou súčasne informáciu o dátovom type, ktorý sa na tejto adrese nachádza. Deklaráciu ukazovateľa a jeho použitie ukazuje príklad: int x, y, *px, *p2x; px = &x; /* px teraz ukazuje na x */ *px = 5; /* to isté ako x = 5; */ y = *px + 1; /* y = x + 1; */ *px += 1; /* x += 1; */ (*px)++; /* x++; zátvorky su nutné */ p2x = px; /* p2x ukazuje na to iste, ako px, t.j. na x */ *p2x = *p2x + y; /* x = x + y; */ Majme na pamäti, že pri deklarácii ukazovateľa môžeme použiť aj modifikáciu const. Potom sa jedná o konštantný ukazovateľ, ukazovateľ na konštantu, alebo oboje, teda konštantný ukazovateľ na konštantu. Pozrime sa na niekoľko príkladov: int i; int *pi; /* pi je neinicializovaný ukazovateľ na typ int */ int * const cp = &i; /* konstantný ukazovateľ na int */ const int ci = 7; /* celočíselná konstanta */ const int *pci;/* neinicializovaný ukazovateľ na celočíselnu konstantu*/ const int * const cpc = &ci; /* konstantny ukazovateľ na konstantu */

2 Prekladače ANSI C pochopiteľne kontrolujú program a v prípade pokusu o porušenie konštantnosti ukazovateľa, hodnoty alebo obidvoch (podľa deklarácie) ohlási chybu Pole Pole je kolekcia premenných rovnakého typu, ktoré môžu byť označované spoločným menom. K prvkom poľa pristupujeme prostredníctvom identifikátoru poľa a indexu. Pole v C obsadzuje spojitú oblasť operačnej pamäte tak, že prvý prvok poľa je umiestnený na najnižšej pridelenej adrese a posledný na najvyššej pridelenej adrese. Pole je v C výhradne jednorozmerné. Povšimnime si skutočnosť, že na prvky poľa nekladieme žiadne obmedzenia. To nám umožňuje zaviesť viacrozmerné pole ako pole polí. Definícia poľa je jednoduchá: typ meno[rozsah]; kde typ určuje typ prvkov poľa (bázový typ) meno predstavuje identifikátor poľa rozsah je kladný počet prvkov poľa (celočíselný konštantný výraz, ktorý musí byť vyčísliteľný počas prekladu) Na tomto mieste zdôraznime význam položky rozsah. Znamená počet prvkov poľa. V súvislosti so skutočnosťou, že pole začína prvkom s indexom nula to znamená, že posledný prvok poľa má index rozsah-1. Ešte jedna dôležitá vlastnosť C. Prekladač nekontroluje rozsah použitého indexu. Pokiaľ sa o túto skutočnosť nepostaráme sami, môžeme čítať nezmyselné hodnoty pri odkaze na neexistujúce prvky poľa. Proti niektorým iným vyšším programovacím jazykom na nás kladie C vyššie nároky. Pokiaľ sa však zamyslíme, spomínaná kontrola medzí sa aj tak použije iba pri ladení, hotový program by možnosť nedodržania medzí nemal obsahovať. Ukážme si niekoľko definícií polí, v ktorých budeme postupne ukazovať možnosti definície premenných typu pole: #define N 10 int a[n]; a je deklarované ako pole o N prvkoch, každý typu int. Na jednotlivé prvky sa môžeme odkazovať indexy 0 až 9, t.j. a[0], a[1],..., a[n-1]

3 pamäťový priestor pridelený poľu a môžeme zistiť výpočtom: počet obsadených byte = N * sizeof(int) Prečo musíme potrebný pamäťový priestor počítať práve týmto spôsobom? Iba sizeof(a) vráti veľkosť pamäte pre premennú typu ukazovateľ. sizeof(*a) vráti veľkosť prvku pole, teda veľkosť int. C síce netestuje indexy polí, ale umožňuje nám súčasne s definíciou poľa previesť aj jeho inicializáciu: b[0] b[1] b[2] b[3] b[4] static double b[5] = 1.2, 3.4, -1.2, 123.0, 4.0 ; Princíp je jednoduchý. Pred bodkočiarku, čím by definícia končila, vložíme do zložených zátvoriek zoznam hodnoť, ktorými chceme inicializovať prvky poľa. Hodnoty pochopiteľne musia byť odpovedajúceho typu. Naviac ich nemusí byť rovnaký počet, ako je dimenzia poľa. Môže ich byť menej. Priradenie totiž prebieha následovne: prvá hodnota zo zoznamu je umiestnená do prvého prvku poľa, druhá hodnota do druhého prvku poľa,.... Pokiaľ je zoznam vyčerpaný skôr, než je priradená hodnota poslednému prvku poľa, zostávajú odpovedajúce (záverečné) prvky poľa neinicializované. Pri inicializácii popísanej vyššie sme museli uvádzať dimenziu poľa. Tuto prácu však môžeme prenechať prekladaču. Ten poľu vymedzí toľko miesta, koľko odpovedá inicializácii, ako napríklad: int c[] = 3, 4, 5; Aby sme predchádzajúcu vetu uviedli na správnu mieru, musíme si povedať, ako chápe C identifikátor pole. Identifikátor pole (symbolicky id) predstavuje konštantný ukazovateľ na prvý prvok poľa, teda na id[0]. Niekedy tiež hovoríme, že id predstavuje bázovú adresu poľa. Skôr popísané vlastnosti C nám zaručia, že nezmeníme hodnotu konštantného ukazovateľa id (viď nasledujúca Aritmetika ukazovateľov) Aritmetika ukazovateľov Názov tohoto odstavca zrejme vyvolá zdesenie väčšiny pascalistov. Aký to má zmysel, prevádzať aritmetické operácie s ukazovateľmi? Ako hneď uvidíme, význam spočíva vo zvýšení prehľadnosti, zrýchlení chodu programu a v možnostiach, ktoré dostávame k dispozícii. Ako vieme, ukazovateľ ukazuje na hodnotu nejakého typu. Nesie so sebou informáciu o tomto type. Táto informácia pochopiteľne predstavuje počet bajtov nutných pre uchovanie hodnoty typu. A pri aritmetike ukazovateľov zmysluplne používame obe časti zmienenej informácie, adresu aj veľkosť položky. Aritmetika ukazovateľov je obmedzená na tri základné operácie, sčítanie, odčítanie a porovnanie. Pozrime sa najprv na prvé dve operácie.

4 Sčítanie aj odčítanie sú binárne operácie. Pretože sa zaoberáme aritmetikou ukazovateľov, bude jedným z operandov vždy ukazovateľ. Druhým operandom potom bude buď opäť ukazovateľ, alebo ním môže byť celé číslo. Pokiaľ sú oba operandy ukazovatele, je výsledkom ich rozdielu počet položiek, ktoré sa medzi adresami na ktoré ukazovatele ukazujú nachádzajú. Pokiaľ k ukazovateľu pripočítam, respektíve odpočítam celé číslo, je výsledkom ukazovateľ ukazujúci o príslušný počet prvkov vyššie, respektíve nižšie. Ak si predstavíme prvky s vyšším indexom nad prvkami s vyšším indexom. Tak je ale pole v C definované. Táto predstava je úplne dokonalá, pokiaľ si predstavíme ukazovateľ naprostred nejakého poľa. Pozrime sa teda na ukazovatele a pole. Majme nasledujúcu deklaráciu, int i, *pi, a[n]; nepriradzujme pre jednoduchosť už žiadne konkrétne hodnoty. Čo môžeme teraz s istotou povedať. Len to, čo vieme o umiestnení prvkov poľa. adresa prvku a[0] je &a[0] <--> a <--> a + 0. Posledný výraz už predstavuje súčet ukazovateľa s celočíselnou hodnotou. Ta musí byť nula, aby sa naozaj jednalo o ukazovateľ na prvý prvok poľa. Teraz nás iste neprekvapí, že nasledujúce výrazy uvedené na rovnakom riadku a + i <--> &a[i] *(a+i) <--> a[i] predstavujú iné zápisy toho istého výrazu. V prvom riadku ide o ukazovateľ na i+1. prvok, v druhom riadku potom hodnotu tohoto prvku. Pre konkrétne N rovné 100 dostávame, int i, *pi, a[100]; a nasledujúce priradenie je priradenie hodnoty jedného ukazovateľa ukazovateľu druhému, pi = a; /* pi teraz ukazuje na začiatok poľa a, na 1. prvok */ výrazy uvedené nižšie sú po tomto priradení zameniteľné (majú rovnaký význam, predstavujú hodnotu prvku poľa a s indexom i), a[i] <--> *(a+i) <--> pi[i] <--> *(pi+i). Ak budeme teraz potrebovať ukazovať na prostredný prvok poľa a, ľahko to môžeme urobiť s pomocou nášho pomocného ukazovateľa pi: pi = a + 49; /* p teraz ukazuje naprostred poľa a, na 50. prvok */ S týmto ukazovateľom sa potom môžeme posunúť na nasledujúci prvok poľa napríklad pomocou inkrementácie, lebo aj pri nej prekladač vie, o koľko bajtov má posunúť (zväčšiť)

5 adresu, aby ukazoval na nasledujúci prvok: ++pi alebo pi++, ale nie ++a ani a++, lebo a je konštantný ukazovateľ (je pevne spojený so začiatkom poľa). Časť venovanú poliam a aritmetike ukazovateľov ukončíme krátkym programom. V ňom si najmä všimnime skutočnosť, že formálne argumenty funkcií nie sú poľami, ale ukazovateľmi na typ. Naviac ich zmena neovplyvní zmenu argumentov skutočných (to by však prekladač nedovolil - sú predsa konštantné). Preto nieje problémom týmto funkciám predať ukazovateľ ako na začiatok poľa, tak na ľubovolný iný jeho prvok. Opatrnosť potom musíme zachovať čo sa týka predávaného počtu prvkov. C neprevádza kontrolu medzí! /****************************************************************/ /* subor CPYARRY.C */ /* na funkciach kopirujicich prvky jedneho pola do druheho */ /* ukazuje pristup k prvkom pola pomocou indexu a pomocou uka- */ /* zatela, teda pointerovu aritmetiku */ /****************************************************************/ #define N 6 #include <stdio.h> void copy_array1(int *a, int *b, int n) /* a - vstupne pole, b - vystupne pole, n - pocet prvkov */ register int i = 0; for (; i < n; i++) b[i] = a[i]; void copy_array2(int *a, int *b, int n) /* a - vstupne pole, b - vystupne pole, n - pocet prvkov */ while (n-- > 0) *b++ = *a++; void print_array(int *p, int n) /* vytlaci celociselne pole o n prvkoch */ /* zacne a skonci na novom radku */ puts(""); while (n-- > 0) printf("\t%d", *p++); puts(""); int main() int pole1[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, pole2[n], dim1; dim1 = sizeof(pole1) / sizeof(int); print_array(pole1, dim1); copy_array1(pole1, pole2, N); print_array(pole2, N); copy_array2(pole1 + 3, pole2, N); print_array(pole2, N); return 0;

6 /* vystup vyzera nasledovne: */ Reťazce Reťazec je (jednorozmerné) pole znakov ukončené špeciálnym znakom vo funkcii zarážky. Na túto skutočnosť musíme myslieť pri definícii veľkosti poľa. Pre zarážku musíme rezervovať jeden znak. Teraz sa zamyslime nad zarážkou. Tá je súčasťou reťazca (bez nej by reťazec bol len pole znakov). Musí teda byť rovnakého typu, ako ostatné prvky reťazca - char. A pri pohľade na ASCII tabuľku nám zostane jediná použiteľná hodnota - znak s kódom nula: '\0'. Pozrime sa už na definíciu poľa, ktoré použijeme pre reťazec: char s[size]; Na identifikátor s sa môžeme dívať z dvoch pohľadov: Jednak ako na premennú typu reťazec (pole znakov, zarážku pridávame niekedy sami) dĺžky SIZE, ktorého jednotlivé znaky sú prístupné pomocou indexov s[0] až s[size-1]. Alebo ako na konštantný ukazovateľ na znak, t.j. na prvý prvok poľa s, s[0]. Reťazcové konštanty píšeme medzi dvojicu úvodzoviek, úvodzovky v reťazcovej konštante musíme uviesť špeciálnym znakom \ - opačné lomítko. Tak to sme si pripomenuli obsah jednej z úvodných kapitol. Pokračujme ešte chvíľu v jednoduchých ukážkach: "abc" je konštanta typu reťazec dĺžky 3+1 znak (zarážka), teda 3 znaky, 4 bajty pamäti (konštantné pole 4 znakov). "a" je tak isto reťazcovou konštantou, má dĺžku 1+1 znak 'a' je znaková konštanta (nepliesť s reťazcom!) Teraz si spojíme znalosti reťazcových konštánt a polí. Napríklad zápis char pozdrav[] = "hello"; je ekvivalentní zápisu char pozdrav[] = 'h','e','l','l','o','\0'; V oboch prípadoch sa dĺžka (dimenzia) poľa použije z inicializačnej časti. Druhý príklad je zaujímavý najmä nutnosťou explicitného uvedenia zarážky. Inak môžeme povedať, že sa tento spôsob zadania reťazca nepoužíva.

7 Ak sme pracovali s poľom znakov, prečo to teraz neskúsiť s ukazovateľom na znak. Nasledujúca definícia je veľmi podobná tým predchádzajúcim: char *ps = "retazec"; aj tak sa líši dosť podstatne. ps je ukazovateľ na znak, ktorému je priradená adresa reťazcovej konštanty retazec. Táto konštanta je teda umiestnená v pamäti, ale premenná ps na ňu ukazuje len do okamžiku, než jej hodnotu napríklad zmeníme. Potom však stratíme adresu konštantného reťazca "retazec". Jednoduchý program popisovanú situáciu ozrejmí (v ňom sme pochopiteľne nemenili hodnotu konštantného ukazovateľa na pole): /****************************************/ /* subor str_ptr.c */ /* ukazuje jednoduchu pracu s retezcami */ /****************************************/ #include <stdio.h> int main() char text[] = "world", *new1 = text, *new2 = text; printf("%s\t%s\t%s\n", text, new1, new2); new1 = "hello"; printf("%s\t%s\t%s\n", text, new1, new2); printf("%s\n", "hello world" + 2); return 0; /* world world world world hello world llo world */ Najdôležitejším bodom programu je priradenie new1 = "hello", v ňom iba meníme hodnotu ukazovateľa new1. Nedochádza pri ňom k žiadnemu kopírovaniu reťazcov. To by sa musel zmeniť obsah oboch ďalších reťazcov text aj new2, predsa pôvodne boli umiestnené na rovnakej adrese.

8 Podobné veci, ktoré môžeme robiť s ukazovateľmi, môžeme robiť aj s konštantnými reťazcami, napríklad: "ahoj svet" + 5 predstavuje ukazovateľ na "svet" Proste sme použili aritmetiku ukazovateľov a najmä fakt, že hodnota reťazcovej konštanty je rovnaká ako akéhokoľvek ukazovateľa na reťazec (a nielen na reťazec) - ukazovateľ na prvú položku. Naďalej si teda pamätajme približne toto. Pri práci s reťazcami nesmieme zabúdať na skutočnosť, že sú reprezentované ukazovateľmi. Iba zmenou či priradením ukazovateľa sa samotný reťazec nezmení. Preto s týmito ukazovateľmi nemôžeme prevádzať operácie tak, ako sme zvyknutý napríklad v Turbo Pascale. Na záver odstavca venovaného popisu práce s reťazcami si uveďme modifikáciu programu, ktorý kopíroval obsah jedného celočíselného poľa do iného. Dve varianty funkcie pre kopírovanie zdrojového reťazca do cieľového sú použité v programe: /************************************************/ /* subor STR_CPY.C */ /* ukazuje dve mozne implementacie kopirovania */ /* retezcov */ /************************************************/ #include <stdio.h> #define SIZE 80 void strcpy1(char *d, char *s) while ((*d++ = *s++)!= '\0') ; void strcpy2(char d[], char s[]) int i = 0; while ((d[i] = s[i])!= '\0') i++; int main() char s1[] = "prvy (1.) retazec", s2[] = "druhy (2.) retazec", d1[size], d2[size], *ps = s2; strcpy1(d1, s1); strcpy2(d2, s2 + 6); ps = s2 + 8; printf("s1[]:%s\t\ts2[]:%s\nd1[]:%s\t\td2[]:%s\n\t\t\t\t\t *ps:%s\n\n", s1, s2, d1, d2, ps); return 0;

9 /* s1[]:prvy (1.) retazec d1[]:prvy (1.) retazec */ s2[]:druhy (2.) retazec d2[]:(2.) retazec *ps:.) retazec Pozrime sa na obe kopírovacie funkcie. Nemusíme im predávať počet znakov. Zarážka má skvelú vlastnosť. Vďaka nej spoznáme koniec poľa. Súčasne však vzniká nebezpečie, že cieľový reťazec nebude mať dostatok priestoru pre zapísanie znakov z reťazca zdrojového. Reťazce zrejme budeme v našich programoch používať veľmi často. Iste by nám nebolo milé, keby sme museli písať pre každú operáciu nad reťazcami svoju vlastnú funkciu. Jednak by to vyžadovalo isté úsilie, jednak by sme museli vymýšľať jednoznačné a súčasne mnemonické identifikátory. Túto prácu našťastie robiť nemusíme. Zmienené funkcie sú súčasťou štandardnej knižnice funkcií a ich prototypy sú obsiahnuté v hlavičkovom súbore string.h. Nasledujúce riadky dávajú prehľad o najpoužívanejších reťazcových funkciách. Pretože sme sa reťazcom venovali dostatočne, uvedieme iba deklarácie týchto funkcií s ich veľmi stručným popisom. int strcmp(const char *s1, const char *s2); lexikograficky porovnáva reťazce, vracia hodnoty < 0 ak je s1 < s2 0 s1 == s2 > 0 s1 > s2 int strncmp(const char *s1, const char *s2, unsigned int n); ako predchádzajúca s tým, že porovnáva najviac n znakov unsigned int strlen(const char *s); vráti počet významných znakov reťazca (bez zarážky) char *strcpy(char *dest, const char *src); nakopíruje src do dest char *strncpy(char *dest, const char *src, unsigned int n); ako predchádzajúca, ale najviac n znakov (ak ich je práve n, nepridá zarážku) char *strcat(char *s1, const char *s2); s2 prekopíruje za s1 char *strncat(char *s1, const char *s2, unsigned int n); ako predchádzajúca, ale najviac n znakov char *strchr(const char *s, int c); vyhľadá prvý výskyt (zľava) znaku c v reťazci s char *strrchr(const char *s, int c); vyhľadá prvý výskyt (sprava) znaku c v reťazci s char *strstr(const char *str, const char *substr); vyhľadá prvý výskyt (zľava) podreťazca substr v reťazci str

10 7.5. Viacerozmerné pole, ukazovateľ na ukazovateľ Po dlhšej vsuvke, ktorá ukazovala podrobnejšie vlastnosti znakových polí - reťazcov, sa dostávame k problematike viacrozmerných polí. Najčastejšie nám zrejme pôjde o matice. Jazyk C umožňuje deklarovať pole iba jednorozmerné. Jeho prvky však môžu byť ľubovolného typu. Môžu teda byť opäť (napríklad) jednorozmernými poliami. To však už dostávame vektor vektorov, teda maticu. Ak budeme uvedeným spôsobom postupovať ďalej, vytvoríme dátovú štruktúru prakticky ľubovoľnej dimenzie. Potom už je potrebné mať len dostatok pamäte. Definícia matice (dvojrozmerného poľa) vyzerá takto: type meno[5][7]; kde typ určuje dátový typ položiek poľa meno predstavuje identifikátor poľa [5][7] určuje rozsah jednotlivých vektorov, 5 riadkov a 7 stĺpcov Pamätajme si zásadu, že posledný index sa mení najrýchlejšie (tak je viacrozmerné pole umiestnené v pamäti). S viacrozmerným poľom môžeme pracovať rovnako, ako s jednorozmerným. To sa prirodzene tyká aj možnosti inicializácie. Len musíme jednotlivé "prvky" - vektory, uzatvárať do zložených zátvoriek. Tento princíp je však rovnaký (čo sa opakujeme), ako pre vektor. Preto si priamo uveďme ukážkový program, prevzatý od klasikov - K&R. Našou úlohou je pre zadaný deň, mesiac a rok zistiť poradové číslo dňa v roku. Vo výpise je uvedená aj funkcia, majúca opačný význam. Pre deň v roku a rok (čo keď je priestupný) určí mesiac a deň. Riešenie je veľmi elegantné.

11 /****************************************/ /* subor yearday.c */ /* urci cislo dna v roku a naopak */ /* motivacia K&R */ /****************************************/ static int day_tab[2][13] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; int day_of_year(int year, int month, int day) int i, leap; leap = year % 4 == 0 && year % 100!= 0 year % 400 == 0; for (i = 1; i < month; i++) day += day_tab[leap][i]; return day; int month_day(int year, int yearday, int *pmonth, int *pday) int i, leap; leap = year % 4 == 0 && year % 100!= 0 year % 400 == 0; for (i = 1; yearday > day_tab[leap][i]; i++) yearday -= day_tab[leap][i]; *pmonth = i; *pday = yearday; return i; int main() int year = 1993, month = 11, day = 12, yearday, m, d; yearday = day_of_year(year, month, day); month_day(year, yearday, &m, &d); return 0; Program nemá vstup ani výstup. Predstavuje proste definície funkcií a ukážku ich volania. Hneď v úvode je definované statické pole, obsahujúce počty dní v mesiacoch roku. Prvky s indexom nula majú nulovú hodnotu. Vďaka tomuto posunu voči štandardnému C indexovaniu má piaty mesiac index päť. Pole je dvojrozmerné. Jeho prvý vektor odpovedá bežnému roku, druhý vektor odpovedá roku prestupnému. Toto riešenie je veľmi rýchle a jeho pamäťové nároky nie sú premrštené. Funkcia day_of_year() určí pre vstupný year, month a day číslo dňa v roku. Funkcia obsahuje rozsiahlejší logický výraz, ktorý určí, či je rok priestupný alebo nie. Potom sa iba k zadanému dňu v zadanom mesiaci postupne pripočítavajú počty dní v mesiacoch predchádzajúcich. Funkcia month_day() má opačnú úlohu. Zo vstupných údajov year a yearday (číslo dňa v roku) vypočíta mesiac a deň. Problémom je, že výstupné hodnoty sú dve. Riešením sú formálne argumenty pmonth a pday, predávané adresou. Postup algoritmu výpočtu je opačný, než v predchádzajúcom prípade. Postupne sa odčítajú dĺžky mesiacov, dokiaľ nie je zbytok menší, než je počet dní mesiaca. Tento mesiac je potom výsledným mesiacom. Zbytok dňom v mesiaci. Návratová hodnota funkcie nemá prakticky žiadny význam. Je proste "do počtu".

12 7.6. Ukazovateľ na ukazovateľ a pole ukazovateľov Ukazovateľ je premenná ako každá iná. Prečo by sme teda na neho nemohli ukazovať nejakým iným (ďalším) ukazovateľom. Vo viacrozmernom poli prevádzame v podstate to isté, len jednotlivé vektory nie sú pomenované. Môžeme povedať, že pole ukazovateľov je v jazyku C nielen veľmi obľúbená, ale aj veľmi často používaná konštrukcia. Majme jednoduchú úlohu. Pole reťazcov (t.j. ukazovateľov na reťazce), ktoré máme zotriediť. Výhodou nášho riešenia je, že reťazce nebudú meniť svoju pozíciu v pamäti. Zamieňať sa budú len ukazovatele na ne. Naše pole nech sa volá v a nech má nejaký počet ukazovateľov na char. char *v[10]; Pokia2 umiestnime do jednotlivých ukazovateľov pole napríklad ukazovate2a na načítané riadky textu (nemusí mať rovnakú dĺžku), môžeme princíp triedenia ukázať na zámene dvoch susedných ukazovateľov (na reťazce) v poli. Pre väčšiu názornosť sú reťazce na obrázku v nesprávnom poradí: Stav pred výmenou: Stav po výmene: v[i] väčší v[i] väčší v[i+1] menší v[i+1] menší Dôležité je povšimnúť si, že text (reťazca) svoju pozíciu v pamäti nezmenil. To by bolo pomerne komplikované, ak si uvedomíme, ako prebieha zámena dvoch premenných. Zamenili sa iba adresy (hodnoty ukazovateľov), Po vysvetlení princípu sa môžeme pozrieť na program, ktorý lexikograficky zotriedi mená mesiacov v roku. Pretože štandardné knižnice C netriedia slovensky, niesu ani mená mesiacov slovensky, ale len "slovensky" bez mäkčeňov a dĺžňov. Všimnime si aj inicializáciu viacrozmerného poľa a zistenie počtu jeho prvkov.

13 /************************************************/ /* subor str_sort.c */ /*ukazuje triedenie pola ukazovateľov na retazce*/ /************************************************/ #include <stdio.h> #include <string.h> void sort(char **v, int n) int gap, i, j; char *temp; for (gap = n/2; gap > 0; gap /= 2) for (i = gap; i < n; i++) for (j = i - gap; j >= 0; j -= gap) if (strcmp(v[j], v[j+gap]) <= 0) break; temp = v[j]; v[j] = v[j+gap]; v[j+gap] = temp; int main() char *name[] = "chyba", "januar", "februar", "marec", "april", "maj", "jun", "jul", "august", "september", "oktober", "november", "december" ; int i; puts("mena mesiacov v roku (podla poradia):"); for (i = 0; i < 13; i++) printf("%2d. mesiac je : %s\n", i, name[i]); puts("\na teraz po zotriedeni:"); sort(name, sizeof(name)/sizeof(char *)); for (i = 0; i < 13; i++) printf("%2d. mesiac je : %s\n", i, name[i]); return 0; Nevýhoda zobrazenia mien všetkých mesiacov pred aj po zoradení sa prejaví na monitoroch s najviac 25 textovými riadkami. Nechceli sme však program robiť menej prehľadným, preto sme takýto výstup ponechali.

14 7.7. Ukazovateľ na funkciu. Ukazovateľ na funkciu sme mohli začleniť do predchádzajúcej podkapitoly. Jedná sa často o Ukazovateľ alebo o pole ukazovateľov. Funkcia však nielen vracia hodnotu istého typu, ale môžu mať aj rôzny počet argumentov rôzneho typu. Pretože je použitie ukazovateľov na funkciu nielen veľmi mocným prostriedkom C, ale aj prostriedkom veľmi nebezpečným, rozhodli sme sa popísať ukazovateľ na funkciu v samostatnej podkapitole. Definujme napríklad ukazovateľ na funkciu, ktorá nemá argumenty a vracia hodnotu zvoleného dátového typu: typ (*meno)(); Poznamenajme, že zátvorky okolo identifikátoru meno a úvodné hviezdičky sú nutné, lebo zápis typ *meno(); predstavuje funkciu vracajúcu ukazovateľ na typ. Príkladom použitia ukazovateľa na funkciu môže byť knižničná funkcia qsort(). Jej deklarácia je nasledovná: void qsort(void *base, size_t nelem, size_t width, int (*fcmp)(const void *, const void *)); kde base je začiatok poľa, ktoré chceme zotriediť nelem je počet prvkov, ktoré chceme zotriediť (rozsah poľa) width je počet bajtov, ktorý zaberá jeden prvok fcmp je ukazovateľ na funkciu, prevádzajúcu porovnanie, ta má ako argumenty dva konštantné ukazovatele na práve porovnávané prvky (potrebné pretypovať) Prototyp funkcie qsort() je v hlavičkovom súbore stdlib.h. Funkcia qsort() je napísaná všeobecne a tak nemá žiadne konkrétne informácie o typoch hodnôt, ktoré triedi. Túto záležitosť rieši naša užívateľská funkcia, ktorá správne porovná hodnoty. Lebo my vieme, čo triedime. Ukážku použití funkcie spolu s meraním času a použitím generátoru náhodných čísel nám dáva program:

15 /********************************************************/ /* subor fn_qsrt.c */ /* ukazuje pouzitie qsort() a definiciu a pretypovanie */ /* uzivatelskej porovnavacej funkcie */ /********************************************************/ #include <time.h> #include <stdio.h> #include <stdlib.h> #define POCET 1000 #define RND_START 1234 int float_sort (const float *a, const float *b) return (*a - *b); /* <0, ==0, >0 */ /* int float_sort (const float *a, const float *b) */ void test (float *p, unsigned int pocet) /* otestuje ci dane pole je zotriedene vzostupne */ int chyba = 0; for (;!chyba && --pocet > 0; p++) if (*p > *(p+1)) chyba=1; puts ((chyba)? "\npole nieje zotriedene\n" : "\npole je zotriedene\n"); /* void test (float *p,unsigned int pocet) */ void vypln(float *p, int pocet) /* vypni pole dane adresou a poctom prvkov nahodnymi */ /* cislami pomocou generatora nahodnych cisel */ srand(rnd_start); while (pocet-- > 0) *p++ = (float) rand(); /* void vypln(float *p, int pocet) */ int main (void) static float pole [POCET]; clock_t start, end; vypln (pole, POCET); start = clock(); qsort(pole, POCET, sizeof(*pole), (int (*) (const void *, const void *)) float_sort); end = clock(); printf ("Triedenie qsort trvalo %fs", (end - start) / CLK_TCK); test (pole, POCET); getc (stdin); return 0; /* int main (void) */ Pri práci s ukazovateľmi na ukazovatele, a teda aj na funkcie, je veľmi užitočné zaviesť nový typ, ktorý definujeme podľa nášho zámeru. Odkaz na tento nový typ výrazne sprehľadní náš program. Pred uvedením ďalšej ukážky poznamenajme, že odkazy na funkcie môžu byť aj externé. Znamená to, že máme možnosť nezávisle na zdrojovom texte definovať funkciu s požadovanými vlastnosťami, ktorú potom pripojíme do výsledného programu. Naša ukážka však používa len ukazovateľ na v súbore definované funkcie.

16 /********************************/ /* subor PTR_FN01.C */ /* pole ukazovateľov na funkciu */ /********************************/ #include <stdio.h> #include <process.h> typedef void (*menu_fcn) (void); /* definicia typu */ menu_fcn command[3]; /* pole troch ukazovateľov na funkcie */ void fn_1(void) /* definicia prvej funkcie */ /**************/ puts("funkce cislo 1\n"); /*puts() je kratsi, nez printf() */ /* void fn_1(void) */ void fn_2(void) /* definicia druhej funkcie */ /**************/ puts("funkce cislo 2\n"); /* void fn_2(void) */ void fn_3(void) /* definicia tretej funkcie */ /**************/ puts("funkce cislo 3\nKONEC\n"); exit(0); /* ukoncenie chodu programu */ /* void fn_3(void) */ void assign_fn(void) /* priradenie ukazovateľa na fciu */ /******************/ /* do pola ukazovateľov */ command[0] = fn_1; command[1] = fn_2; command[2] = fn_3; /* void assign_fn(void) */ void menu(void) /* funkcia s ponukou */ /*************/ int choice; do puts("1\tpolozka\n2\tpolozka\n3\tukoncenie\n"); putchar('>'); scanf("%d", &choice); if (choice >= 1 && choice <= 3) command[choice - 1](); /* ^ volanie funkcie pomocou pola ukazovateľov, () su nutne */ while (1); /* nekonecny cyklus */ /* void menu(void) */ int main(void) /* hlavna funkcia programu */ /************/ assign_fn(); /* volanie spravnej inicializacie pola ukazovatelov */ menu(); /* volanie ponuky, obsahuje aj volbu ukoncenia */ return 0; /* tento riadok je vlastne zbytocny, program */ /* ukonci exit() v tretej funkcii - fn_3 */ /* int main(void) */

17 7.8. Argumenty príkazového riadku Pokiaľ ešte spúšťame programy z príkazového riadku, asi rovnako vieme, že im môžeme predať argumenty. Často to bývajú mená vstupného a výstupného súboru, prepínače.... Rovnaká situácia je aj v prípade, kedy spúšťame program z iného programu. Aby nám boli argumenty príkazového riadku v programe dostupné, stačí rozšíriť definíciu funkcie main o dva argumenty. Situácia je podobná, ako pri funkcii s premenným počtom argumentov. Prvý argument funkcie main() udáva počet argumentov príkazovom riadku (1 = len meno programu, 2 = meno programu + jeden argument,...). Je celočíselného typu. Druhý argument funkcie main() predstavuje hodnoty týchto argumentov. Jeho typ je pochopiteľne pole ukazovateľov na reťazce, lebo nimi argumenty príkazového riadku skutočne sú. Je dobrým zvykom popísané argumenty funkcie main() pomenovať argc a argv, kde c znamená count a v znamená value. Program zobrazujúci argumenty, s ktorými bol spustený: /************************************************/ /* subor CMD_LN04.C */ /* pomocou ukazovateľov, dva formaty printf */ /************************************************/ #include <stdio.h> int main(int argc, char **argv) while (argc-- > 0) printf((argc > 0)? "%s " : "%s\n", *argv++); return 0; Pre lepšiu predstavu sa pozrime, ako bude vyzerať situácia s argumentmi príkazového riadku pri spustení príkladu. Priznajme, že prvý argument, teda cmd_ln04, bude do prostredia spusteného programu rozvinutý v úplnej podobe. Viac-menej verme, že obrázok je, cez drobnú nepresnosť, užitočný.

18 Na záver rozsiahlej kapitoly venovanej poliam a ukazovateľom si zopakujme hlavné zásady pre prácu s nimi: nesmieme sa odkazovať na neinicializovaný ukazovateľ ak je p ukazovateľ na nejaký typ, potom *p je práve ta hodnota, na ktorú ukazuje identifikátor poľa je len konštantný ukazovateľ na toto pole nebojme sa aritmetiky ukazovateľov Predchádzajúca kapitola Obsah Začiatok Nasledujúca kapitola

Databázové systémy. SQL Window functions

Databázové systémy. SQL Window functions Databázové systémy SQL Window functions Scores Tabuľka s bodmi pre jednotlivých študentov id, name, score Chceme ku každému doplniť rozdiel voči priemeru 2 Demo data SELECT * FROM scores ORDER BY score

More information

VYLEPŠOVANIE KONCEPTU TRIEDY

VYLEPŠOVANIE KONCEPTU TRIEDY VYLEPŠOVANIE KONCEPTU TRIEDY Typy tried class - definuje premenné a metódy (funkcie). Ak nie je špecifikovaná inak, viditeľnosť členov je private. struct - definuje premenné a metódy (funkcie). Ak nie

More information

Spájanie tabuliek. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Spájanie tabuliek. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Spájanie tabuliek Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Úvod pri normalizácii rozdeľujeme databázu na viacero tabuliek prepojených cudzími kľúčmi SQL umožňuje tabuľky opäť spojiť

More information

kucharka exportu pro 9FFFIMU

kucharka exportu pro 9FFFIMU požiadavky na export kodek : Xvid 1.2.1 stable (MPEG-4 ASP) // výnimočne MPEG-2 bitrate : max. 10 Mbps pixely : štvorcové (Square pixels) rozlíšenie : 1920x1080, 768x432 pre 16:9 // výnimočne 1440x1080,

More information

Databázy (1) Prednáška 11. Alexander Šimko

Databázy (1) Prednáška 11. Alexander Šimko Databázy (1) Prednáška 11 Alexander Šimko simko@fmph.uniba.sk Contents I Aktualizovanie štruktúry databázy Section 1 Aktualizovanie štruktúry databázy Aktualizácia štruktúry databázy Štruktúra databázy

More information

Textový formát na zasielanie údajov podľa 27 ods. 2 písm. f) zákona

Textový formát na zasielanie údajov podľa 27 ods. 2 písm. f) zákona Popis textového formátu a xsd schémy na zasielanie údajov podľa 27 ods. 2 písm. f) zákona (formu na zaslanie údajov si zvolí odosielateľ údajov) Textový formát na zasielanie údajov podľa 27 ods. 2 písm.

More information

Aplikačný dizajn manuál

Aplikačný dizajn manuál Aplikačný dizajn manuál Úvod Aplikačný dizajn manuál je súbor pravidiel vizuálnej komunikácie. Dodržiavaním jednotných štandardov, aplikácií loga, písma a farieb pri prezentácii sa vytvára jednotný dizajn,

More information

2. Konštanty, premenné a deklarácie.

2. Konštanty, premenné a deklarácie. 2. Konštanty, premenné a deklarácie. 2.1 Identifikátory, kľúčové slová a komentáre. 2.2 Základné typy dát 2.3 Konštanty a premenné. Konštanty Celočíselné konštanty Racionálne konštanty Znakové konštanty

More information

Registrácia účtu Hik-Connect

Registrácia účtu Hik-Connect Registrácia účtu Hik-Connect Tento návod popisuje postup registrácie účtu služby Hik-Connect prostredníctvom mobilnej aplikácie a webového rozhrania na stránke www.hik-connect.comg contents in this document

More information

Poradové a agregačné window funkcie. ROLLUP a CUBE

Poradové a agregačné window funkcie. ROLLUP a CUBE Poradové a agregačné window funkcie. ROLLUP a CUBE 1) Poradové a agregačné window funkcie 2) Extrémy pomocou DENSE_RANK(), TOP() - Príklady 3) Spriemernené poradia 4) Kumulatívne súčty 5) Group By a Datepart,

More information

Programovanie v jazyku Python. Michal Kvasnica

Programovanie v jazyku Python. Michal Kvasnica Programovanie v jazyku Python Michal Kvasnica Organizačné detaily Prednášky aj cvičenia v 638 Povinná účasť na cvičeniach Hodnotenie: priebežné odovzdávanie zadaní (40% známky) záverečný projekt na skúške

More information

Anycast. Ľubor Jurena CEO Michal Kolárik System Administrator

Anycast. Ľubor Jurena CEO Michal Kolárik System Administrator Anycast Ľubor Jurena CEO jurena@skhosting.eu Michal Kolárik System Administrator kolarik@skhosting.eu O nás Registrátor Webhosting Serverové riešenia Správa infraštruktúry Všetko sa dá :-) Index Čo je

More information

Pointers, Arrays, and Strings. CS449 Spring 2016

Pointers, Arrays, and Strings. CS449 Spring 2016 Pointers, Arrays, and Strings CS449 Spring 2016 Pointers Pointers are important. Pointers are fun! Pointers Every variable in your program has a memory location. This location can be accessed using & operator.

More information

Copyright 2016 by Martin Krug. All rights reserved.

Copyright 2016 by Martin Krug. All rights reserved. MS Managed Service Copyright 2016 by Martin Krug. All rights reserved. Reproduction, or translation of materials without the author's written permission is prohibited. No content may be reproduced without

More information

6. Riadenie chodu programu

6. Riadenie chodu programu 6. Riadenie chodu programu 6.1. Výrazový príkaz 6.2. Prázdny príkaz 6.3. Bloky. 6.4. Oblasť platnosti identifikátora 6.5. Podmienený príkaz if-else. 6.6. Prepínač 6.7. Cykly Cyklus while Cyklus for Cyklus

More information

Databázy (1) Prednáška 08. Alexander Šimko

Databázy (1) Prednáška 08. Alexander Šimko Databázy (1) Prednáška 08 Alexander Šimko simko@fmph.uniba.sk Contents I Subqueries (poddopyty) konštrukcia WITH Section 1 Subqueries (poddopyty) Subquery (poddopyt) Použitie SELECTu na mieste, kde sme

More information

1 Vytvorenie tabuľky

1 Vytvorenie tabuľky Základy jazyka SQL (Structured Query Language) - vyvinula IBM začiatkom 70-tych rokov - je to deklaratívny jazyk (popisuje čo urobiť, nie ako) - je súčasťou veľkých databázových systémov (Informix, Oracle,

More information

Desatinné čísla #1a. Decimal numbers #1b. How much larger is 21,8 than 1,8? Desatinné čísla #2a. Decimal numbers #2b. 14 divided by 0,5 equals...

Desatinné čísla #1a. Decimal numbers #1b. How much larger is 21,8 than 1,8? Desatinné čísla #2a. Decimal numbers #2b. 14 divided by 0,5 equals... Desatinné čísla #1a Mravec išiel 5,5 cm presne na sever, potom 3,4 cm na východ, 1,8 cm na juh, 14,3 cm na západ, 1,3 cm na sever a 10,9 cm na východ. Najmenej koľko cm musí teraz prejsť, aby sa dostal

More information

Triedy v C++ 1. Úvod do tried

Triedy v C++ 1. Úvod do tried 1. Úvod do tried Používanie nového dátového typu ktorý budeme oht class trieda nás dovedie k využívaniu objektových vlastností jazyka C++. Tento nový typ programov OOP objektovo orientované programovanie

More information

Ochrana proti DDoS za použitia open-source software. Katarína Ďurechová

Ochrana proti DDoS za použitia open-source software. Katarína Ďurechová Ochrana proti DDoS za použitia open-source software Katarína Ďurechová katarina.durechova@nic.cz 30.11.2013 Distributed Denial of Service odopretie služby dosiahnutím limitu pripojenia sieťovej karty CPU

More information

TYPY, KONŠTANTY, PROCEDÚRY A FUNKCIE PRE PRÁCU S POĽOM

TYPY, KONŠTANTY, PROCEDÚRY A FUNKCIE PRE PRÁCU S POĽOM TYPY, KONŠTANTY, PROCEDÚRY A FUNKCIE PRE PRÁCU S POĽOM Doposiaľ sme si ukázali základné štruktúry a jednotky jazyka. Pracovali sme s premennými rôznych typov ako aj s konštantnými hodnotami. Používali

More information

Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami)

Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami) I2AI: Lecture 04 Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami) Lubica Benuskova Reading: AIMA 3 rd ed. chap. 6 ending with 6.3.2 1 Constraint satisfaction problems (CSP) We w

More information

2. Týždeň MySQL - dátové typy a funkcie num. a reťazcové

2. Týždeň MySQL - dátové typy a funkcie num. a reťazcové 2. Týždeň MySQL - dátové typy a funkcie num. a reťazcové 1. Prvky jazyka MySQL http://dev.mysql.com/doc/refman/5.7/en/language-structure.html 2. Typy a pretypovanie http://dev.mysql.com/doc/refman/5.7/en/data-types.html

More information

1 Komplexný príklad využitia OOP

1 Komplexný príklad využitia OOP 1 Komplexný príklad využitia OOP Najčastejším využitím webových aplikácií je komunikácia s databázovým systémom. Komplexný príklad je preto orientovaný práve do tejto oblasti. Od verzie PHP 5 je jeho domovskou

More information

Testovanie bieleho šumu

Testovanie bieleho šumu Beáta Stehlíková FMFI UK Bratislava Opakovanie z prednášky Vygenerujeme dáta Vygenerujeme dáta: N

More information

VLSM a CIDR. CCNA2 Kapitola Cisco Systems, Inc. All rights reserved. Cisco Public 1

VLSM a CIDR. CCNA2 Kapitola Cisco Systems, Inc. All rights reserved. Cisco Public 1 VLSM a CIDR CCNA2 Kapitola 6 1 Trošku histórie Pred rokom 1981 IP adresy používali na špecifikáciu siete len prvých 8 bitov Rok1981, RFC 791 Zaviedol adresný priestor s tromi triedami adries Polovica 90

More information

CSCE150A. Introduction. Basics. String Library. Substrings. Line Scanning. Sorting. Command Line Arguments. Misc CSCE150A. Introduction.

CSCE150A. Introduction. Basics. String Library. Substrings. Line Scanning. Sorting. Command Line Arguments. Misc CSCE150A. Introduction. Chapter 9 Scanning Computer Science & Engineering 150A Problem Solving Using Computers Lecture 07 - Strings Stephen Scott (Adapted from Christopher M. Bourke) Scanning 9.1 String 9.2 Functions: Assignment

More information

Computer Science & Engineering 150A Problem Solving Using Computers. Chapter 9. Strings. Notes. Notes. Notes. Lecture 07 - Strings

Computer Science & Engineering 150A Problem Solving Using Computers. Chapter 9. Strings. Notes. Notes. Notes. Lecture 07 - Strings Computer Science & Engineering 150A Problem Solving Using Computers Lecture 07 - Strings Scanning Stephen Scott (Adapted from Christopher M. Bourke) 1 / 51 Fall 2009 cbourke@cse.unl.edu Chapter 9 Scanning

More information

CSC209H Lecture 4. Dan Zingaro. January 28, 2015

CSC209H Lecture 4. Dan Zingaro. January 28, 2015 CSC209H Lecture 4 Dan Zingaro January 28, 2015 Strings (King Ch 13) String literals are enclosed in double quotes A string literal of n characters is represented as a n+1-character char array C adds a

More information

Computer Science & Engineering 150A Problem Solving Using Computers

Computer Science & Engineering 150A Problem Solving Using Computers Computer Science & Engineering 150A Problem Solving Using Computers Lecture 07 - Strings Stephen Scott (Adapted from Christopher M. Bourke) 1 / 51 Fall 2009 Chapter 9 9.1 String 9.2 Functions: Assignment

More information

8. Characters, Strings and Files

8. Characters, Strings and Files REGZ9280: Global Education Short Course - Engineering 8. Characters, Strings and Files Reading: Moffat, Chapter 7, 11 REGZ9280 14s2 8. Characters and Arrays 1 ASCII The ASCII table gives a correspondence

More information

Spôsoby zistenia ID KEP

Spôsoby zistenia ID KEP Spôsoby zistenia ID KEP ID KEP (kvalifikovaný elektronický podpis) je možné zistiť pomocou napr. ovládacieho panela, prostredíctvom prehliadača Internet Expolrer, Google Chrome alebo Mozilla Firefox. Popstup

More information

Databázy (2) Prednáška 08. Alexander Šimko

Databázy (2) Prednáška 08. Alexander Šimko Databázy (2) Prednáška 08 Alexander Šimko simko@fmph.uniba.sk Contents I Funkcie Zložené typy PL/pgSQL Agregačné funkcie Funkcie Section 1 Funkcie Funkcie PostgreSQL umožňuje vytvoriť si vlastné databázové

More information

Lecture07: Strings, Variable Scope, Memory Model 4/8/2013

Lecture07: Strings, Variable Scope, Memory Model 4/8/2013 Lecture07: Strings, Variable Scope, Memory Model 4/8/2013 Slides modified from Yin Lou, Cornell CS2022: Introduction to C 1 Outline Review pointers New: Strings New: Variable Scope (global vs. local variables)

More information

TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca

TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca Obsah balenia TL-WR743ND Rýchly inštalačný sprievodca PoE injektor Napájací adaptér CD Ethernet kábel Systémové požiadavky

More information

Obrázok č. 1 Byte. Obrázok č. 2 Slovo

Obrázok č. 1 Byte. Obrázok č. 2 Slovo C++ pod lupou Nie som ortodoxným prívržencom nijakého dnes používaného jazyka, poznám ich už riadnu kôpku, ale najbližšie mám práve k C++. Prečo, o tom by sa dalo diskutovať donekonečna, nie je to však

More information

SYSTEM AND LIBRARY CALLS. UNIX Programming 2015 Fall by Euiseong Seo

SYSTEM AND LIBRARY CALLS. UNIX Programming 2015 Fall by Euiseong Seo SYSTEM AND LIBRARY CALLS UNIX Programming 2015 Fall by Euiseong Seo Now, It s Programming Time! System Call and Library Call Who does process the following functions? strcmp() gettimeofday() printf() getc()

More information

PRACOVNÝ ZOŠIT Z PROGRAMOVANIA 2

PRACOVNÝ ZOŠIT Z PROGRAMOVANIA 2 PRACOVNÝ ZOŠIT Z PROGRAMOVANIA 2 Ing. Igor Marko, 2011 PODPROGRAMY V PASCALE DEFINÍCIA, GLOBÁLNE A LOKÁLNE PREMENNÉ Podprogram v programovacom jazyku je postupnosť príkazov vystupujúcich pod jedným názvom,

More information

Mikroprocesor. Mikroprocesor. Program. Federico Faggin, tvorca prvého mikroprocesora i4004

Mikroprocesor. Mikroprocesor. Program. Federico Faggin, tvorca prvého mikroprocesora i4004 Mikroprocesor Federico Faggin, tvorca prvého mikroprocesora i4004 Mikroprocesor Program 1. Choď z D-110 do D0A1 2. Presuň obsah z adresy 33 do košíka 3. Prines obsah košíka do D-110 4. Spracuj obsah 5.

More information

COMP 2355 Introduction to Systems Programming

COMP 2355 Introduction to Systems Programming COMP 2355 Introduction to Systems Programming Christian Grothoff christian@grothoff.org http://grothoff.org/christian/ 1 Pointers Pointers denote addresses in memory In C types, the * represents the use

More information

Jeden z variantov príkazu priradenia nám umožňuje zadať za sebou aj viacej vstupných hodnôt, ako napríklad

Jeden z variantov príkazu priradenia nám umožňuje zadať za sebou aj viacej vstupných hodnôt, ako napríklad Príkaz priradenia Príkaz priradenia slúži na priradenie hodnoty premennej. Má tvar premenná = výraz, kde premenná je identifikátor, znak = sa číta priraď a vyhodnotením výrazu sa získa hodnota určitého

More information

Principles of C and Memory Management

Principles of C and Memory Management COMP281 Lecture 9 Principles of C and Memory Management Dr Lei Shi Last Lecture Today Pointer to Array Pointer Arithmetic Pointer with Functions struct Storage classes typedef union String struct struct

More information

CSC209H1S Day Midterm Solutions Winter 2010

CSC209H1S Day Midterm Solutions Winter 2010 Duration: Aids Allowed: 50 minutes 1-8.5x11 sheet Student Number: Last Name: SOLUTION First Name: Instructor: Karen Reid Do not turn this page until you have received the signal to start. (In the meantime,

More information

Advanced Pointer Topics

Advanced Pointer Topics Advanced Pointer Topics Pointers to Pointers A pointer variable is a variable that takes some memory address as its value. Therefore, you can have another pointer pointing to it. int x; int * px; int **

More information

upper and lower case English letters: A-Z and a-z digits: 0-9 common punctuation symbols special non-printing characters: e.g newline and space.

upper and lower case English letters: A-Z and a-z digits: 0-9 common punctuation symbols special non-printing characters: e.g newline and space. The char Type The C type char stores small integers. It is 8 bits (almost always). char guaranteed able to represent integers 0.. +127. char mostly used to store ASCII character codes. Don t use char for

More information

Rýchlosť Mbit/s (download/upload) 15 Mbit / 1 Mbit. 50 Mbit / 8 Mbit. 80 Mbit / 10 Mbit. 10 Mbit / 1 Mbit. 12 Mbit / 2 Mbit.

Rýchlosť Mbit/s (download/upload) 15 Mbit / 1 Mbit. 50 Mbit / 8 Mbit. 80 Mbit / 10 Mbit. 10 Mbit / 1 Mbit. 12 Mbit / 2 Mbit. Fiber 5 Mbit ** 5 Mbit / Mbit 5,90 Fiber 50 Mbit * 50 Mbit / 8 Mbit 9,90 Fiber 80 Mbit * 80 Mbit / Mbit 5,90 Mini Mbit* Mbit / Mbit 9,90 Klasik 2 Mbit* 2 Mbit / 2 Mbit Standard 8 Mbit* 8 Mbit / 3Mbit Expert

More information

Manuál k programu FileZilla

Manuál k programu FileZilla Manuál k programu FileZilla EXO TECHNOLOGIES spol. s.r.o. Garbiarska 3 Stará Ľubovňa 064 01 IČO: 36 485 161 IČ DPH: SK2020004503 support@exohosting.sk www.exohosting.sk 1 Úvod EXO HOSTING tím pre Vás pripravil

More information

Computer Programming: Skills & Concepts (CP) Strings

Computer Programming: Skills & Concepts (CP) Strings CP 14 slide 1 Tuesday 31 October 2017 Computer Programming: Skills & Concepts (CP) Strings Ajitha Rajan Tuesday 31 October 2017 Last lecture Input handling char CP 14 slide 2 Tuesday 31 October 2017 Today

More information

18. Matlab figure ako objekt

18. Matlab figure ako objekt 1 Portál pre odborné publikovanie ISSN 1338-0087 18. Matlab figure ako objekt Foltin Martin MATLAB/Comsol 06.11.2009 Dlhším používaním grafických funkcií v Matlabe, dôjdete k poznaniu že ich možnosti sú

More information

Procedural Programming & Fundamentals of Programming

Procedural Programming & Fundamentals of Programming Procedural Programming & Fundamentals of Programming Exercise 3 (SS 2018) 29.05.2018 What will I learn in the 4. exercise Pointer (and a little bit about memory allocation) Structure Strings and String

More information

Administrative Stuff. More on Strings, File I/O. Last Time. Java API

Administrative Stuff. More on Strings, File I/O. Last Time. Java API Administrative Stuff More on Strings, File I/O September 8, 2016 Assignment 2 posted soon Please make sure that you re getting comfortable with some C development environment. ACM Last Time Java API http://docs.oracle.com/javase/8/docs/api/

More information

More on Strings, File I/O. September 8, 2016

More on Strings, File I/O. September 8, 2016 More on Strings, File I/O September 8, 2016 Administrative Stuff Assignment 2 posted soon Please make sure that you re getting comfortable with some C development environment. ACM Last Time word count

More information

Array Initialization

Array Initialization Array Initialization Array declarations can specify initializations for the elements of the array: int primes[10] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ; initializes primes[0] to 2, primes[1] to 3, primes[2]

More information

Arrays and Strings. CS449 Fall 2017

Arrays and Strings. CS449 Fall 2017 Arrays and Strings CS449 Fall 2017 Arrays Data type for a sequence of variables of the given element type in consecubve memory Element type can be any data type. E.g. char A[10]; // sequence of chars int

More information

Characters and Strings

Characters and Strings Characters and Strings 60-141: Introduction to Algorithms and Programming II School of Computer Science Term: Summer 2013 Instructor: Dr. Asish Mukhopadhyay Character constants A character in single quotes,

More information

Jacobs University Bremen February 7 th, 2017 Dr. Kinga Lipskoch. Practice Sheet. First Name:... Last Name:... Matriculation Number:...

Jacobs University Bremen February 7 th, 2017 Dr. Kinga Lipskoch. Practice Sheet. First Name:... Last Name:... Matriculation Number:... Programming in C II Course: JTSK-320112 Jacobs University Bremen February 7 th, 2017 Dr. Kinga Lipskoch Practice Sheet First Name:... Last Name:... Matriculation Number:... Read all the following points

More information

Lecture 05 Pointers ctd..

Lecture 05 Pointers ctd.. Lecture 05 Pointers ctd.. Note: some notes here are the same as ones in lecture 04 1 Introduction A pointer is an address in the memory. One of the unique advantages of using C is that it provides direct

More information

CS 137 Part 6. ASCII, Characters, Strings and Unicode. November 3rd, 2017

CS 137 Part 6. ASCII, Characters, Strings and Unicode. November 3rd, 2017 CS 137 Part 6 ASCII, Characters, Strings and Unicode November 3rd, 2017 Characters Syntax char c; We ve already seen this briefly earlier in the term. In C, this is an 8-bit integer. The integer can be

More information

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov D.4 Kontajner XML údajov (XMLDataContainer) Príloha č. 11 k výnosu č. 55/2014 Z. z. [pridaná novelou č. 275/2014 Z. z.,

More information

obsahuje 5 príkladov, spolu 29>25 bodov skupina:

obsahuje 5 príkladov, spolu 29>25 bodov skupina: Midterm 2013, verzia A Meno a priezvisko: obsahuje 5 príkladov, spolu 29>25 bodov skupina: 1A) [8 bodov] Zistite, čo počíta nasledujúca rekurzívna funkcia foo pre n>=0. Hint: foo(2013) = 6. static long

More information

Character Array. C Programming. String. A sequence of characters The last character should be \0 that indicates the end of string 5 \0

Character Array. C Programming. String. A sequence of characters The last character should be \0 that indicates the end of string 5 \0 Character Array C Programming Lecture 10-1:A Array &Pointer String A sequence of characters The last character should be \0 that indicates the end of string char greeting[] = "hello"; greeting 0 1 2 3

More information

Arrays and Pointers in C. Alan L. Cox

Arrays and Pointers in C. Alan L. Cox Arrays and Pointers in C Alan L. Cox alc@rice.edu Objectives Be able to use arrays, pointers, and strings in C programs Be able to explain the representation of these data types at the machine level, including

More information

IMPLEMENTACE MODULÁRNÍ ARITMETIKY DO OBVODŮ FPGA A ASIC

IMPLEMENTACE MODULÁRNÍ ARITMETIKY DO OBVODŮ FPGA A ASIC VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV MIKROELEKTRONIKY FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF

More information

REPORT DESIGNER 1 VYTVORENIE A ÚPRAVA FORMULÁRA. úprava formulárov v Money S4 / Money S Vytvorenie formulára

REPORT DESIGNER 1 VYTVORENIE A ÚPRAVA FORMULÁRA. úprava formulárov v Money S4 / Money S Vytvorenie formulára REPORT DESIGNER úprava formulárov v Money S4 / Money S5 Informačný systém Money S4/S5 umožňuje upraviť tlačové zostavy tak, aby plne vyhovovali potrebám používateľa. Na úpravu tlačových zostáv slúži doplnkový

More information

ECE 264 Exam 2. 6:30-7:30PM, March 9, You must sign here. Otherwise you will receive a 1-point penalty.

ECE 264 Exam 2. 6:30-7:30PM, March 9, You must sign here. Otherwise you will receive a 1-point penalty. ECE 264 Exam 2 6:30-7:30PM, March 9, 2011 I certify that I will not receive nor provide aid to any other student for this exam. Signature: You must sign here. Otherwise you will receive a 1-point penalty.

More information

SYSC 2006 C Winter String Processing in C. D.L. Bailey, Systems and Computer Engineering, Carleton University

SYSC 2006 C Winter String Processing in C. D.L. Bailey, Systems and Computer Engineering, Carleton University SYSC 2006 C Winter 2012 String Processing in C D.L. Bailey, Systems and Computer Engineering, Carleton University References Hanly & Koffman, Chapter 9 Some examples adapted from code in The C Programming

More information

CS 33. Introduction to C. Part 5. CS33 Intro to Computer Systems V 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

CS 33. Introduction to C. Part 5. CS33 Intro to Computer Systems V 1 Copyright 2017 Thomas W. Doeppner. All rights reserved. CS 33 Introduction to C Part 5 CS33 Intro to Computer Systems V 1 Copyright 2017 Thomas W. Doeppner. All rights reserved. Basic Data Types int short char -2,147,483,648 2,147,483,647-32,768 32,767-128

More information

Mesačná kontrolná správa

Mesačná kontrolná správa Mesačná kontrolná správa Štrukturálna štúdia dec.16 nov.16 okt.16 sep.16 aug.16 júl.16 jún.16 máj.16 apr.16 mar.16 feb.16 jan.16 Internetová populácia SR 12+ 3 728 988 3 718 495 3 718 802 3 711 581 3 700

More information

Jazyk SQL. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Jazyk SQL. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Jazyk SQL Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Jazyk SQL - Structured Query Language SQL je počítačový jazyk určený na komunikáciu s relačným SRBD neprocedurálny (deklaratívny) jazyk

More information

CSE 230 Intermediate Programming in C and C++ Arrays, Pointers and Strings

CSE 230 Intermediate Programming in C and C++ Arrays, Pointers and Strings CSE 230 Intermediate Programming in C and C++ Arrays, Pointers and Strings Fall 2017 Stony Brook University Instructor: Shebuti Rayana http://www3.cs.stonybrook.edu/~cse230/ Pointer Arithmetic and Element

More information

Arrays. An array is a collection of several elements of the same type. An array variable is declared as array name[size]

Arrays. An array is a collection of several elements of the same type. An array variable is declared as array name[size] (November 10, 2009 2.1 ) Arrays An array is a collection of several elements of the same type. An array variable is declared as type array name[size] I The elements are numbered as 0, 1, 2... size-1 I

More information

Structures. Basics of Structures (6.1) EECS l Now struct point is a valid type. l Defining struct variables: struct point { int x; int y; };

Structures. Basics of Structures (6.1) EECS l Now struct point is a valid type. l Defining struct variables: struct point { int x; int y; }; Structures EECS 2031 25 September 2017 1 Basics of Structures (6.1) struct point { int x; int y; keyword struct introduces a structure declaration. point: structure tag x, y: members The same member names

More information

Dynamic memory allocation

Dynamic memory allocation Dynamic memory allocation outline Memory allocation functions Array allocation Matrix allocation Examples Memory allocation functions (#include ) malloc() Allocates a specified number of bytes

More information

Basic and Practice in Programming Lab7

Basic and Practice in Programming Lab7 Basic and Practice in Programming Lab7 Variable and Its Address (1/2) What is the variable? Abstracted representation of allocated memory Having address & value Memory address 10 0x00000010 a int a = 10;

More information

Arrays and Strings (2H) Young Won Lim 3/7/18

Arrays and Strings (2H) Young Won Lim 3/7/18 Arrays and Strings (2H) Copyright (c) 2014-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or

More information

Procedural Programming

Procedural Programming Exercise 5 (SS 2016) 28.06.2016 What will I learn in the 5. exercise Strings (and a little bit about pointer) String functions in strings.h Files Exercise(s) 1 Home exercise 4 (3 points) Write a program

More information

Arrays, Strings, and Pointers

Arrays, Strings, and Pointers Arrays, Strings, and Pointers Jan Faigl Department of Computer Science Faculty of Electrical Engineering Czech Technical University in Prague Lecture 04 BE5B99CPL C Programming Language Jan Faigl, 2017

More information

Arrays, Strings, and Pointers

Arrays, Strings, and Pointers Arrays, Strings, and Pointers Jan Faigl Department of Computer Science Faculty of Electrical Engineering Czech Technical University in Prague Lecture 04 BE5B99CPL C Programming Language Jan Faigl, 2017

More information

/* toto je viacriadková poznámka */ ako v Delphi, len sa rozlišujú malé a veľké písmená!!!

/* toto je viacriadková poznámka */ ako v Delphi, len sa rozlišujú malé a veľké písmená!!! Organizácia programu #include using namespace std; int main() return 0; // jednoriadková poznámka Identifikátor Dátové typy int (long), unsigned, float (double), bool 0,1, char, trieda

More information

Riešenia a technológie pre jednotnú správu používateľov

Riešenia a technológie pre jednotnú správu používateľov Riešenia a technológie pre jednotnú správu používateľov Radovan Semančík Agenda Úvod: Identity Crisis Technológie správy používateľov Postup nasadenia Záver Súčasný stav IT Security Nekonzistentné bezpečnostné

More information

Recipient Configuration. Štefan Pataky MCP, MCTS, MCITP

Recipient Configuration. Štefan Pataky MCP, MCTS, MCITP Recipient Configuration Štefan Pataky MCP, MCTS, MCITP Agenda Mailbox Mail Contact Distribution Groups Disconnected Mailbox Mailbox (vytvorenie nového účtu) Exchange Management Console New User Exchange

More information

ECE551 Midterm Version 1

ECE551 Midterm Version 1 Name: ECE551 Midterm Version 1 NetID: There are 7 questions, with the point values as shown below. You have 75 minutes with a total of 75 points. Pace yourself accordingly. This exam must be individual

More information

CSC 209H1 S 2012 Midterm Test Duration 50 minutes Aids allowed: none. Student Number: # 1: / 6

CSC 209H1 S 2012 Midterm Test Duration 50 minutes Aids allowed: none. Student Number: # 1: / 6 CSC 209H1 S 2012 Midterm Test Duration 50 minutes Aids allowed: none Last Name: Student Number: First Name: Lecture Section: L0101 Instructor: Reid Do not turn this page until you have received the signal

More information

Javascript Manuál. Drgo Pavel SOŠ

Javascript Manuál. Drgo Pavel SOŠ 2016 Javascript Manuál Drgo Pavel SOŠ 24.7.2016 OBSAH JavaScript návod 01 Úvod do JavaScriptu...3 JavaScript návod 02 Kam s ním...5 JavaScript návod 03 Premenné úvod...9 JavaScript návod 04 Premenné typy...11

More information

package balik; public class TopLevel1 {... }

package balik; public class TopLevel1 {... } Seminář Java Speciální třídy, výčtový typ Radek Kočí Fakulta informačních technologií VUT Březen 2010 Radek Kočí Seminář Java Speciální třídy, výčtový typ 1/ 20 Téma přednášky Vnořené třídy Anonymní třídy

More information

Mesačná kontrolná správa

Mesačná kontrolná správa Mesačná kontrolná správa Štrukturálna štúdia mar.18 feb.18 jan.18 dec.17 nov.17 okt.17 sep.17 aug.17 júl.17 jún.17 máj.17 apr.17 mar.17 Internetová populácia SR 12+ 3 904 509 3 802 048 3 870 654 3 830

More information

Automatizovanie navrhovania objektov v prostredí Autocad

Automatizovanie navrhovania objektov v prostredí Autocad SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE STAVEBNÁ FAKULTA Automatizovanie navrhovania objektov v prostredí Autocad Bakalárska práca SvF- 5342-28794 Študijný program: matematicko-počítačové modelovanie

More information

Štruktúra APK súboru na OS Android

Štruktúra APK súboru na OS Android Masarykova univerzita Fakulta informatiky Ð Û Å«Æ ±²³ µ ¹º»¼½¾ Ý Štruktúra APK súboru na OS Android Bakalárska práca Ivo Hrádek Brno, jar 2015 Prehlásenie Prehlasujem, že táto bakalárska práca je mojím

More information

C Programming Language Review and Dissection III

C Programming Language Review and Dissection III C Programming Language Review and Dissection III Lecture 5 Embedded Systems 5-1 Today Pointers Strings Formatted Text Output Reading Assignment: Patt & Patel Pointers and Arrays Chapter 16 in 2 nd edition

More information

Informatika 2. Generiká

Informatika 2. Generiká Informatika 2 Generiká Pojmy zavedené v 10. prednáške (1) štandardný vstup a výstup textové súbory binárne súbory objektové prúdy Informatika 2 1 Pojmy zavedené v 10. prednáške (2) objektové prúdy nečitateľné

More information

Arrays, Strings, and Pointers

Arrays, Strings, and Pointers Arrays, Strings, and Pointers Jan Faigl Department of Computer Science Faculty of Electrical Engineering Czech Technical University in Prague Lecture 04 B3B36PRG C Programming Language Jan Faigl, 2018

More information

XHTML1folie.doc XHTML Čo bolo predtým?

XHTML1folie.doc XHTML Čo bolo predtým? XHTML1folie.doc 1 1.1 XHTML 1.1.1 Čo bolo predtým? XHTML - nová definícia jazyka HTML vo forme XML. Vývoj HTML: r. 1995 HTML 2.0 (základné formátovanie a štruktúrovanie, obrázky, formuláre). V r. 1995

More information

[6 marks] All parts of this question assume the following C statement. Parts (b) through (e) assume a variable called ptrs.

[6 marks] All parts of this question assume the following C statement. Parts (b) through (e) assume a variable called ptrs. Question 1. All parts of this question assume the following C statement. Parts (b) through (e) assume a variable called ptrs. char data[256] = "Hop Pop We like to hop."; Part (a) Is the following statement

More information

D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu. Inštalačná príručka

D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu. Inštalačná príručka D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu Inštalačná príručka Obsah 1 Predpoklady pre inštaláciu D.Signer... 3 1.1 Inštalácia.NET Framework... 3 1.1.1 Windows 8, 8.1... 4 1.1.2

More information

Fundamental of Programming (C)

Fundamental of Programming (C) Borrowed from lecturer notes by Omid Jafarinezhad Fundamental of Programming (C) Lecturer: Vahid Khodabakhshi Lecture 9 Pointer Department of Computer Engineering 1/46 Outline Defining and using Pointers

More information

Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15

Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15 Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15 851(01(Bra@slava Titl.: Ján(Hrčka Bohrova(11 851(01(Bra@slava V(Bra@slave(21.11.2013 Vec:(Odpoveď(na(informácie(ohľadom(mandátnej(zmluvy(na(základe(Zákona(č.(211/2000(Zb.

More information

#3 TCP/IP sieťová vrstva

#3 TCP/IP sieťová vrstva #3 TCP/IP sieťová vrstva referenčné modely - TCP/IP a RM OSI - určené na popis architektúry, funkcionality vrstiev, služieb a protokolov - tu preberieme nasledovné dva modely: RM OSI - na popisovanie sietí

More information

LL LED svietidlá na osvetlenie športovísk. MMXIII-X LEADER LIGHT s.r.o. Všetky práva vyhradené. Uvedené dáta podliehajú zmenám.

LL LED svietidlá na osvetlenie športovísk. MMXIII-X LEADER LIGHT s.r.o. Všetky práva vyhradené. Uvedené dáta podliehajú zmenám. LL LED svietidlá na osvetlenie športovísk MMXIII-X LEADER LIGHT s.r.o. Všetky práva vyhradené. Uvedené dáta podliehajú zmenám. LL SPORT LL SPORT je sofistikované vysoko výkonné LED svietidlo špeciálne

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULITMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND

More information

Arrays and Pointers. Arrays. Arrays: Example. Arrays: Definition and Access. Arrays Stored in Memory. Initialization. EECS 2031 Fall 2014.

Arrays and Pointers. Arrays. Arrays: Example. Arrays: Definition and Access. Arrays Stored in Memory. Initialization. EECS 2031 Fall 2014. Arrays Arrays and Pointers l Grouping of data of the same type. l Loops commonly used for manipulation. l Programmers set array sizes explicitly. EECS 2031 Fall 2014 November 11, 2013 1 2 Arrays: Example

More information