Zkouška 15.2 2010

Krakonoš at 2010-02-15 14:36:25

Zkouška byla podobná těm na socketce, nicméně objevila se otázka, kterou jsem předtím nikde nepotkal:

Co vrátí následující program? (bylo to zkrácené, já napsal celý program aby si to každý mohl tipnout a hodit do překladače... navíc tam byl trošku komplikovanější příklad, který jsem mezitím zapoměl, nicméně jde tam hodně o prioritu operátoru a zejména hvězdičky - cčkaři jistě vědí, ostatní možná ne tak si to zkusí:-))

#include <iostream>

int f(int *a, int *b) {
    int i = *a + *b;
    *a = i**a;
    return *a;
}

int main(int argc, char **argv) {
    int a = 3;

    std::cout << f(&a, &a) << std::endl;

    return 0;
}

Jinak zkouška easy, opravoval na místě :-)

batman at 2010-02-15 18:29:29

ten příklad byl trochu jinak:

int a;

int f(int *p, int *q)
{
  *p = a + *q;
  *q = a * *p;
  a = *p + *q; // tak nějak...
  return a;
}

int main()
{
 a = 3;
 f (&a, &a);
}

podstatný je, že 'a' je globální proměnná a předává se do f referencí, takže v tý funkci f vlastně probíhá něco jako:
a = a + a;
a = a * a;
a = a + a;
return a; // výsledek byl 72

i když, teď mě napadlo, jestli nebyly různý varianty... :)