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