Function pointer as argument in C Language

Categories: C language

Till now, we have seen that in C programming, we can pass the variables as an argument to a function. We cannot pass the function as an argument to another function. But we can pass the reference of a function as a parameter by using a function pointer. This process is known as call by reference as the function parameter is passed as a pointer that holds the address of arguments. If any change made by the function using pointers, then it will also reflect the changes at the address of the passed variable.

Therefore, C programming allows you to create a pointer pointing to the function, which can be further passed as an argument to the function. We can create a function pointer as follows:

(type) (*pointer_name)(parameter);  

In the above syntax, the type is the variable type which is returned by the function, *pointer_name is the function pointer, and the parameter is the list of the argument passed to the function.


Let's consider an example:

float (*add)(); // this is a legal declaration for the function pointer  

float *add(); // this is an illegal declaration for the function pointer  

A function pointer can also point to another function, or we can say that it holds the address of another function.


float add (int a, int b);  // function declaration  

float (*a)(int, int);  // declaration of a pointer to a function  

a=add; // assigning address of add() to 'a' pointer  

In the above case, we have declared a function named as 'add'. We have also declared the function pointer (*a) which returns the floating-type value, and contains two parameters of integer type. Now, we can assign the address of add() function to the 'a' pointer as both are having the same return type(float), and the same type of arguments.


Let's see a simple example of how we can pass the function pointer as a parameter.

void display(void (*p)())  

{  

    for(int i=1;i<=5;i++)  

    {  

        p(i);  

    }  

}  

void print_numbers(int num)  

{  

    cout<<num;  

}  

int main()  

{  

    void (*p)(int);     // void function pointer declaration  

    printf("The values are :");  

  display(print_numbers);  

    return 0;  

}  


In the above code,

1. We have defined two functions named 'display()' and print_numbers().

2. Inside the main() method, we have declared a function pointer named as (*p), and we call the display() function in which we pass the print_numbers() function.

3. When the control goes to the display() function, then pointer *p contains the address of print_numbers() function. It means that we can call the print_numbers() function using function pointer *p.

4. In the definition of display() function, we have defined a 'for' loop, and inside the for loop, we call the print_numbers() function using statement p(i). Here, p(i) means that print_numbers() function will be called on each iteration of i, and the value of 'i' gets printed.

Top Blogs
Passing structure to function in C Language Published at:- Program in C Language with Practical Published at:- Difference between the typedef and the #define in C Published at:- Use of typedef keyword in Structure C Language Published at:- Difference between typedef and define in C Published at:- Function Calling in C Language Published at:- What is the function call in C Language Published at:- What is getch() in C Language Published at:- Enum in C Language Published at:- Differences between Low-Level language and High-Level language Published at:- Differences between Machine-Level language and Assembly language Published at:- What is a programming language in C Language Published at:- Flow of C Program in C Language Published at:- Data Segments in C Language Published at:- Program Structure with “Hello World” Example Published at:- The C Compiler work in C language and its important Published at:- Inception Of C Language Tutorial for Beginners Published at:- C Expressions in C Language Published at:- Command Line Arguments in C Language Published at:- C #pragma in C Language Published at:- C #error in C Language Published at:- C #else in C Language Published at:- C #if in C Language Published at:- C #ifndef in C Language Published at:- C #ifdef in C Language Published at:- C #undef in C Language Published at:- C #define in C Language Published at:- C #include in C Language Published at:- C Predefined Macros in C Language Published at:- C Preprocessor Directives in C Language Published at:- C ftell() function in C Language Published at:- C rewind() function in Language Published at:- C fseek() function in C Language Published at:- C fputs() and fgets() in C Language Published at:- C fputc() and fgetc() in C Language Published at:- C fprintf() and fscanf() in C Language Published at:- File Handling in C Language Published at:- Deciding the size of the union in C Language Published at:- Union in C Language Published at:- Changing order of the variables In C Language Published at:- Why structure padding in C Language Published at:- Structure Padding in C Language Published at:- Types of Nested Structure in C Language Published at:- Nested Structure in C Language Published at:- C Array of Structures Published at:- typedef in C Language Published at:- What is Structure in C Language Published at:- C Structure in C Language Published at:- C Math in C Language Published at:- C String Functions in C Language Published at:- C gets() and puts() functions in C Language Published at:- Pointers with strings in C Language Published at:- Accepting string as the input in C Language Published at:- Traversing String in C Language Published at:- C Strings In C Language Published at:- Dynamic memory allocation in C Language Published at:- Function pointer as argument in C Language Published at:- C Function Pointer in C Language Published at:- What is a Null Pointer in C Language Published at:- C dereference pointer in C Language Published at:- Advantages of void pointer in C Language Published at:- void pointer in C Language Published at:- Pointer to Constant In C Language Published at:- const Pointer in C Language Published at:- sizeof() operator in C Language Published at:- Dangling Pointers in C Language Published at:- Pointer to function in C Language Published at:- Pointer Arithmetic in C Language Published at:- C Double Pointer (Pointer to Pointer) in C Language Published at:- Pointer Arithmetic in C Language Published at:- C Double Pointer (Pointer to Pointer) Published at:- C Pointers in C Language Published at:- Passing Array to Function in C Published at:- What is an Array in C Language Published at:- Two Dimensional Array in C Language Published at:- C Array in C Language Published at:- Storage Classes in C Published at:- Recursive Function In C Language Published at:- Recursion in C Language Published at:- Call by value and Call by reference in C Language Published at:- Types of Functions in C Language Published at:- C Functions Published at:- C goto statement in C Language Published at:- C continue statement in C Language Published at:- C break statement in C Language Published at:- Nested Loops in C Language Published at:- Nested Loops in C Language Published at:- for loop in C Language Published at:- Properties of while loop in C Language Published at:- while loop in C Language Published at:- do while loop in C Published at:- C Loops of C Language Published at:- Difference Between if-else and switch Published at:- C Switch Statement In C Language Published at:- The C Language in the C Control Statement Published at:- What is the 2s complement in C Published at:- Meaning of Bitwise Operator in C Language Published at:- Conditional Operator in C Language Published at:- Differences Between Compile-Time and Runtime In C Language Published at:- Compile time vs Runtime In C language Published at:- Programming Errors in C Language Published at:- Difference in C language Term Published at:- Static in C Language Published at:- Boolean with Logical Operators in C language Published at:- C Boolean in C language Published at:- Operators in C Language Published at:- Tokens in C language Published at:- Constants in C Published at:- What is ASCII code? Published at:- Escape Sequence in C Published at:- C Format Specifier in C Language Published at:- C Operators in c Language Published at:- C Identifiers Published at:- Data Types in C Published at:- Types of Variables in C Language Published at:- Variables in C Language Published at:- printf() and scanf() in C Published at:- Compilation process in c Published at:- How to install C Language Published at:- Features of C Language Published at:- History of C Language Published at:- Definition of C Language Published at:- Introduction to Implementation of Queue using Linked List Published at:- Input and Output Functions in C Published at:- C Character Set Published at:- Importance of C Programming Language Published at:- How does C Programming Language Work Published at:- History of C Language : Introduction to C Programming Language Published at:- Benefits of C language over other programming languages Published at:- C Language Interview Question and Answers Published at:-
R4Rin Team
The content on R4Rin.com website is created by expert teams.