Citat:
kajla je napisao:
sta znaci deklaracija
int (*func)(char *)
sta tacno radi ovaj program
int put_s(char *msg)
{
puts(msg);
return 3;
}
int funca(int (*func)(char *)) /*ova funkcija poziva funkciju koja joj je */
/*data kao argument, u ovom slucaju poziva */
{ /*funkciju "int put_s(char *)",pa je valjda*/
return func("Milorad"); /*zato argument ove funkcije (int funca) */
} /*definisan kao: int (*func)(char *) */
void main(void)
{
clrscr();
printf( "%d",funca(put_s) );
getch();
}
Nije tesko ovo objasniti naime krajnje je prosto ako znas sta se radi ;o)
Evo sacu da ti objasnim najkrace i po mogucstvu najlakse sta je pointer na funkciju::
Naime sam pointer na funkciju je adresa te funkcije koja je 32bitan ili nesto tipa 0x0804800 (lupanm adresu)
Kad pozoves nesto ovako :
Code:
int main(){
int (*main1)()=main;
main1();
}
Naime ovaj kod ce da vrti main do besvesti ;o) E sad ako se nesto specifira kao argument
Code:
#include<stdio.h>
int main(){
int (*puts1)(const char *)=puts;
puts1("predator");
}
Znaci sad otprilike znamo kako se definisu funkcijski pointer? Ok e sad da ti objasnim ovaj tvoj prost kod :
Definisana je funkcija funca() koja kao argument prima neku funkciju (zapravo njenu adresu)
Ako bi toj funkciji predao main() dobio bi u programu dole poziv otprilike :
funca(){
main("Milorad");
}
E sad ti predajes toj funkciju funkciju put_s() koja stampa predati string :
Naime ceo ovaj program bi bukvalno mogao da se napise kao:
int main(){
printf("%d\n",put_s("Milorad"));
}
i to bi bila cela mudrost ovog programa ;o)