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