H mânca mai mult studiem B, cu atât mai mare program. Colectăm toată acțiunea într-o singură funcție principală și în mod repetat, copiați aceiași pași, vom crea zeci de variabile cu nume unice. Programele noastre se umfla si devin mai puțin și mai puțin clare, ramificare sunt din ce în ce mai lungi și mai ramificat.
Dar din această situație există o cale! Acum vom învăța cum să creeze funcții pe BBC. Funcția, în primul rând, va contribui la alocarea în rutine separate pentru duplicat cod, și în al doilea rând, va ajuta să împartă în mod logic programul în părți, în al treilea rând, cu funcțiile în B implică o mulțime de caracteristici care permit noi abordări pentru aplicații de structurare.
Funcția - o parte a unui program numit, care poate fi apelat în mod repetat de la o altă parte a programului (în care această caracteristică este vizibilă). Funcția poate lua un număr fix sau variabil de argumente și nu pot avea argumente. Funcția poate returna fie o valoare sau să fie goale (nule), și nu sa mai întors.
Suntem deja familiarizați cu multe dintre caracteristicile și știu cum să le numesc -. Această funcție de bibliotecă stdio, stdlib, șir de caractere, Conio etc. Mai mult decât atât, principal - aceasta este, de asemenea, o funcție. Acesta diferă de celelalte numai prin faptul că este este pornit punctul de intrare pentru aplicație.
Funcția în B, determinată într-un context global. Sintaxa ei este:
Cel mai simplu exemplu - o funcție care ia un flotor și returnează pătratul numărului de
În interiorul SQR funcția, am creat o variabilă locală, care i se atribuie valoarea argumentului. Ca argument pentru o funcție transferat numărul 9.3. revenirea oficială cuvânt returnează valoarea variabilei TMP. Funcția poate fi rescrisă după cum urmează:
În acest caz, multiplicarea se realizează mai întâi, și apoi valoarea returnată. În acest caz, în cazul în care funcția nu se întoarce, tipul de retur este nulă. De exemplu, o funcție care imprimă pătratul numărului:
în acest caz, înseamnă revenirea funcției de ieșire. Dacă funcția nu returnează nimic, revenirea nu se poate scrie. Apoi, funcția va termina înainte de sfârșitul anului, și va exista un control întoarcere apelantului.
Dacă funcția are argumente, parantezele sunt lăsate goale. Puteți scrie, de asemenea, vidul cuvântul:
Parametrii formale și reale
De exemplu, să presupunem că există o funcție care returnează pătratul numărul și funcția pe care adaugă două numere.
Consider că mulaje prosihodit implicit și numai atunci când este posibil. Dacă funcția are un număr ca argument, atunci este imposibil să treacă un șir de variabile, cum ar fi „20“, etc. În general, este întotdeauna mai bine să se folosească tipul corect sau explicit exprimate pentru tipul corect.
Dacă funcția returnează o valoare, nu trebuie neapărat să fie stocate. De exemplu, vom folosi funcția getch care citește un caracter și o returnează.
Transmiterea argumentelor
La calcularea primei metode parametru de trecere numit de transfer semnificativ, al doilea - transmiterea indicatorului. Amintiți-vă o regulă simplă: dacă doriți să modificați o variabilă, trebuie să treacă un indicator de funcție pentru variabila. Prin urmare, pentru a schimba indicatorul, trebuie să treacă un pointer la un pointer, etc. De exemplu, a scrie o funcție care va avea dimensiunea de matrice de tip int și de a crea o. La prima vedere, funcția ar trebui să arate ceva de genul asta:
Pentru a schimba obiectul, trebuie să treacă un pointer la acesta, în acest caz - un pointer la un pointer.
Acum, totul funcționează așa cum ar trebui.
exemplu mai asemănătoare. Scrieți o funcție care ia un șir de caractere ca argument și returnează un pointer la zona de memorie în care este copiat șirul.
Acest recursivitate mixt - Funcția ciudat returnează 1 dacă numărul este impar și 0 dacă chiar.
Să creeze o bibliotecă simplă. Pentru a face acest lucru va trebui să creați două fișiere - una cu extensia .h și a pus prototipurile funcționale, și un altul cu .c extensie, și a pus la definirea acestor funcții. Dacă lucrați cu IDE, fișierul .h trebuie să fie create în fișierele antet dosar și fișierele de cod în fișierele de cod sursă. fișier gol numit File1.h și File1.c
Rescrie codul anterior. Aici se va arata ca un fișier header File1.h
conținutul fișierului sursă File1.c
Funcția noastră principală
Luați în considerare caracteristicile fiecărui fișier. Dosarul nostru care conține funcția principală, aceasta include biblioteca necesar și fișierul antet File1.h. Acum compilatorul cunoscute prototipuri funcționale, adică, el știe tipul de întoarcere, numărul și tipul de argumente și nume de funcții.
Fișierul antet, așa cum sa arătat anterior, conține prototipul funcției. De asemenea, pot fi conectate biblioteci. Makrozaschita #define _FILE1_H_ etc. Acesta este utilizat pentru a preveni re-copie cod de bibliotecă la momentul compilarii. Aceste linii pot fi înlocuite cu un singur
Se transferă matrice ca argument
Un e menționat mai devreme, un nume de matrice este înlocuit cu un pointer, astfel încât transferul de matrice unidimensionale este echivalentă cu indicatorul de transmisie. Exemplu: Funcția primește matrice și mărimea și amprentele sale:
În acest exemplu, funcția poate fi de forma
De asemenea, amintim că regula de substituție de pe indicatorul matrice nu este recursiv. Acest lucru înseamnă că este necesar să se precizeze dimensiunea de matrice bidimensională de transmisie
Sau, puteți scrie
În cazul în care o matrice bidimensională este creată în mod dinamic, puteți trece un pointer la un pointer. De exemplu, o funcție care ia o serie de cuvinte și returnează o matrice de numere întregi, care sunt egale cu lungimea fiecărui cuvânt:
Puteți reveni în schimb un pointer la o matrice, trece o matrice care urmează să fie completat
În această primă întâlnire cu funcția se termină: tema este foarte mare și împărțită în mai multe articole.
ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 [email protected] studenți Stepan Sypachev