Functii, Tablouri și Pointeri în C și C++

Curs
9.4/10 (5 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 12 în total
Cuvinte : 3998
Mărime: 34.10KB (arhivat)
Cost: Gratis

Extras din document

3. Pointeri la functii.

Numele unei functii reprezinta adresa de memorie la care începe functia. Numele functiei este, de fapt, un pointer la functie.

Se poate stabili o corespondenta între variabile si functii prin intermediul pointerilor la functii. Ca si variabilele, acesti pointeri:

• pot primi ca valori functii;

• pot fi transmisi ca parametrii altor functii

• pot fi intorsi ca rezultate de catre functii

La declararea unui pointer catre o functie trebuiesc precizate toate informatiile despre functie, adica:

• tipul functiei

• numarul de parametri

• tipul parametrilor

care ne vor permite sa apelam indirect functia prin intermediul pointerului.

Declararea unui pointer la o functie se face prin:

tip (*pf)(lista_parametri_formali);

Daca nu s-ar folosi paranteze, ar fi vorba de o functie care întoarce un pointer.

Apelul unei functii prin intermediul unui pointer are forma:

(*pf)(lista_parametri_actuali);

Este permis si apelul fara indirectare:

pf(lista_parametri_actuali);

Este posibil sa creem un tablou de pointeri la functii; apelarea functiilor, în acest caz, se face prin referirea la componentele tabloului.

De exemplu, initializarea unui tablou cu pointeri cu functiile matematice uzuale se face prin:

double (*tabfun[])(double) = {sin, cos, tan, exp, log};

Pentru a calcula radacina de ordinul 5 din e este suficienta atribuirea:

y = (*tabfun[3])(0.2);

Numele unei functii fiind un pointer catre functie, poate fi folosit ca parametru în apeluri de functii.

În acest mod putem transmite în lista de parametri a unei functii – numele altei functii.

De exemplu, o functie care calculeaza integrala definita:

va avea prototipul:

double integrala(double, double, double(*)(double));

Definiti o functie pentru calculul unei integrale definite prin metoda trapezelor,cu un numar fixat n de puncte de diviziune:

Folositi apoi aceasta functie pentru calculul unei integrale definite cu o precizie data e. Aceasta precizie este atinsa în momentul în care diferenta între doua integrale, calculate cu n, respectiv 2n puncte de diviziune este inferioara lui e

#include <math.h>

double sinxp();

double trapez(double,double,int,double(*)());

double a=0.0, b=1.0, eps=1E-6;

int N=10;

void main(void)

{ int n=N;

double In,I2n,vabs;

In=trapez(a,b,n,sinxp);

do { n*=2;

I2n=trapez(a,b,n,sinxp);

if((vabs=In-I2n)<0) vabs=-vabs;

In=I2n;

} while(vabs > eps);

printf(“%6.2lfn”, I2n);

}

double trapez(double a,double b,int n,double(*f)())

{ double h,s;

int i;

h=(b-a)/n;

for(s=0.0,i=1;i<n;i++)

s+=(*f)(a+i*h);

s+=((*f)(a)+(*f)(b))/2.0;

s*=h;

return s;

}

4. Declaratii complexe.

O declaratie complexa este o combinatie de pointeri, tablouri si functii. In acest scop se folosesc atributele:

() – functie

[] – tablou

* - pointer

care pot genera urmatoarele combinatii:

* () – functie ce returneaza un pointer

(*)() – pointer la o functie

* [] - tablou de pointeri

(*) [] – pointer la tablou

[ ] [] – tablou bidimensional

Exista si combinatii incorecte, provenite din faptul ca în C nu este permisa declararea:

- unui tablou de functii

- unei functii ce returneaza un tablou.

Acestea sunt:

( ) [ ] – functie ce returneaza un tablou

[ ] ( ) – tablou de functii

( ) ( ) – functie ce returneaza o functie

Pentru a interpreta o declaratie complexa vom inlocui atributele prin urmatoarele sabloane text:

Atribut Sablon text

() functia returneaza

[n] tablou de n

* pointer la

Descifrarea unei declaratii complexe se face aplicând regula dreapta – stânga, care presupune urmatorii pasi:

• se incepe cu identificatorul

• se cauta în dreapta identificatorului un atribut

Preview document

Functii, Tablouri și Pointeri în C și C++ - Pagina 1
Functii, Tablouri și Pointeri în C și C++ - Pagina 2
Functii, Tablouri și Pointeri în C și C++ - Pagina 3
Functii, Tablouri și Pointeri în C și C++ - Pagina 4
Functii, Tablouri și Pointeri în C și C++ - Pagina 5
Functii, Tablouri și Pointeri în C și C++ - Pagina 6
Functii, Tablouri și Pointeri în C și C++ - Pagina 7
Functii, Tablouri și Pointeri în C și C++ - Pagina 8
Functii, Tablouri și Pointeri în C și C++ - Pagina 9
Functii, Tablouri și Pointeri în C și C++ - Pagina 10
Functii, Tablouri și Pointeri în C și C++ - Pagina 11
Functii, Tablouri și Pointeri în C și C++ - Pagina 12

Conținut arhivă zip

  • Functii, tablouri si pointeri in C si C++.doc

Alții au mai descărcat și

Proiectarea Aplicatiilor de Comert Electronic - Aplicatie de Food-Ordering

Progresele realizate recent în domeniile tehnologie-calculatoare, telecomunicatii si software, precum si în alte domenii ale informatiei, au...

Folosirea MySQL și PHP în Gestionarea unei Baze de Date pe Web

Introducere Conţinutul lucrării este dat de construcţia de legături dintre World Wide Web şi baze de date, dintre tehnologia veche şi cea nouă,...

Proiect la Arhitectura Sistemelor de Calcul

1. Tema proiectlui Să se proiecteze unitatea de comandă pentru un microprocesor capabil să execute următorul set de instrucţiuni: - FETCH...

Functii Recursive - Turbo Pascal

CUVÂNT ÎNAINTE Acest proiect la informatica consta în prezentarea în limbajul de programare Turbo Pascal a unei probleme ce îsi propune sa...

Sisteme de Intrari Prelucrari si Iesiri a Datelor prin Intermediul a PHP si MYSQL

Introducere Proiectul de specialitate constituie un element obligatoriu al planului de învatamânt astfel, proiectul de specialitate reprezinta...

Microsoft Excel

Dupa ce programul Excel a fost instalat, pentru a deschide programul Excel se vor efectua urmatorii pasi: - se face clic pe Start, iar pe ecran va...

Prelucrarea Imaginilor Digitale 1

Esantionarea si cuantificare sunt realizate de dispozitivele de achizitie a imaginilor. Acestea pot consta intr-un singur senzor care se misca...

Curs ASDN

1.1. Sisteme de numeratie - Sistemele numerice prelucrează informatie - Informatia este codificată ® un anumit tip de reprezentare - Sistemul...

Ai nevoie de altceva?