Předávání a vracení polí z funkcí
C++ 11

image_printTisk

DO POKROČILÝCH TÉMAT

Tento článek pojednává o práci s poli a funkcemi. Popisuje rozličné metody, jak předat pole jako argument funkci a také jak pole z funkce vrátit.

Existují v zásadě tři pouze formální způsoby, jak předat pole jako argument do funkce. Vždy se jedná o způsob předání pomocí ukazatele. Následující příklad ukazuje všechny tři způsoby. Všechny způsoby jsou si naprosto ekvivalentní.

#include <iostream>
using namespace std;

// Formální parametr pole pomocí ukazatele
int sumArray1(int* p, int count) {
    int sum = 0;
    for(int i = 0; i < count; i++) {
        sum += p[i];
    }
    return sum;
}

// Formální parametr pole pomocí deklarace pole
int sumArray2(int p[], int count) {
    int sum = 0;
    for(int i = 0; i < count; i++) {
        sum += p[i];
    }
    return sum;
}

// Formální parametr pole pomocí deklarace pole s jeho velikostí
int sumArray3(int p[5], int count) {
    int sum = 0;
    for(int i = 0; i < count; i++) {
        sum += p[i];
    }
    return sum;
}

int main() {
    const int count = 10;
    int array[count] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    cout << "Součet hodnot v poli je " << sumArray1(array, count) << endl;
    cout << "Součet hodnot v poli je " << sumArray2(array, count) << endl;
    cout << "Součet hodnot v poli je " << sumArray3(array, count) << endl;
}
Unable to connect to the JDoodle service.

První způsob je deklarace formální parametru pro předání pole jako ukazatele, druhým je deklarace jako pole bez uvedení velikosti a třetím je stejný způsob s uvedení v hranatých závorkách počtu položek pole. OVĚŘIT PRO C++ 11 a rozdíly oproti minulosti.

Pole můžeme vracet z funkce opět jen pomocí ukazatele. Jako u jednoduchých datových typů, i zde platí pravidlo, že nemůžeme vracet pole, které je deklarované jako automatické. Je opět třeba uvést klíčové slovo static k uchování jeho hodnot i po opuštění funkce. Viz následující příklad.

#include <iostream>
using namespace std;

int* getArray() {
    static int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    return array;
}

void printField(int index) {
    cout << "Hodnota na indexu " << index << " je " << getArray()[index] << endl;
}

int main() {
    printField(4);
    getArray()[4] = 100;
    printField(4);
}
Unable to connect to the JDoodle service.

Funkce getArray vrací pomocí ukazatele adresu na statické pole deklarované uvnitř ní. Pak lze pomocí operátoru indexování hodnoty pole číst nebo zapisovat, jak příklad ukazuje.

 

image_printTisk
Předávání a vracení polí z funkcí
C++ 11
Ohodnoťte tento článek

Související články

  • Metody vracení hodnot z funkce DO POKROČILÝCH ASI Tento článek pojednává o způsobech vracení hodnot z funkcí. Jsou to stejné způsoby, o kterých je psáno ve článku předchozím, tedy vracení hodnotou nebo vracení […]
  • Vícerozměrná pole Tento článek pojednává o vícerozměrných polích v jazyce C++. Seznámíme se s jejich významem, deklarací, inicializací a způsobem zápisu a čtení jejich hodnot. Na závěr článku bude zmíněno, […]
  • Aritmetika ukazatelů a pole V tomto článku si vysvětlíme, co je aritmetika ukazatelů. Ukážeme si význam a aplikaci dalších operátorů vztahujících se k ukazatelům a popíšeme si jejich vzájemné vztahy k polím různých […]
  • Pole v C++ V tomto článku si vysvětlíme nový pojem jazyka C++, a to pole nějakých hodnot. Je to jazykový konstrukt, který slouží k uchování seznamu hodnot nějakého datového typu. Je důležité zmínit, […]
  • Ukazatele na pole V tomto článku si probereme ukazatele na pole. Seznámíme se nejen s ukazateli na pole jednorozměrné, ale i na složitější případ, tedy pole vícerozměrná. Vše si zase samozřejmě uvedeme na […]
  • 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, […]