Click here to Skip to main content
15,881,248 members
Articles / Programming Languages / C
Tip/Trick

Function Pointer in C Struct

Rate me:
Please Sign up or sign in to vote.
4.81/5 (14 votes)
25 Jul 2014CPOL2 min read 297K   22   12
Using the Function Pointer inside C struct

Introduction 


Pointers form very important part of C language, so the solid understanding of the pointers and the effectively in using them will enable the programmer to write more experienced programs.We should always remeber that the pointer is variable hold memory address.  Pointer can refer to  usual data type like int, char, double and etc . For example when you type 

int * intptr;     // declare pointer to integer value 

int intval = 5 ;  // declare integer value 

intptr = & intval ; // intptr now include the memory address of the intval

Not only regulare data type but also pointer can point to functions.

Function Pointers

The function pointer is a pointer hold the address of the function. Since C is not OOP language I Consider the Function Pointer as the Father of virtual functionality in the modern languages. In the oop language each driven class will  implements the virtual method depend on its need. In the C it is something similar, since we give the function pointer the address of the desired function implementation.

Syntax

To declare function pointer we have to follow the next syntax 

Return Type       * function pointer's variable name ) ( parameters 

The declaration of function pointer called func which accept two integer parameters and return an integer value will be like next:

C++
int (*func)(int a , int b ) ; 

It is convenient to declare a type definition for function pointers  like:

C++
typedef int (*func)(int a , int b ) ; 

Function Pointer in Struct

Stuct in C used to represent data structure elemenst, such as student data structure. Struct can contian varible from simple data type and others  from complex ones. complex data type such as varible of function pointer. The easy way to explain the programming ideas by give some simple and suffecient code, Let is start by defining a function pointer and  simple struct.

We define first an function pointer called Operation which return an int value and accepts two integer parameters

typedef   int (*Operation)(int a , int b );

Let us also have a simple struct STR which contains pointer to the Operation function pointer and an integer variable to store the returned value from the Operation variable:

typedef  struct _str {

       int  result ; // to sotre the resut
       Operation  opt; // funtion pointer 

 } STR;

Now we will define tow function Add and Multi , each of them retuen integer value and accept two integer parameters.

/*
* Add two numbers a and b 
*/

int Add ( int a , int b ){
     
      return a+b ;
}

/*
* Multiple two numbers a and b 
*/

int Multi ( int a , int b ){

       return a*b ;
}

Now we can write the main method and learning how to assign the function pointer to the proper function

int main (int argc , char **argv){

      STR str_obj;

      str_obj.opt = Add;//the function pointer variable point to Add function 

      str_obj. result = str_obj.opt(5,3);

      printf (" the result is %d\n", str_obj.result );

      str_obj.opt= Multi;//the function pointer variable point to Multi function 

      str_obj. result = str_obj.opt(5,3);

      printf (" the result is %d\n", str_obj.result );

      return 0 ;

}

The results will be :

the result is 8

the result is 15

Conclusion

Function pointer is c technique which  enable the programmer to controlling the execution sequence within an application by allowing alternate functions to be executed based on the application’s needs.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Germany Germany
Seek knowledge from the cradle to the grave

Comments and Discussions

 
GeneralMy vote of 5 Pin
Jan Zumwalt4-Sep-23 5:51
Jan Zumwalt4-Sep-23 5:51 
GeneralYou have a typo. Pin
Member 1603480121-Jun-23 12:28
Member 1603480121-Jun-23 12:28 
GeneralMy vote of 5 Pin
Radu_Socaciu2-Aug-14 0:29
Radu_Socaciu2-Aug-14 0:29 
GeneralRe: My vote of 5 Pin
Mohammad_Hamad2-Aug-14 8:05
Mohammad_Hamad2-Aug-14 8:05 
thank for your words which encourages me to do my best in the next articles
QuestionFunction Pointer in C Pin
Member 1090401629-Jul-14 17:26
Member 1090401629-Jul-14 17:26 
AnswerRe: Function Pointer in C Pin
Mohammad_Hamad29-Jul-14 21:30
Mohammad_Hamad29-Jul-14 21:30 
SuggestionI think .... Pin
Cristian Amarie25-Jul-14 3:38
Cristian Amarie25-Jul-14 3:38 
GeneralThis is the path to C++ Pin
John Brett25-Jul-14 2:31
John Brett25-Jul-14 2:31 
GeneralRe: This is the path to C++ Pin
Mohammad_Hamad25-Jul-14 4:01
Mohammad_Hamad25-Jul-14 4:01 
SuggestionRe: This is the path to C++ Pin
CaFeSito28-Jul-14 10:55
CaFeSito28-Jul-14 10:55 
GeneralRe: This is the path to C++ Pin
Mohammad_Hamad28-Jul-14 11:33
Mohammad_Hamad28-Jul-14 11:33 
GeneralRe: This is the path to C++ Pin
CaFeSito28-Jul-14 11:43
CaFeSito28-Jul-14 11:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.