4.  Mám ukazovateľ, čo s ním?

4.8  Precvičme si

  Majme deklaráciu:  int i, j, k, *p1, *p2 = &j;  Vysvetlite význam jednotlivých príkazov (pre každý "riadok" zvlášť :-)

p1 = &i;
scanf("%d", &i);
scanf("%d", p2);
*p1 = 22;
printf("%p %p %d\n", &p1, p1, *p1);
printf("%p %d \n", &j, j);
p2 = p1;
k = *p2 + 1;
p1 = NULL;

[Riešenie]

problem.gif  Nech Koruna, Dolar, Euro sú ukazovatele na celočíselné premenné, ktorých hodnoty predstavujú stav nášho účtu v príslušnej mene (v miliónoch :-)  Na začiatku platí:

*Koruna = 0, *Euro = 10, *Dolar = 20.

Aký bude stav na jednotlivých účtoch po vykonaní nasledujúcej sekvencii "transakcií"? (pom je pomocný ukazovateľ rovnakého typu)

*Koruna = *Dolar;
*Euro = *Koruna;
*Dolar = *Dolar + 100;
pom = Euro;
Euro = Dolar;
Dolar = pom;
*Koruna = *Euro;
*pom = *Koruna + *Euro;
pom = NULL;

[Riešenie]

  Je uvedený kód v poriadku? Ak nie, prečo?

a)b)
int main() 
{
   int *x;
   x = &x;
   return (0);
} 
int main()
{
   int *p;
   *p = 100;
   printf("%d\n", *p);
   return (0);
}

[Riešenie]

  Budú sa dať tieto "programy" preložiť a spustiť? Ak áno, čo bude na výstupe?

a)b)
int main() 
{
   int a = 5;
   a = *&*&*&*&a;
   printf("a je %d\n", a);
   return (0);
} 
int main()
{
   int a = 5;
   a = **&&a;
   printf("a je %d\n", a);
   return (0);
}

[Riešenie]