Napíšte dve rôzne funkcie, ktoré dynamicky alokujú pamäť pre pole n int-ov a vrátia pointer na začiatok tohto poľa.
|
[Riešenie]
|
Napíšte funkciu, ktoré dynamicky alokuje pamäť pre dvojrozmerné pole prvkov typu double, ktoré bude mať x riadkov a y stĺpcov. Funkcia vráti pointer na začiatok tohto dvojrozmerného poľa.
|
[Riešenie]
|
Uveďte dva rôzne spôsoby, ktorými sa dá sprístupniť druhý prvok takto deklarovaného poľa:
int a[5];
|
[Riešenie]
|
Uvažujme dve polia, jedno statické, druhé dynamické:
int x[10], *p_x;
p_x = (int*)malloc(10 * sizeof(int));
Aký je rozdiel medzi sizeof(x) a sizeof(p_x)
|
[Riešenie]
|
Opravte chyby v nasledujúcom programe:
int main(void)
{
double *p = malloc(3 * sizeof(double));
p = p + 3;
*p = 3.14;
printf("%f", *p);
return (0);
}
|
[Riešenie]
|
Reťazec je špeciálny prípad jednorozmerného poľa, ktoré je zložené z prvkov typu char. Pracuje sa s ním úplne rovnako ako s ktorýmkoľvek iným poľom. Jediná odlišnosť, ktorú musíme mať napamäti je fakt, že reťazec je vždy ukončený znakom '\0'. Pri alokovaní pamäte pre reťazec sa musí preto alokovať o 1 bajt naviac. Reťazec môže mať ľubovolnú dĺžku, treba si však uvedomiť, že štandardné spracovanie reťazca (pomocou štandardných funkcií – pozri string.h ) končí vždy dosiahnutím prvého znaku '\0'. Samozrejme, ak s reťazcom pracujeme ako s poľom prvkov typu char, môžeme pomocou indexu sprístupniť všetky znaky. Pri práci s reťacom sa môžete stretnúť s uvedenými zápismi, objasnite rozdiel medzi nimi:
a) char s1[10];
b) char *s2 = (char*) malloc(10);
c) char s3[] = "Ahoj";
d) char *s4 = "Nazdar"; |
[Riešenie]
|
Čo bude výsledkom tohto programu?
int main(void)
{
char *p;
for (p = "VIP"; *p; p++) printf("%c", *p - 1);
printf("\n");
return (0);
}
|
[Riešenie]
|
Funkcia main môže mať, aj keď doposiaľ ste na to neboli asi zvyknutí, formálne parametre a to jeden príp. dva – tie sú väčšinou pomenované argc, argv (je to „céčkovská“ tradícia 🙂). Ich úlohou je odovzdať do progamu argumenty zo vstupného príkazového riadku, čiže parametre, s ktorými bol program spustený. Funkcia main môže mať teda hlavičku:
int main(int argc, char *argv[])
resp.
int main(int argc, char **argv)
V oboch prípadoch argc znamená počet reťazcov na príkazovom riadku a argv je pole pointerov na reťazce (dvojrozmerné pole s riadkami rôznej dĺžky).
Napr. ak program pokus.exe spustíme z príkazového riadku takto:
pokus parameter1 parameter2
tak potom:
argc == 3
argv[0] == "pokus"
argv[1] == "parameter1"
argv[2] == "parameter2"
Napíšte program, ktorý prečíta parametre z príkazového riadku a vypíše ich na obrazovku.
|
[Riešenie]
|
 |