10. Test

Vyskúšajte sa! Vyberte pre každú z otázok jedinú správnu z ponúknutých odpovedí. Po vyplnení testu stlačte Hotovo a dozviete sa, ako ste uspeli.


1. Nech p je pointer na int a i je premenná typu int. Ktoré z uvedených priradení NIE je správne?

 (A)   p = 0;
 (B)   p = i;
 (C)   p = p + 1;
 (D)   p = &i;

2. Čo je výstupom daného programu?

int main(void)
{
	int i, j, *p, *q;
	p = &i;
	q = &j;
	*p = 5;
	*q = *p + i;
	printf("i = %d, j = %d\n", i, j);
	return (0);
}
 (A)   i = 5, j = 10
 (B)   i = 5, j = 5
 (C)   i = 10, j = 5
 (D)   Nič. Program skončí chybou.

3.  Konštanta NULL má (hexadecimálne) hodnotu:

 (A)   0xffffffff
 (B)   0x11111111
 (C)   0xf5f5f5f5
 (D)   0x00000000

4. Deklarácie int *xint* x majú rovnaký význam.

 (A)   áno
 (B)   nie

5. Dve pamäťové miesta môžu mať rovnakú adresu.

 (A)   áno
 (B)   nie

6. Pointery môžu uchovávať adresy premenných ktorého typu?

 (A)   int
 (B)   char
 (C)   struct
 (D)   Všetkých vyššie uvedených.

7. Operátor & sa nazýva:

 (A)   adresový operátor
 (B)   dereferenčný operátor
 (C)   operátor skoku
 (D)   operátor logického súčinu

8. Operátor * NIE je možné použiť ako operátor

 (A)   násobenia
 (B)   dereferencie
 (C)   násobenia pointerov
 (D)   pri deklarácii pointerov

9. Čo bude obsahovať premenná i po vykonaní nasledujúceho kódu?

int i = 17;
int *p = &i;
*p = 98;
 (A)   98
 (B)   17
 (C)   81
 (D)   0

10. Akým príkazom zmeníme hodnotu premennej i na 2003?

int *p;
int i;
int k;
i = 63;
k = i;
p = &i; 
 (A)   k = 2003;
 (B)   *k = 2003;
 (C)   p = 2003;
 (D)   *p = 2003;

11. Aké hodnoty nadobudnú premenné ij po vykonaní uvedenej sekvencie príkazov?

int i = 23;
int j = 72;
int *p1;
int *p2;
p1 = &i;
p2 = &j;
*p1 = *p2;
 (A)   i = 23, j = 23
 (B)   i = 23, j = 72
 (C)   i = 72, j = 23
 (D)   i = 72, j = 72

12. Akú hodnotu bude mať premenná i po vykonaní uvedených príkazov?

int i = 2;
int k = 4;
int *p1;
int *p2;
p1 = &i;
p2 = &k;
p1 = p2;
*p1 = 6;
*p2 = 8;
 (A)   2
 (B)   4
 (C)   6
 (D)   8

13. Akú hodnotu bude mať premenná i po vykonaní uvedených príkazov?

int i = 2;
int k = 4;
int *p1;
int *p2;
p1 = &i;
p2 = &k;
*p1 = *p2;
*p1 = 6;
*p2 = 8;
 (A)   2
 (B)   4
 (C)   6
 (D)   8

14. Číslo 0xabcd je v binárnej číselnej sústave číslo

 (A)   1101110010111010
 (B)   1010101111001101
 (C)   1010101010101010
 (D)   0101010101010101

15. Majme premennú s typu záznam (struct), ktorého jedna zo zložiek je a. Hodnotu tejto zložky môžeme sprístupniť zápisom s->a

 (A)   áno
 (B)   nie

16. Deklaráciou typedef int *p_int sme vytvorili premennú s názvom p_int, ktorej hodnotami môžu byť adresy premenných typu int.

 (A)   áno
 (B)   nie

17. Pole môže vystupovať aj ako parameter funkcie. Do funkcie sa ako skutočný parameter odovzdáva jeho adresa.

 (A)   áno
 (B)   nie

18. Čo je výstupom daného programu?

void plus_10(int a, int *p)
{
	*p = a  + 10;
}

int main(void)
{
	int x = 2, y = 6;
	plus_10(x, &x);
	printf("x = %d, y = %d\n", x, y);
	plus_10(x, &y);
	printf("x = %d, y = %d\n", x, y);
	return (0);
}

 (A)   x = 12, y = 6; x = 12, y = 22
 (B)   x = 2, y = 6; x = 2, y = 6
 (C)   x = 8, y = 6; x = 8, y = 14
 (D)   x = 12, y = 6; x = 12, y = 18

19. Funkcie nie sú základným údajovým typom, preto nemôžeme použiť pointer na funkciu.

 (A)   áno
 (B)   nie

20. Nasledujúca funkcia:

void zahada(int *a, int *b)
{
	if (*a != *b) {
		int pom = *a;
		*a = *b;
		*b = pom;
	}
}
 (A)   Vymení hodnoty dvoch celočíslených premenných
 (B)   Nastaví obe premenné na rovnakú hodnotu
 (C)   Utriedi dve premenné podľa veľkosti
 (D)   Nič

21. V jazyku C môžeme reťazec (string) chápať ako pointer na char.

 (A)   áno
 (B)   nie

22. Sú dané nasledujúce deklarácie poľa a ďalších premenných:

float a[] = {1.0, 2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7};
float *ptr1, *ptr2;
Ktoré s uvedených priradení NIE je dovolené?
 
 (A)   ptr1 = a;
 (B)   ptr2 = ptr1 = &a[2];
 (C)   a = 3.14;
 (D)   Všetky tri priradenia sú nesprávne

23. Ak ret je pointer na char, ktorý ukazuje na reťazec „Ahoj, svet!“ tak ret[3] má hodnotu 'o'.

 (A)   áno
 (B)   nie

24. Čo je výstupom daného programu?

void funkcia(int a[])
{
	printf("a[0] = %d, a[1] = %d, a[2] = %d\n", a[0], a[1], a[2]);
	a[1] = 0;
}

int main(void)
{
	int a[3] = {1, 2, 3};
	funkcia(a);
	printf("a[0] = %d, a[1] = %d, a[2] = %d\n", a[0], a[1], a[2]);
	return (0);
}
 (A)   a[0] = 1, a[1] = 2, a[2] = 3;  a[0] = 1, a[1] = 2, a[2] = 3
 (B)   a[0] = 1, a[1] = 2, a[2] = 3;  a[0] = 1, a[1] = 0, a[2] = 3
 (C)   a[0] = 1, a[1] = 0, a[2] = 3;  a[0] = 1, a[1] = 0, a[2] = 3
 (D)   a[0] = 0, a[1] = 0, a[2] = 0;  a[0] = 0, a[1] = 0, a[2] = 0

25. Premenná pom v uvedenej časti programu, je uložená v pamäti na adrese 0x1234 a platí sizeof(int) == 4. Akú hodnotu bude mať premenná p po vykonaní daných príkazov?

int pom;
int *p;
p = &pom;
p += 2;
 (A)   0x1234
 (B)   0x1236
 (C)   0x1242
 (D)   0x123c

26. Predpokladajme, že a je statické pole prvkov typu int a ptr je pointer, ktorý ukazuje na začiatok tohto poľa. Ktorá z možností predstavuje dvojicu ekvivalentných zápisov?

 (A)   a[3]   a   ptr + 3
 (B)   a[2]   a   *ptr + 2
 (C)   a   a   ptr[0]
 (D)   a[5]   a   (ptr + 4)[1]

27. Vyjadrite slovami, akú údajovú štruktúru deklarujeme zápisom

float *data[250];
 (A)   250 polí, pričom každé obsahuje pointer na float
 (B)   pole 250 pointerov na float
 (C)   pointer na pole 250 prvkov typu float
 (D)   Všetky tri možnosti sú nesprávne

28. Majme deklarované pole a funkciu:

void fun(int z[]);
int x[10];
Ako by ste zavolali túto funkciu, ak jej parametrom má byť práve pole x?
 
 (A)   fun(x)
 (B)   fun(x[])
 (C)   fun(x[10])
 (D)   fun(&x)

29.  Majme deklarované pole a funkciu rovnako ako v predchádzajúcej otázke. Nech sa vo funkcii fun zmení hodnota prvku z[1]. Zmení sa tým aj hodnota x[1]?
 
 (A)   áno
 (B)   nie

30. Akú hodnotu bude mať premenná i po vykonaní uvedených príkazov?

int a[10];
int i;
i = &a[9] - a; 
 (A)    8
 (B)    9
 (C)   10
 (D)   Pri kompilácii sa objaví chyba

31. V C má funkcia main takúto hlavičku:

int main(int argc, char **argv);
Čo znamená parameter argv?
 
 (A)   premenná typu char (znak)
 (B)   pole znakov
 (C)   pole polí znakov
 (D)   Ani jedna z vyššie ponúkaných možností nie je správna

32. Pointer, ktorý ukazuje na úsek pamäte, ktorá programu nepatrí (vôbec nebola pridelená alebo už došlo k jej uvoľneniu) by sme mohli nazvať aj „zablúdeným“ pointerom. Ktorý z uvedených poiterov „zablúdil“?

int *y = malloc(sizeof(int));
int *z = y;
free((void*)z);
 (A)   y
 (B)   z
 (C)   oba
 (D)   ani jeden

33. Je v uvedenom kóde chyba? Ak áno, aká?

void *p;
p = (float*) malloc(sizeof(float));
*p = 3.14;
 (A)   Všetko je v poriadku
 (B)   Na údajový typ float nemožno použiť operátor sizeof
 (C)   p je void pointer, nemožno naň použiť operátor dereferencie
 (D)   Pointer na void nemožno vôbec deklarovať

34. Pomocou funkcie malloc môžeme alokovať pamäť pre pole.

 (A)   áno
 (B)   nie

35. Výraz sizeof(int) znamená:

 (A)   maximálna hodnota typu int
 (B)   počet premenných typu int deklarovaných vo funkcii
 (C)   počet bajtov potrebných na uloženie hodnoty typu int
 (D)   maximálny povolený počet znakov pre meno premennej typu int