function pointer

#include <stdio.h> 
// A normal function with an int parameter 
// and void return type 
void fun(int a) 
{ 
	printf("Value of a is %d\n", a); 
} 

int main() 
{ 
	// fun_ptr is a pointer to function fun() 
	void (*fun_ptr)(int) = &fun; 

	/* The above line is equivalent of following two 
	void (*fun_ptr)(int); 
	fun_ptr = &fun; 
	*/

	// Invoking fun() using fun_ptr 
	(*fun_ptr)(10); 

	return 0; 
} 

 

 

 

  

1) Unlike normal pointers, a function pointer points to code, not data. Typically a function pointer stores the start of executable code.

2) Unlike normal pointers, we do not allocate de-allocate memory using function pointers.

3) A function’s name can also be used to get functions’ address. For example, in the below program, we have removed address operator ‘&’ in assignment. We have also changed function call by removing *, the program still works.

filter_none

edit

play_arrow

brightness_4

#include <stdio.h>
// A normal function with an int parameter
// and void return type
void fun(int a)
{
    printf("Value of a is %d\n", a);
}
  
int main()
    void (*fun_ptr)(int) = fun;  // & removed
  
    fun_ptr(10);  // * removed
  
    return 0;

 5) Function pointer can be used in place of switch case. For example, in below program, user is asked for a choice between 0 and 2 to do different tasks.

#include <stdio.h> 
void add(int a, int b) 
{ 
	printf("Addition is %d\n", a+b); 
} 
void subtract(int a, int b) 
{ 
	printf("Subtraction is %d\n", a-b); 
} 
void multiply(int a, int b) 
{ 
	printf("Multiplication is %d\n", a*b); 
} 

int main() 
{ 
	// fun_ptr_arr is an array of function pointers 
	void (*fun_ptr_arr[])(int, int) = {add, subtract, multiply}; 
	unsigned int ch, a = 15, b = 10; 

	printf("Enter Choice: 0 for add, 1 for subtract and 2 "
			"for multiply\n"); 
	scanf("%d", &ch); 

	if (ch > 2) return 0; 

	(*fun_ptr_arr[ch])(a, b); 

	return 0; 
} 

  

typedef can be used to simplify the usage of function pointers. 

 

#include<stdio.h>

void print_to_n(int n)
{
    for (int i = 1; i <= n; ++i)
        printf("%d\n", i);
}

void print_n(int n)
{
    printf("%d\n, n);
}



typedef void (*printer_t)(int);
printer_t p = &print_to_n;
p(5);   

The above code is equivlant to:

void (*p)(int) = &print_to_n;
(*p)(5);
 

 

posted @ 2020-04-14 04:22  anyu686  阅读(140)  评论(0编辑  收藏  举报