using arrays with functions c
Sve što trebate znati o nizovima s funkcijama na C ++:
U ovom uputstvu razgovarat ćemo o tome kako se nizovi mogu koristiti s funkcijama u C ++. Općenito, nizovi se mogu prosljeđivati funkcijama kao argumenti na isti način na koji prosljeđujemo varijable funkcijama.
Ali procjena formalnih parametara nešto je drugačija kada su u pitanju nizovi. Prije nego što zapravo istražimo prosljeđivanje nizova funkcijama, moramo ukratko razgovarati o konceptu pokazivača na niz.
=> Ovdje pogledajte temeljne vodiče za obuku za C ++.
Što ćete naučiti:
- Pokazivač na niz
- Prosljeđivanje nizova u funkciju
- Vraćanje nizova iz funkcija
- Zaključak
- Preporučena literatura
Pokazivač na niz
Razmotrite sljedeći niz koji sadrži prvih pet brojeva Fibonaccijeve sekvence.
int fibSeq(5) = {1,1,2,3,5};
Proglasimo pokazivač fibPtr da usmjeri ovaj niz.
int* fibPtr; fibPtr = fibSeq;
Kada ispisujemo sadržaj fibPtr, izlaz će biti prvi element niza fibSeq. To je zato što se ime niza bez uglatih zagrada procjenjuje na pokazivač na prvi element niza. Tako u gornjem primjeru naziv 'fibSeq' upućuje na prvi element niza 'fibSeq'.
Ispod je slikovni prikaz istog:
Kao što je prikazano u gornjem slikovnom prikazu, fibPtr pokazuje na prvi element niza. Tako pomoću aritmetike pokazivača možemo ispisati sve elemente niza samo pomoću fibPtr.
Na primjer, izraz * (fibPtr + 1) ukazat će na drugi element niza i tako dalje.
kako otvoriti json datoteku na Windowsima
Stavimo ovo u program i provjerimo izlaz 'fibSeq' i '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); } }
Izlaz:
fibSeq ukazuje na: 1
fibSeq (0): 1
fibSeq (1): 1
fibSeq (2): 2
fibSeq (3): 3
fibSeq (4): 5
U gornjem primjeru deklariramo pokazivačku varijablu fibPtr, a zatim je usmjeravamo prema nizu dodjeljivanjem imena niza fibPtr. Kada to učinimo, fibPtr usmjeravamo na prvi element niza. Zatim ispisujemo sve vrijednosti niza pomoću fibPtr.
Prosljeđivanje nizova u funkciju
Kada imamo posla s funkcijama, prenosimo nizove funkciji na sličan način kao što prenosimo varijable u funkciju. Ali ne prosljeđujemo varijablu niza tipa ().
Umjesto toga, prosljeđujemo pokazivač na niz, tj. Ime niza koji pokazuje na prvi element niza. Tada je formalni parametar koji prihvaća ovaj pokazivač zapravo varijabla niza. Dok prolazimo pokazivač, možemo izravno modificirati niz unutar funkcije.
Razmotrite sljedeći program koji izračunava kvadrat svakog elementa od prvih pet elemenata u Fibonaccijevoj sekvenci kako bi demonstrirao prosljeđivanje niza u funkciju.
#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<U gornjem primjeru izračunavamo kvadrat svakog elementa u Fibonaccijevom nizu. Ovaj se kvadrat izračunava unutar funkcije. Stoga prosljeđujemo ime polja funkciji 'fibSeqSquare' dok pozivamo funkciju iz main-a. Unutar funkcije izračunavamo kvadrate svakog elementa.
Kako smo referencu na niz prosljeđivali putem pokazivača, kakve god izmjene na masi unutar funkcije izvršile, odražit će niz. Stoga, kada ispisujemo niz u glavnoj funkciji, dobivamo kvadrate svakog elementa kao izlaz.
U gornjem primjeru vidjeli smo da argument argumenta (formalni parametar) funkcije fibSeqSquare ne navodi veličinu niza, već samo uglate zagrade (()) da naznači da je to niz. Ovo je jedan od načina specificiranja argumenata niza.
Drugi način specificiranja argumenta polja na formalnom popisu parametara je određivanje veličine polja unutar uglatih zagrada. Oba argumenta djeluju slično. To su jednostavno dva načina na koja specificiramo argumente niza.
Sljedeći primjer prikazuje argument Array naveden s veličinom.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<Gornji primjer ima funkciju prikazivanja Fibonaccijeve sekvence. Funkcija ima parametar kao niz u kojem smo također odredili veličinu niza.
Također možemo proslijediti višedimenzionalne nizove funkcijama na isti način kao što je gore prikazano.
youtube video downloader softver za računalo
Vraćanje nizova iz funkcija
Kada je riječ o vraćanju niza iz funkcije, C ++ ne dopušta da vratimo cijeli niz iz funkcije. Međutim, možemo napraviti funkciju za vraćanje pokazivača na niz. Ali u tome postoji kvaka.
Razmotrite sljedeći dio koda:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Iako gornji program jednostavno vraća pokazivač na prvi element niza iz funkcije, on ne radi kako se očekivalo. Ne možemo garantirati da će nam program dati ispravan rezultat. Može i ne mora dati točan rezultat.
To je zato što iz funkcije vraćamo lokalnu varijablu i nismo sigurni hoće li ona biti u dosegu dok se vrati ili ne.
Dakle, ukratko, C ++ ne favorizira povratne nizove iz funkcija.
Ako uopće trebamo vratiti nizove iz funkcije, trebamo koristiti bilo koju od sljedećih metoda:
# 1) Vraćanje dinamički dodijeljenih nizova
Pokazivač polja možemo vratiti iz dinamički dodijeljenog niza. Koristimo operator ‘novo’ za dinamičku dodjelu niza. Kako je riječ o dinamičkom nizu, on će biti u opsegu, osim ako ga ne 'izbrišemo'. Dakle, program će se dobro pokrenuti kad vratimo niz.
najbolje mjesto za besplatno gledanje animea na mreži
To je prikazano u sljedećem primjeru.
#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< Izlaz:
1 2 3
# 2) Vraćanje statičkih nizova
Kako statičke varijable / nizovi imaju opseg tijekom programa, također možemo vratiti statičke nizove iz funkcija. Možemo uzeti primjer da to pokažemo. To je isto kao i prethodni primjer s jedinom razlikom što smo u ovom primjeru koristili statički niz umjesto dinamički dodijeljenog niza.
#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< Izlaz:
1 2 3
Bilješka : Također možemo koristiti strukturu da omotamo niz unutar nje, a zatim je vratimo. Na taj ćemo način prirodno vratiti niz iz funkcije. Ali ovo nije vrlo izvediva metoda vraćanja nizova.
Zaključak
Stoga smo u ovom vodiču detaljno raspravljali o nizovima s obzirom na funkcije. Nadamo se da bi ovaj vodič pomogao razriješiti sve sumnje i zablude o C ++ nizovima i funkcijama.
=> Ovdje pogledajte Savršeni vodič za obuku za C ++.
Preporučena literatura