Riešenia
Úloha 1
Predpokladajme takéto deklarácie:
int a, b;
int *p_a = &a , *p_b = &b;
a)
Volaním funkcie vymena(a, b); sa hodnoty skutočných parametrov (premenných a, b) nezmenia.
b)
Volaním funkcie vymena(&a, &b); vymeníme hodnoty celočíselných premenných a, b.
c)
Volaním funkcie vymena(&p_a, &p_b); vymeníme hodnoty dvoch pointerov p_a, p_b.
Úloha 2
V programe si všimnite, že premenné medzery a male vystupujú vo funkcii ako parametre volané odkazom.
#include <stdio.h>
int CitajRiadok(int *medzery, int *male)
{
char c, poc = 0;
*medzery = 0;
*male = 0;
while ((c = getchar()) != '\n') {
poc++;
if (c == ' ') (*medzery)++;
else if (c >= 'a' && c <= 'z') (*male)++;
}
return ((poc == 0)? 0 : 1);
}
void main(void)
{
int medzery, male;
while (CitajRiadok(&medzery, &male) == 1) {
printf("V precitanom riadku bolo %d medzier"
" a %d malych pismen\n", medzery, male);
}
}
Úloha 3
#include <stdio.h>
typedef void (*TPf)();
void ahoj(); /* funkčné prototypy */
void cau();
void nazdar();
void main(void)
{
TPf pozdravy[2]; /* pole pointerov na funkcie vracajúce void */
int c;
pozdravy[0] = ahoj; /* inicializácia poľa adresami funkcií */
pozdravy[1] = cau;
pozdravy[2] = nazdar;
c = getchar();
pozdravy[c%3](); /* volanie zvolenej funkcie */
}
void ahoj()
{
printf("Ahoj!\n");
}
void nazdar()
{
printf("Nazdar!\n");
}
void cau()
{
printf("Cau!\n");
}
|