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]
|
|