Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

6a - Ukazatele a jejich význam

Ukazatelé mají zásadní význam při volání funkcí. Proč?

V programovacím jazyku C jsou parametry funkci předávány výhradně svojí hodnotou. Znamená to, že při volání funkce je vyhodnocena hodnota parametru, který je funkci předán, a v zásobníku je následně vytvořena formální proměnná (lokální, tj, platná pouze v bloku funkce), která se jmenuje stejně, jako argument funkce a nabývá hodnoty, která je vyhodnocena jako hodnota parametru při volání funkce.

Následující funkce má jeden argument datového typu int. Při zavolání funkce se vytvoří lokální proměnná i, se kterou je možné ve funkci pracovat a která po ukončení běhu funkce automaticky zanikne.

void funkce(int i)
{
    i += 10;
}

Tento přístup je naprosto v pořádku a zcela funkční, pokud stačí zpracovat vstup uvnitř funkce, např. na základě hodnoty argumentu provést nějakou akci. Díky popsanému způsobu předání hodnoty parametru funkci je zajištěno, že hodnota proměnné, kterou byla funkce parametrizována, nebude změněna.

int main()
{
    int a = 10;
 
    printf("a = %i\n");
    funkce(a);
    printf("a = %i\n");
 
    return 0;
}

Pokud chceme nějakým způsobem ovlivňovat paměť, která je alokována mimo funkci, máme k dispozici tři hlavní techniky

Globální proměnná

int a = 10;
 
void funkce()
{
    a += 10;
}
 
int main()
{
    printf("a = %i\n", a);
    funkce()
    printf("a = %i\n", a);
 
    return 0;
}

int funkce(int x)
{
    return x += 10;
}
 
int main()
{
    int a = 10;
 
    printf("a = %i\n", a);
    a = funkce(a);
    printf("a = %i\n", a);
 
    return 0;
}

Nepřímé adresování pomocí ukazatele

void funkce(int * x)
{
    *(x) += 10;
}
 
int main()
{
    int a = 10;
 
    printf("a = %i\n", a);
    funkce(&a);
    printf("a = %i\n", a);
 
    return 0;
}

courses/b0b99prpa/solutions/lab06a.txt · Last modified: 2022/11/01 21:14 by viteks