Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C

Function Pointer in C Struct

4.81/5 (14 votes)
25 Jul 2014CPOL2 min read 305.2K  
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)