- Messaggi: 293
- Ringraziamenti ricevuti 29
restituire un puntatore a funzione
11 Anni 6 Mesi fa #1
da shinshi
restituire un puntatore a funzione è stato creato da shinshi
E' possibile restituire da una funzione un puntatore a funzione? Se si mi dite come si fà?
Grazie
Grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- shinshi
- Autore della discussione
- Elite Member
Riduci
Di più
11 Anni 6 Mesi fa #2
da Fausto
Risposta da Fausto al topic restituire un puntatore a funzione
Trascrivo quello che leggo nel mio manuale di C[Linguaggio C terza edizione Mc Graw Hill] su un paragrafo intitolato "i puntatori a funzione":
..Una funzione occupa una posizione fisica in memoria che puo' essere assegnata a un puntatore.Questo indirizzo è il punto di accesso alla funzione ed è anche l'indirizzo utilizzato per richiamare la funzione. quando un puntatore punta ad una funzione, diventa possibile richiamare la funzione tramite il puntatore. I puntatori a funzione consentono anche di passare le funzioni come argomenti ad altre funzioni.
Per ottenere l'indirizzo di una funzione si usa il nome della funzione senza specificare la parentesi o gli argomenti.
esempio
#include <stdio.h>
#include <string.h>
void check (char *a, char *b, int (*cmp)(const char *, const char *));
int main (void)
{
char s1[80], char s2[80];
int(*p)(const char *, const char *); /*puntatore a funzione*/
p=strcmp; /*assegna a p l'indirizzo di strcmp*/
printf("Introdurre due stringhe");
gets(s1);
gets(s2);
check(s1, s2, p); /*passa l'indirizzo di strcmp tramite p*/
return 0;
}
void check (char *a, char *b, int(*cmp)(const char*, const char *))
{
printf("Verifica l'uguaglianza");
if(!(*cmp)(a,b))printf("Ugauli");
else printf("Diverse");
}
se non ti basta continuo con la spiegazione del programma
..Una funzione occupa una posizione fisica in memoria che puo' essere assegnata a un puntatore.Questo indirizzo è il punto di accesso alla funzione ed è anche l'indirizzo utilizzato per richiamare la funzione. quando un puntatore punta ad una funzione, diventa possibile richiamare la funzione tramite il puntatore. I puntatori a funzione consentono anche di passare le funzioni come argomenti ad altre funzioni.
Per ottenere l'indirizzo di una funzione si usa il nome della funzione senza specificare la parentesi o gli argomenti.
esempio
#include <stdio.h>
#include <string.h>
void check (char *a, char *b, int (*cmp)(const char *, const char *));
int main (void)
{
char s1[80], char s2[80];
int(*p)(const char *, const char *); /*puntatore a funzione*/
p=strcmp; /*assegna a p l'indirizzo di strcmp*/
printf("Introdurre due stringhe");
gets(s1);
gets(s2);
check(s1, s2, p); /*passa l'indirizzo di strcmp tramite p*/
return 0;
}
void check (char *a, char *b, int(*cmp)(const char*, const char *))
{
printf("Verifica l'uguaglianza");
if(!(*cmp)(a,b))printf("Ugauli");
else printf("Diverse");
}
se non ti basta continuo con la spiegazione del programma
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Premium Member
Riduci
Di più
- Messaggi: 143
- Ringraziamenti ricevuti 1
11 Anni 6 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic restituire un puntatore a funzione
Bisogna fare riferimento alla user guide del compilatore e vedere se e' supportata.
Nella guida XC8 era scritto qualcosa ma non ho sottolineato e non ricordo se era supportato o meno.
In particolare alcune architetture si prestano meglio (per esempio gli MSP430).
In questi casi si potrebbe implementare qualcosa di casereccio anche se il compilatore non lo supporta.
Un puntatore ad una funzione e' un puntatore ad un indirizzo e se le funzioni sono poste ad indirizzi noti si possono "richiamare" ponendo il valore di ritorno di una funzione nel Program Counter, ma bisogna fare attenzione al ritorno della funzione.
Saluti,
Mauro
Nella guida XC8 era scritto qualcosa ma non ho sottolineato e non ricordo se era supportato o meno.
In particolare alcune architetture si prestano meglio (per esempio gli MSP430).
In questi casi si potrebbe implementare qualcosa di casereccio anche se il compilatore non lo supporta.
Un puntatore ad una funzione e' un puntatore ad un indirizzo e se le funzioni sono poste ad indirizzi noti si possono "richiamare" ponendo il valore di ritorno di una funzione nel Program Counter, ma bisogna fare attenzione al ritorno della funzione.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
11 Anni 6 Mesi fa #4
da shinshi
Risposta da shinshi al topic restituire un puntatore a funzione
Grazie per le risposte. Cercherò ancora un pò ma forse mi conviene trovare qualcosa di alternativo.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- shinshi
- Autore della discussione
- Elite Member
Riduci
Di più
- Messaggi: 293
- Ringraziamenti ricevuti 29
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.