functions returning pionters to functions
    djh at ccivax.UUCP 
    djh at ccivax.UUCP
       
    Fri Dec 16 02:39:35 AEST 1983
    
    
  
	The declaration 'int (*ptr)()' defines 'ptr' as a pointer to
	an integer function. What you want to do is replace 'ptr' with
	your function definition of 'getroutine(name, table)', thus
	giving 'int (*(getroutine(name, table)))()' which defines
	getroutine as a function with two arguements which returns a
	pointer to an integer function (or function that returns an 
	integer).
	
	Note that 'ptr' was replaced by '(getroutine(name, table))'.
	The enclosing parenthesis are necessary to bind the arguements
	to getroutine before the * (pointer binding) is applied.
	
	Following is a sample program and execution printout.
/*
 *	functest.c	program to test functions that return pointers
 *			to other functions.
 */
int a()		/* define integer function a */
{
	printf("In function 'a'\n");
	return(1);
}
int b()		/* define integer function b */
{
	printf("In function 'b'\n");
	return(2);
}
int c()		/* define integer function c */
{
	printf("In function 'c'\n");
	return(3);
}
int (*(func(arg)))()	/* define function func which returns */
int arg;		/* an integer function pointer */
{
	switch(arg) {
	case 1:
		return(a);
	case 2:
		return(b);
	case 3:
		return(c);
	}
}
main()
{
	int (*ptr)();	/* ptr is pointer to integer function */
	ptr = func(3);
	printf("Returned %d\n",(*ptr)());
	ptr = func(1);
	printf("Returned %d\n",(*ptr)());
	/* ptr = func(2); test without intermediate step */
	printf("Returned %d\n",(*(func(2)))());
}
	Sample Execution:
In function 'c'
Returned 3
In function 'a'
Returned 1
In function 'b'
Returned 2
	Dan Hazekamp
	Computer Consoles Inc.
	Rochester N.Y.
	{siesmo,allegra}!rochester!ccivax!djh
    
    
More information about the Comp.unix
mailing list