Metody předávání hodnot argumentů funkcím
C++ 11

image_printTisk

Tento článek pojednává o způsobech či metodách, jak lze předávat hodnoty argumentů volaným funkcím. V zásadě existují dva přístupy. Prvním je předání hodnotou, druhým je předání odkazem.

Předávání argumentů hodnotou patří mezi nejběžnější a nejčastější přístup. Doposud byl používán i v tomto modulu o základech jazyka C++. Jak název tohoto přístupu napovídá, předává se do volané funkce vlastní hodnota argumentu a nikoliv odkaz na proměnnou, která tuto hodnotu obsahuje. Ukažme si vše na příkladu.

#include <iostream>
using namespace std;

int max(int a, int b) {
    if(a > b) return a;
    else return b;
}

int main() {
    int x, y;
    cout << "Zadejte první číslo: "; cin >> x;
    cout << "Zadejte druhé číslo: "; cin >> y;

    cout << "Maximální hodnota je " << max(x, y) << endl;

    return 0;
}

Příklad obsahuje funkci max, která získává dva argumenty b, které jsou předány hodnotou. Maximální hodnota je pak zapsána na výstupní textovou konzoli.

Složitější případ nastává u druhého přístupu, a to předávání hodnot odkazem. Vnitřně na úrovni binárního kódu se tento způsob realizuje pomocí předávání adresy v paměti, která danou hodnotu obsahuje. Předávání odkazem se používá například v případech, kdy je potřeba změnit hodnotu argumentu volající funkce. V jazyce C++ lze hodnotu předat odkazem dvěma způsoby. První je použití ukazatele, druhým je použití reference. Ukažme si oba přístupy na příkladu.

#include <iostream>
using namespace std;

void swap1(int* pX, int* pY) {
    int tmp = *pX;
    *pX = *pY;
    *pY = tmp;
}

void swap2(int& x, int& y) {
    int tmp = x;
    x = y;
    y = tmp;
}

void print(int a, int b) {
    cout << "A = " << a << "  B = " << b << endl;
}

int main() {
    int a = 1, b = 2;

    print(a, b);
    swap1(&a, &b);
    print(a, b);
    swap2(a, b);
    print(a, b);
       
    return 0;
}

Na příkladu je vidět, že funkce swap1 realizuje výměnu dvou hodnot pomocí ukazatelů a funkce swap2 tutéž akci realizuje pomocí referencí.

  1. musí obsahovat Lvalue, Rvalue
  2. zatím Lvalue a Rvalue vysvětlit laicky dle jazyka C, kde co může stát na straně přiřazovacího operátoru

 

image_printTisk
Metody předávání hodnot argumentů funkcím
C++ 11
Ohodnoťte tento článek

Související články

  • Lambda funkce Tento článek popisuje nový syntaktický zápis funkcí a různých operací. Tento zápis se nazývá lambda funkce nebo lambda výrazy a je primárně určen pro předávání operací jako argument do […]
  • Funkce a její parametry V tomto článku si blíže vysvětlíme pojem funkce v C++, seznámíme se s jejím syntaktickým zápisem včetně zápisu formálních parametrů a dále bude vysvětleno, jak se z funkcí provádí vracení […]
  • Komentáře Tento článek pojednává o způsobu zápisu komentářů ve zdrojových kódech jazyka C++. Budou popsány oba druhy komentářů, tedy jednořádkové i jejich víceřádková varianta. Použití […]
  • Ukazatele V tomto článku si představíme nový pojem ukazatel jako proměnnou obsahující adresu na jinou oblast paměti. Seznámíme se dvěma operátory při související s adresací a na závěr si ukážeme, […]
  • Reference V tomto článku si vysvětlíme nový prvek jazyka C++, a to jsou reference. Jejich funkce je obdobná jako u ukazatelů, jsou tu avšak určité rozdíly, které je třeba mít na paměti. Jak […]
  • Obsluha chyb pomocí výjimek Tento článek je článkem úvodním tematice obsluhy chyb v jazyce C++. V tomto článku si představíme motivaci zavedení výjimek jazyka C++ jako aparátu pro detekci a zpracování chyb. Dále […]