PUNTATORI A PROCEDURE
tipo_restituito
(*nome_puntatore_funzione) (tipo_parametri);
int
A(int b){
return
a*b;
}
quando dichiaro questa
procedura viene memorizzata in qualche locazione di memoria
int
A(int b){
return
b*3;
}
int
B(int b){
return
b*2;
}
typedef
...
Fun
f;
f
= A;
f
= B;
(*f)(3)
dichiarare = scrivere
il prototipo:
int
f(int x);
definire = prototipo +
corpo:
int
f(int y){return y + 1}
es.
int
f(int y){return y + 1} // introduco un identificatore associato ad
una costante di tipo puntatore a una procedura che prende in input un
valore int e restituisce un valore int
typedef
int(*F)(int x) // F è l'insieme delle funzioni che prendono un
intero e restituiscono un valore di tipo int
F
x; // x è un puntatore a una certa zona di memoria che
contiene determinate istruzioni
x
= f;
y
= f(2); // y = 3
y
= (*x)(2); // y = 3
attenzione alle
parentesi:
int
*F (int x); // è la dichiarazione del prototipo di una
procedura che prende un valore intero e restituisce un indirizzo di
variabile int
int
(*F) (int x); // è una dichiarazione di una variabile di tipo
puntatore a procedura che prende un intero e restituisce un intero
es.
double
seno(double a) { return sin(a); }
double
coseno(double a) { return cos(a); }
double
tangente(double a) { return tan(a); }
int
main() {
double(*goniometrica[])(double)={seno,coseno,tangente};
int
scelta;
scanf("%d",&scelta);
printf("%lf\n",(*goniometrica[scelta])(0));
}
|