Pointeri la funcții
În acest exemplu, am creat o funcție de mapare care se aplică tuturor elementelor din funcția de matrice, care este trecut ca un argument. Când ne numim hartă, pur și simplu transfera numele de funcții (acestea sunt înlocuite cu indicii). Acum scrie harta funcție, care are ca argument o matrice de tip void:
Acolo avem nevoie de indicii de tip void. Deoarece harta ia un pointer la o funcție, toate funcțiile trebuie să aibă aceleași argumente și returnează același tip. Dar argumentele funcțiilor trebuie să fie de tipuri diferite, astfel încât vom face tipul void. Funcția de hartă primește un pointer de tip void (*) (void *), deci este acum posibil să se transfere oricare din cele patru funcții.
Un exemplu de o altă funcție: funcția de filtru are un pointer la o matrice și returnează dimensiunea noii matrice, lăsând în ea numai acele elemente pentru care se întoarce predicate transmise adevărul logic (predicat - o funcție care returnează adevărat sau fals). În primul rând, vom scrie pentru o matrice int:
Acum, pentru o matrice void
O altă caracteristică - convoluție. Este nevoie ca argumente matrice și funcția de două argumente. Această funcție funcționează după cum urmează: în primul rând, se aplică la primele două argumente, atunci se aplică al treilea argument și rezultatul apelului anterior, apoi la al patrulea argument și rezultatul apelului precedent, etc. Utilizarea convoluție poate, de exemplu, pentru a găsi suma tuturor elementelor din matrice, elementul maxim de matrice, și factorial ca
Cel mai recent exemplu: funcția de sortare de inserare într-o matrice nulă. Deoarece tipul matrice nu este cunoscut, este necesar să se treacă o funcție de comparație.
O serie de indicii la funcții
M assiv indicii pentru funcțiile definite exact în același mod ca și o matrice regulat - cu paranteze drepte, după numele:
De asemenea, a fost posibil să se creeze un tablou dinamic
De multe ori funcționează indicii sunt greoaie. Lucrul cu ele poate fi simplificată prin introducerea unui nou tip. Exemplul anterior poate fi rescrisă ca
Un alt exemplu: orice funcție returnează 1 dacă matricea trecut conține cel puțin un element care satisface pred și 0 altfel.
qsort și bsearch
Biblioteca stdlib BBC are mai multe funcții, care preia ca argumente pointeri la funcții. Funcția qsort primește aceleași argumente ca și scrise de noi caracteristici: o sortare prin inserție serie de tip void, dimensiunea de dimensiunea elementului matrice, și un pointer la funcția de comparare. Să vedem un exemplu simplu - sortarea o serie de siruri de caractere:
Funcția bsearch efectuează o căutare binară a unui tablou sortat și primește un pointer la funcția de comparație, la fel ca qsort funcția. În cazul în care elementul este găsit, returnează un pointer la acel element, în cazul în care elementul nu este găsit, NULL.
ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 [email protected] studenți Stepan Sypachev
Încă nu este clar? - întrebări scrie pe cutie