Ukazatele - základ



Úkol 1

1) Co znamená následující kód?

int ii1, *pi1;
ii1 = 5;
pi1 = &ii1;

2) Na základě předchozího bodu připište stejný kód pro proměnné ii2 a pi2 tak, aby došlo k inicializaci hodnot ihned v definici proměnných (ne přiřazením na dalším řádku).

3) Pro příklad z minulých dvou bodů nakreslete paměťovou mapu, včetně hodnot v proměnných (bez počítače zapište hodnoty pro int a šipkou naznačte vazby pro ukazatele.

Adresa (hodnota)

Proměnná (název)

Hodnota proměnné


ii1



pi1



ii2



pi2


Správnost nakresleného ověřte pomocí debugeru. (Zatímco hodnoty proměnných (int) budou stále stejné, adresy proměnných a tedy ukazatelů/adres mohou při každém překladu nabývat jiných hodnot (program bude umístněn jinde v paměti)).

Správnost dále ověřte pomocí tisku hodnot proměnných, ukazatelů a adres na kterých proměnné leží (tisk ukazatele je pomocí %p) – pro tisk použijete tedy řetězec (lze použít bez úprav)
hodnota ii1 = %d adresa ii1 = %p, \n
hodnota pi1 = %p adresa pi1 = %p, \n
hodnota ii2 = %d adresa ii2 = %p, \n
hodnota pi2 = %p adresa pi2 = %p \n“
.



Úkol 2

1) (nový projekt) Vyměňte hodnoty dvou proměnných typu double d1 a d2 zprostředkovaně pomocí ukazatelů (na tyto proměnné), ve stejném bloku funkce main, bez použití funkcí.
Nejprve napište část programu, kde vyměníte hodnoty dvou proměnných d1 a d2 (za pomoci pomocné proměnné) bez použití ukazatelů.
Vytvořte dále dvě proměnné typu ukazatel na double (pd1 a pd2), pomocí kterých proměnné d1 a d2 (opět) vyměníte (ukazatele nainicializujete na adresy proměnných double, vlastní proměnné typu double pro výměnu hodnot nepoužijte), výměnu proveďte pomocí ukazatelů na ně (a vhodné pomocné proměnné).
Nakreslete paměťovou mapu a v ní si zakreslete proces výměny proměnných. Realizujte program, který výměnu provede.

2) Stejnou výměnu proměnných z předchozího bodu proveďte pomocí funkce (funkci předejte ukazatele na obě proměnné, pomocí nichž funkce proměnné vymění).
Lze použít stejný kód jako v předchozím, pouze ukazatele na měněné prvky jsou předány jako parametry funkce. Nepoužívejte globální proměnné.

3) V main nadefinujte tři pole intů o 10-ti, 15-ti a 20-ti prvcích (pole naplňte hodnotami od nuly s krokem jedna až po poslední prvek). Napište (jedinou) funkci, která dostane dva parametry, ukazatele na první a poslední prvek pole typu int, a za pomoci těchto ukazatelů pole vytiskne. Vytiskněte všechny pole pomocí této funkce

4) Napište funkci, která vymění prvky (obsah) dvou stejně dlouhých polí. Funkce dostane jako parametry ukazatele na počátek polí a délku.





Upřesnění zadání zde.



Úkol3

1) (nový projekt) Z přednášek si zkopírujte funkci na vyhledání a vrácení minima pomocí ukazatelů. Proveďte rozbor funkce, funkci odlaďte i s voláním včetně definice proměnných.







Poslední změna 2014-04-01