∗Pointers

It’s all about pointers…

Motivácia

Pokiaľ chcete naozaj rozumieť programovaniu v jazyku C, musíte porozumieť tomu, čo všetko sa deje s vašimi údajmi a programom na pozadí. Častokrát totiž nestačí len vedieť, že údaje sa nachádzajú niekde v pamäti, ale častokrát potrebujete k tým údajom pristupovať na základe ich adresy. Dnes sa pozrieme bližšie na prácu so smerníkmi.

Poznámka

Samotné príklady na tomto cvičení nebudú reprezentovať ideálne riešenia alebo postupy, ale budú slúžiť len pre osvojenie si predmetnej problematiky.

Ciele

  1. Naučiť sa nové možnosti použitia nástroja cgdb.
  2. Naučiť sa pracovať s operátorom referencie &.
  3. Naučiť sa pracovať s operátorom dereferencie *

Postup

Know Your Enemy

V tomto kroku vytvoríte jednoduchý program na výpočet obsahu štvorca. Popri tom sa naučíte niekoľko noviniek pri používaní nástroja cgdb a zoznámite sa s operátormi referencie a dereferencie.

Úloha 1.1

Vytvorte súbor square.c a vložte do neho nasledujúci kód pre výpočet obsahu štvorca.

Kód pre, ktorý použijete pre experimentovanie, je tento:

Úloha 1.2

Preložte, spustite a otestujte kód.

Ak ste pri prepisovaní alebo kopírovaní neurobili chybu, program sa spustí a pri zadaní strany o veľkosti 10 vypíše hodnotu 100.

Úloha 1.3

Vytvorte premennú p_result, ktorá bude smerníkom na premennú result.

Začnite správnou deklaráciou premennej p_result. To, či ste správne priradili jej hodnotu, si môžete overiť buď kontrolným výstupom alebo pomocou nástroja cgdb.

Úloha 1.4

Po vypísaní výsledku ešte vypíšte adresu, hodnotu a veľkosť zaberaného miesta v pamäti premnných result a p_result.

Výstup by teda mohol vyzerať nasledovne:

The address of result is:       0x7ffff2a5abf8
The address of p_result is:     0x7ffff2a5abf0
The value of result is:         100.000000
The value of p_result is:       0x7ffff2a5abf8
The value of *p_result is:      100.000000
The size of result is:          4 bytes
The value of p_result is:       8 bytes

Swap (Again)

Funkcia swap na výmenu obsahu dvoch premenných. Znova. Tentokrát okrem dvoch celých čísiel vymení aj obsah dvoch reťazcov.

Úloha 2.1

Vytvrote súbor swaps.c a vložte do neho nasledujúci kód.

Kód programu:

Úloha 2.2

Program preložte a spustit.

Úloha 2.3

Funkcia na výmenu reťazcov nefunguje správne a preto ju opravte.

Overte si jej správanie pomocou nástroja cgdb. Všimnite si, ako je to s výmenou parametrov vo funkcii swap_nums(), ako sú predávané adresy pomocou parametrov a následne porovnajte toto správanie vo funkcii swap_strings().

Additional Resources

  • Week 01 - prvá prednáška venujúca sa problematike smerníkov

  • Debugging - Základy práce s nástrojom cgdb, ladenie programov, polia, operátor sizeof