scusa ma a me sembra che con:Originariamente inviato da giuseppe500
1)void h(void (*pf)(int*)) {} dichiara un puntatore alla funzione f ?ma perchè questa sintassi , non riesco bene a comprendere.
non venga dichiarato alcun puntatore alla funzione f, ma bensì venga definita la funzione h di tipo void che ha per argomento un puntatore a funzione (di tipo void che ha per argomento un puntatore a int).codice:void h(void (*pf)(int*)) {}
Facciamo un prova giusto per conferma:
confermato ;-)codice:/* Isidoro Ghezzi $ g++ --version; g++ -ansi -pedantic -Wextra -Wconversion main.cpp; ./a.out i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The value is: 2010; */ #include <iostream> void test (int * thePtr){ std::cout << "The value is: " << (*thePtr) << ";" << std::endl; } void h(void (*pf)(int*)){ int a = 2010; pf (&a); } int main (void){ h (test); return 0; }
EDIT:
che è equivalente a (in modo più leggibile ricorrendo al typedef):
codice:/* Isidoro Ghezzi $ g++ --version; g++ -ansi -pedantic -Wextra -Wconversion main.cpp; ./a.out i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The value is: 2010; */ #include <iostream> void test (int * thePtr){ std::cout << "The value is: " << (*thePtr) << ";" << std::endl; } typedef void (*PointerToAFunctionWithAnIntegerPointerAsArg) (int * theIntegerPointer); void h(PointerToAFunctionWithAnIntegerPointerAsArg pf){ int a = 2010; pf (&a); } int main (void){ h (test); return 0; }

Rispondi quotando