using arrays with functions c
Vse, kar morate vedeti o nizih s funkcijami v C ++:
V tej vadnici bomo razpravljali o tem, kako lahko nize uporabljamo s funkcijami v C ++. Na splošno lahko nize funkcijam posredujemo kot argumente na enak način, kot spremenljivkam posredujemo funkcije.
Toda ocena formalnih parametrov je nekoliko drugačna, ko gre za nize. Preden dejansko preučimo prenos nizov v funkcije, moramo na kratko razpravljati o konceptu kazalca na polje.
=> Tukaj preverite vadnice za globoko učenje C ++.
Kaj se boste naučili:
Kazalec na polje
Razmislite o naslednji matriki, ki vsebuje prvih pet števil Fibonaccijevega zaporedja.
int fibSeq(5) = {1,1,2,3,5};
Deklarirajmo kazalec fibPtr, ki bo usmerjal to matriko.
int* fibPtr; fibPtr = fibSeq;
Ko natisnemo vsebino fibPtr, bo izhod prvi element polja fibSeq. To je zato, ker se ime polja brez oglatih oklepajev izračuna na kazalec na prvi element polja. Tako v zgornjem primeru ime “fibSeq” kaže na prvi element polja “fibSeq”.
Spodaj je slikovna predstavitev istega:
Kot je prikazano v zgornji slikovni predstavitvi, fibPtr kaže na prvi element polja. Tako lahko z uporabo aritmetike kazalca natisnemo vse elemente polja samo s pomočjo fibPtr.
Na primer, izraz * (fibPtr + 1) bo kazal na drugi element polja in tako naprej.
kar vidite, je tisto, kar dobite v spletnem graditelju
Dajmo to v program in preverimo izhodne vrednosti 'fibSeq' in '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); } }
Izhod:
fibSeq kaže na: 1
fibSeq (0): 1
fibSeq (1): 1
fibSeq (2): 2
fibSeq (3): 3
fibSeq (4): 5
V zgornjem primeru razglasimo spremenljivko kazalca fibPtr in nato usmerimo matriko tako, da ji dodelimo ime matrike fibPtr. Ko to storimo, naredimo, da fibPtr kaže na prvi element polja. Nato z vrednostjo fibPtr natisnemo vse vrednosti matrike.
Prenos nizov v funkcijo
Ko imamo opravka s funkcijami, ji posredujemo polja na podoben način, kot spremenljivkam posredujemo funkcije. Vendar ne posredujemo spremenljivke matrike tipa ().
Namesto tega posredujemo kazalec na matriko, tj.ime matrike, ki kaže na prvi element matrike. Potem je formalni parameter, ki sprejme ta kazalec, dejansko spremenljivka polja. Ko prenesemo kazalec, lahko neposredno spremenimo polje znotraj funkcije.
Razmislite o naslednjem programu, ki izračuna kvadrat vsakega elementa prvih petih elementov v Fibonaccijevem zaporedju, da dokaže, kako matrika deluje.
#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<V zgornjem primeru izračunamo kvadrat vsakega elementa v Fibonaccijevem zaporedju. Ta kvadrat se izračuna znotraj funkcije. Zato posredujemo ime polja funkciji “fibSeqSquare” med klicanjem funkcije iz glavnega. Znotraj funkcije izračunamo kvadrate vsakega elementa.
Ko smo sklic na matriko podali s pomočjo kazalca, bodo kakršne koli spremembe matrike znotraj funkcije odražale matriko. Ko torej matriko natisnemo v glavni funkciji, dobimo kvadrat vsakega elementa kot izhod.
V zgornjem primeru smo videli, da argument matrike (formalni parameter) funkcije fibSeqSquare ne določa velikosti polja, temveč le oglate oklepaje (()), ki označujejo, da gre za matriko. To je en način določanja argumentov matrike.
Drug način določanja argumenta matrike na seznamu formalnih parametrov je določitev velikosti polja znotraj oglatih oklepajev. Oba argumenta delujeta podobno. To sta preprosto dva načina, na katera določimo argumente matrike.
Naslednji primer prikazuje argument Array, podan z velikostjo.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<Zgornji primer ima funkcijo za prikaz Fibonaccijevega zaporedja. Funkcija ima parameter kot matriko, pri čemer smo določili tudi velikost matrike.
Večdimenzionalna polja lahko tudi prenesemo funkcijam na enak način, kot je prikazano zgoraj.
nekatere napake programske opreme kažejo na fizično težavo s povezljivostjo
Vrnitev nizov iz funkcij
Ko gre za vrnitev matrike iz funkcije, nam C ++ ne dovoli, da vrnemo celotno matriko iz funkcije. Lahko pa naredimo funkcijo za vrnitev kazalca na matriko. Toda v tem je ulov.
Upoštevajte naslednji del kode:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Čeprav zgornji program iz funkcije preprosto vrne kazalec na prvi element matrike, ne deluje po pričakovanjih. Ne moremo jamčiti, da nam bo program dal pravilne rezultate. Lahko daje ali ne pravilno izhodne podatke.
To je zato, ker iz funkcije vračamo lokalno spremenljivko in nismo prepričani, ali bo v obsegu do vrnitve ali ne.
Tako na kratko C ++ ne daje prednosti vračanju nizov iz funkcij.
Če sploh moramo vrniti polja iz funkcije, moramo uporabiti katero od naslednjih metod:
# 1) Vrnitev dinamično dodeljenih nizov
Kazalec polja lahko vrnemo iz dinamično dodeljenega polja. Za dinamično dodeljevanje matrike uporabljamo operator ‘new’. Ker gre za dinamično polje, bo v obsegu, razen če ga ne izbrišemo. Zato bo program dobro deloval, ko vrnemo matriko.
To je prikazano v naslednjem primeru.
#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< Izhod:
1 2 3
# 2) Vrnitev statičnih nizov
Ker imajo statične spremenljivke / polja obseg v celotnem programu, lahko iz funkcij vrnemo tudi statična polja. Za prikaz tega lahko vzamemo primer. To je enako kot prejšnji primer z edino razliko, da smo v tem primeru namesto dinamično dodeljenega polja uporabili statično matriko.
#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< Izhod:
1 2 3
strojno učenje vs umetna inteligenca vs podatkovno rudarjenje
Opomba : Lahko uporabimo tudi strukturo, da matriko zavijemo vanjo in jo nato vrnemo. Na ta način bomo naravno vrnili matriko iz funkcije. Toda to ni zelo izvedljiva metoda vračanja nizov.
Zaključek
Tako smo v tej vadnici podrobno razpravljali o nizih glede funkcij. Upamo, da bi ta vadnica pomagala razjasniti vse dvome in napačne predstave o nizih in funkcijah C ++.
=> Tukaj si oglejte Perfect Guide za usposabljanje za C ++.
Priporočeno branje