Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




POINTERI LA FUNCTII

c


POINTERI LA FUNCTII

Daca intr-o functie este nevoie sa se apeleze alta functie, atunci metoda comoda de lucru este ca aceasta din urma sa fie declarata ca parametru pentru prima functie. In limbajul C, o functie poate apare ca parametru numai ca pointer la acea functie.

Un pointer la o functie se declara prin :



tip ( * nume-functie) (lista-declaratii-parametri) ;

unde "tip" este tipul valorii returnate de functie (poate fi si void), iar "lista-declaratii-parametri" este o lista de declaratori pentru parametri separati prin virgule. Specificarea acestei liste nu este obligatorie.

Exemplu

float ( *func) (unsigned, char) ;

Mai sus se declara func ca fiind un pointer spre o functie care are doi parametri, primul unsigned si al doilea char si returneaza o valoare de tip float.

Un pointer catre o functie are ca valoare adresa de memorie unde incepe partea de instructiuni executabile a functiei in cauza. In ceea ce priveste obtinerea facem precizarea ca numele unei functii neurmat de paranteze rotunde este pointer catre functie.

Daca de exemplu avem functie cu prototipul :

long test (int, float) ;

atunci "test" este pointer la aceasta functie.

Observatie

Parantezele rotunde de la declaratia de pointer la functie : ( *nume-functie) sunt necesare, deoarece fara ele :

tip *nume-functie ( ) ;

obtinem o declaratie corecta, dar de functie ce returneaza pointer (vezi paragraful precedent) si nu de pointer la functie. Aceasta pentru ca "( )" sunt mai prioritare decat "*".

Exemplu 5.8.1

Fie de calculat valoarea aproximativa a integralei definite dintr-o functie f. O metoda suficient de rapid convergenta este metoda Simpson (vezi [ ] pag. ). Formula lui Simpson este:

I h/3 * [f(a)+2(f(a+2h)+f(a+4h)+.+f(a+(2n-2)h) )+4 *(f(a+h)+f(a+3h)+.+f(a+(2n-1)h) ) ]



unde h = (b-a)/2n.

Vom scrie o functie Simpson care calculeaza expresia de mai sus si in care va fi apelata functia f transmisa primeia ca un pointer la functie.

# include "stdio.h"

# include "math.h."

double f (double) ;

double Simpson (double a, double b, unsigned n, double ( *f) ( ) ) ;

/* Ultimul parametru al functiei Simpson este pointer la functia f */

main ( )

while (a > = b || eps < = 0) ;

n = 4 ;

i 2 = Simpson (a, b, n, f) ;

/* Ultimul parametru este pointer la fc. f */

do

while (fabs (i1 - i2) / 15 > = eps) ;

/* Criteriul de oprire este i1 - i2 / 15 eps unde */

/* i2 este urmatoarea aprox. obtinuta dubland nr. de */

/* intervale */ printf ("Valoarea integralei = %f \ n", i2) ;

double Simpson (double a, double b, unsigned n, double ( *pf) ( ) )

/* aproximatie */

double f (double x)





Document Info


Accesari: 1136
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )