Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > function pointer tutorial may be helpful..

Reply
Thread Tools

function pointer tutorial may be helpful..

 
 
devesh
Guest
Posts: n/a
 
      03-05-2008
function pointer is a variable which points to the address
of a function.
it is basically used for removing/replacing switch statement and if
else statement.
it is very usefull to implement callback function.callback functions
are mostely
used in driver writing.it can also be used insted of virtual function
to save some time...


now consider this example to understand how function pointer works...


#include<stdio.h>
static int my_function(int a)
{

printf("my_function :%d",a);
return(2*a+3);
}
int main(void)
{
int (*new_function)(int)= my_function; /* here a function
new_function is decleared, the address of the function named
my_function is assigned to it, and function is invoked by
dereferencing the pointer.*/
int x;
x=(*new_function)(10);
return 0;
}


now consider another example..

void young(int);
void old(int);

int main(void) {
void (*fp)(int);
int age;
printf("How old are you? ");
scanf("%d", &age);
fp = (age > 30) ? old : young;
fp(age);
return 0;
}
void young(int n) {
printf("Being only %d, you sure are young.\n", n);
}
void old(int m) {
printf("Being already %d, you sure are old.\n", m);
}
here the function pointer *fp is declared here as void (*fp)(int),
which specifies both the return type (void) and the types of arguments
(int) of the function. We then assign the pointer to a particular
function, and having done so, can then call the function just as we
normally would.


Another example of the function pointer is..

void young(int);
void old(int);
void greeting(void (*)(int), int); // function pointer is used to call
the function old/young
int main(void) {
int age;
printf("How old are you? ");
scanf("%d", &age);
if (age > 30) {
greeting(old, age);
}
else {
greeting(young, age);
}
return 0;
}
void greeting(void (*fp)(int), int k) {
fp(k);
}
void young(int n) {
printf("Being only %d, you sure are young.\n", n);
}
void old(int m) {
printf("Being already %d, you sure are old.\n", m);


now come to the million dollar question
I have function like arithmetic( int1, int2, int3)
Int3: Arg for select the operation 1. Add 2. Mul 3.
Div 4. Sub
Write the program for above condition without using
switch and if-else

Void arithematic(float a,float b,float (*operation_arithematic)
(float,float));
{
float result=operation_arithematic(a,b);
printf("the result is = %f",result);
}
float plus(float a,float b)
{
return(a+b);
}
float minus(float a,float b)
{
return(a-b);
}
float multiply(float a,float b)
{
return(a*b);
}
float divide(float a,float b)
{
return(a/b);
}
void main( )
{
arithematic(3,5,&plus);
printf("%f",result);

arithematic(7,5,&minus);
printf("%f",result);

arithematic(7,5,&multiply);
printf("%f",result);

arithematic(7,5,&divide);
printf("%f",result);

}

I think this will work fine And this will be very useful to
understand .
 
Reply With Quote
 
 
 
 
Richard Heathfield
Guest
Posts: n/a
 
      03-05-2008
devesh said:

> function pointer is a variable which points to the address
> of a function.


A function pointer is a value that is the address of a function. A function
pointer is said to "point to a function" rather than "point to the address
of a function".

> it is basically used for removing/replacing switch statement and if
> else statement.


That is one possible use.

> it is very usefull to implement callback function.callback functions
> are mostely
> used in driver writing.


Actually, they are used much more widely than that.

> it can also be used insted of virtual function
> to save some time...


C doesn't have virtual functions.

> now consider this example to understand how function pointer works...
>
>
> #include<stdio.h>
> static int my_function(int a)
> {
>
> printf("my_function :%d",a);
> return(2*a+3);
> }
> int main(void)
> {
> int (*new_function)(int)= my_function; /* here a function
> new_function is decleared,


No. There is no function by that name; new_function is not a function, but
a function pointer.

> the address of the function named
> my_function is assigned to it, and function is invoked by
> dereferencing the pointer.*/


Right.

<snip>

> now consider another example..
>
> void young(int);
> void old(int);
>
> int main(void) {
> void (*fp)(int);
> int age;
> printf("How old are you? ");


When you use any variadic function (and that certainly includes printf),
you need to provide a valid function prototype for it. You can do this by
adding:

#include <stdio.h>

at the top of your code. If you don't provide such a prototype, the
behaviour of your program is undefined. (The same applies to scanf and
other variadic functions.)

> scanf("%d", &age);


Check that this scanf call succeeded. The scanf function returns a useful
value that you should test to ensure that it's what you expect.

<snip>

> Void arithematic(float a,float b,float (*operation_arithematic)
> (float,float));


C has no Void type. If you don't define it yourself, it doesn't exist.
(Hint: C is case-sensitive.)

<snip>

> void main( )


In C, main returns int.

<snip>

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
function pointer and pointer to function prashant.khade1623@gmail.com C Programming 3 04-11-2008 07:30 AM
diffrence between "function pointer" and "pointer to a function" murgan C Programming 6 12-21-2005 06:01 AM
Passing pointer to template function as argument to pointer to template function Vijai Kalyan C++ 4 11-08-2005 07:53 PM
pointer to member function and pointer to constant member function Fraser Ross C++ 4 08-14-2004 06:00 PM
function pointer and member function pointer question glen stark C++ 2 10-10-2003 01:41 PM



Advertisments