using arrays with functions c
Vše, co potřebujete vědět o polích s funkcemi v C ++:
V tomto kurzu probereme, jak lze pole používat s funkcemi v C ++. Obecně lze pole předávat funkcím jako argumenty stejným způsobem, jakým předáváme proměnné funkcím.
Ale pokud jde o pole, hodnocení formálních parametrů se mírně liší. Než skutečně prozkoumáme předávání polí funkcím, musíme krátce probrat koncept ukazatele na pole.
=> Podívejte se na výukové návody do hloubky C ++ zde.
Co se naučíte:
Ukazatel na pole
Zvažte následující pole obsahující prvních pět čísel Fibonacciho sekvence.
int fibSeq(5) = {1,1,2,3,5};
Deklarujme ukazatel fibPtr, který nasměruje toto pole.
int* fibPtr; fibPtr = fibSeq;
Když vytiskneme obsah fibPtr, výstup bude prvním prvkem pole fibSeq. Důvodem je, že název pole bez hranatých závorek se vyhodnotí na ukazatel na první prvek pole. Ve výše uvedeném příkladu tedy název „fibSeq“ ukazuje na první prvek pole „fibSeq“.
Níže je jejich obrazové znázornění:
Jak je znázorněno na obrázku výše, ukazuje fibPtr na první prvek pole. Takže pomocí aritmetiky ukazatele můžeme vytisknout všechny prvky pole pouhým použitím fibPtr.
Například, výraz * (fibPtr + 1) bude ukazovat na druhý prvek pole atd.
Převaděč z YouTube na MP4 online zdarma bez stahování
Dejme to do programu a zkontrolujte výstup „fibSeq“ a „fibPtr“:
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
Výstup:
fibSeq ukazuje na: 1
fibSeq (0): 1
fibSeq (1): 1
fibSeq (2): 2
fibSeq (3): 3
fibSeq (4): 5
Ve výše uvedeném příkladu deklarujeme proměnnou ukazatele fibPtr a poté ji namíříme na pole přiřazením názvu pole k fibPtr. Když to uděláme, uděláme fibPtr tak, aby ukazoval na první prvek pole. Potom vytiskneme všechny hodnoty pole pomocí fibPtr.
Předávání polí do funkce
Když máme co do činění s funkcemi, předáváme pole funkci podobným způsobem, jako předáváme proměnné funkci. Proměnnou pole typu () ale nepředáváme.
Místo toho předáme ukazatel do pole, tj. Název pole, který ukazuje na první prvek pole. Potom formální parametr, který přijímá tento ukazatel, je ve skutečnosti proměnná pole. Když předáme ukazatel, můžeme přímo upravit pole uvnitř funkce.
Zvažte následující program, který vypočítá druhou mocninu každého prvku prvních pěti prvků ve Fibonacciho posloupnosti, aby demonstroval předání pole do funkce.
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<Ve výše uvedeném příkladu vypočítáme čtverec každého prvku ve Fibonacciho sekvenci. Tento čtverec se počítá uvnitř funkce. Proto jsme při volání funkce z main předali název pole funkci „fibSeqSquare“. Uvnitř funkce vypočítáme druhé mocniny každého prvku.
Jak jsme předali odkaz na pole cestou ukazatele, jakékoli úpravy, které provedeme v poli uvnitř funkce, budou odrážet pole. Když tedy tiskneme pole v hlavní funkci, dostaneme jako výstup druhé mocniny každého prvku.
Ve výše uvedeném příkladu jsme viděli, že argument pole (formální parametr) funkce fibSeqSquare neurčuje velikost pole, ale pouze hranaté závorky (()), které označují, že se jedná o pole. Toto je jeden způsob určení argumentů pole.
Dalším způsobem, jak určit argument pole ve formálním seznamu parametrů, je určit velikost pole uvnitř hranatých závorek. Oba argumenty fungují podobně. Jedná se jednoduše o dva způsoby, jak určujeme argumenty pole.
Následující příklad ukazuje Array argument zadaný s velikostí.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<Výše uvedený příklad má funkci pro zobrazení Fibonacciho sekvence. Funkce má parametr jako pole, kde jsme také určili velikost pole.
Můžeme také předat vícerozměrná pole funkcím stejným způsobem, jak je znázorněno výše.
co dělat se soubory apk
Vracení polí z funkcí
Pokud jde o vrácení pole z funkce, C ++ nám neumožňuje vrátit celé pole z funkce. Můžeme však vytvořit funkci pro vrácení ukazatele do pole. Ale je v tom háček.
Zvažte následující část kódu:
Angularjs rozhovor otázky a odpovědi pro zkušené
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Ačkoli výše uvedený program jednoduše vrátí ukazatel na první prvek pole z funkce, neprovádí podle očekávání. Nemůžeme zaručit, že nám program poskytne správný výstup. Může, ale nemusí poskytovat správný výstup.
Důvodem je to, že vracíme místní proměnnou z funkce a nejsme si jisti, zda bude v rozsahu v době, kdy bude vrácena, nebo ne.
Stručně řečeno, C ++ neupřednostňuje vracející pole z funkcí.
Pokud vůbec potřebujeme vrátit pole z funkce, musíme použít některou z následujících metod:
# 1) Vrácení dynamicky přidělených polí
Ukazatel pole můžeme vrátit z dynamicky přiděleného pole. K dynamickému přidělení pole používáme operátor „new“. Jelikož se jedná o dynamické pole, bude v rozsahu, pokud pole „nevymažeme“. Program tedy bude fungovat dobře, když vrátíme pole.
To je ukázáno v následujícím příkladu.
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Výstup:
1 2 3
# 2) Vracení statických polí
Protože statické proměnné / pole mají rozsah v celém programu, můžeme také vrátit statická pole z funkcí. Můžeme si vzít příklad, který to dokazuje. To je stejné jako v předchozím příkladu s jediným rozdílem, že v tomto příkladu jsme místo dynamicky přiděleného pole použili statické pole.
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Výstup:
1 2 3
Poznámka : Můžeme také použít strukturu k zabalení pole uvnitř a poté tuto strukturu vrátit. Tímto způsobem přirozeně vrátíme pole z funkce. To však není příliš proveditelná metoda vracení polí.
Závěr
V tomto tutoriálu jsme tedy podrobně diskutovali pole s ohledem na funkce. Doufáme, že tento výukový program by pomohl vyčistit všechny pochybnosti a mylné představy o C ++ polích a funkcích.
=> Podívejte se na průvodce Perfect C ++ Training Guide zde.
Doporučené čtení