#include<stdio.h>

int f1(void) { return 1; }
int f2(void) { return 2; }
int f3(void) { return 3; }
int f4(void) { return 4; }

struct what { int (*f) () ; } a[10];

main() {
   int i ;
 
   a[1].f = &f1 ; /* gives warning that & ignored on mips.
                     but silent on gcc */
   a[2].f = *f2 ; /* ok by both, perhaps automatic conversion
                     after explicit dereference? */
   a[3].f = f3 ;
   a[4].f = f4 ;

   printf("%d\n", a[1].f() ) ; /* automatic * */
/*   printf("%d\n", *a[1].f() ) ; /* Illegal, * doesn't bind */
   printf("%d\n", (* a[2].f) () ) ; /* Fine, * binds looser than postfix */
   printf("%d\n", (*(a[3].f))() ) ; /* Fine, fully parent. */

}
