C Programming - Functions - Discussion
Discussion Forum : Functions - Find Output of Program (Q.No. 18)
18.
What will be the output of the program?
#include<stdio.h>
int fun(int(*)());
int main()
{
fun(main);
printf("Hi\n");
return 0;
}
int fun(int (*p)())
{
printf("Hello ");
return 0;
}
Discussion:
33 comments Page 1 of 4.
Govind said:
1 decade ago
Hi all,
For those who are thinking what is the use of passing pointer to the main function.
Well, please don't confuse your self.
The function 'int fun (int (*p)())' is a function which takes a function pointer as an argument and returns an integer. And '*p' is a pointer to such a function which takes no argument but return int. Just like our main function.
Now, when the programme starts, main will call fun passing the address of main function. But in the function 'fun' we are not using the address of the main at all. We are just passing it.
So in fun it will only print 'Hello' and return to the calling function where it prints 'Hi' and terminates.
I hope this helps.
Thanks.
For those who are thinking what is the use of passing pointer to the main function.
Well, please don't confuse your self.
The function 'int fun (int (*p)())' is a function which takes a function pointer as an argument and returns an integer. And '*p' is a pointer to such a function which takes no argument but return int. Just like our main function.
Now, when the programme starts, main will call fun passing the address of main function. But in the function 'fun' we are not using the address of the main at all. We are just passing it.
So in fun it will only print 'Hello' and return to the calling function where it prints 'Hi' and terminates.
I hope this helps.
Thanks.
(1)
Robert said:
9 years ago
Both fun and main are returning integers data types.
int(*p)() = a pointer to a function
Since we can treat a function name like a pointer holding its address so we can access it :
int(*p)() = main (where remember int(*p)() is a pointer to a function and main is also a pointer to the address of function main)
The "main" the argument of the fun is not used in any statement here, thereby it goes with the execution of fun() => the body of the fun will be executed untouched => prints Hello => gives back control to the main function via return 0.
In the main function, after the body of fun() got executed and it returns => prints Hi and exits => answer Hello Hi.
int(*p)() = a pointer to a function
Since we can treat a function name like a pointer holding its address so we can access it :
int(*p)() = main (where remember int(*p)() is a pointer to a function and main is also a pointer to the address of function main)
The "main" the argument of the fun is not used in any statement here, thereby it goes with the execution of fun() => the body of the fun will be executed untouched => prints Hello => gives back control to the main function via return 0.
In the main function, after the body of fun() got executed and it returns => prints Hi and exits => answer Hello Hi.
Shravana said:
1 decade ago
Sorry guys. I can't understand the line: int fun(int(*p)()). Can anyone explain it?
XYZ said:
1 decade ago
Can we write like these :fun(main) ?
Is it valid? How?
Is it valid? How?
Asha said:
1 decade ago
What is the meaning of fun(main) ?
Robin said:
1 decade ago
If we are not using the address of main function then what is the need for passing it?
SSFD said:
1 decade ago
The address of main was passed just to complicate things and test whether you can understand the concept or not. In actual program none is going to do so.
Govind said:
9 years ago
Please, can anyone explain fun(main) will not go for infinite?
Aritra said:
9 years ago
@Govind.
Your explanations are really helpful. Thanks a lot.
Your explanations are really helpful. Thanks a lot.
Tinky said:
1 decade ago
Adding to @Raju comment:
If I pass any arguments on the calling functions then how will the function work and what is the use of it?
Passing a variable (by value or reference) has practical implementations in Projects, but what is the use of passing a function? Can we access the variable of function if we pass them as argument?
Thanks in advance,
If I pass any arguments on the calling functions then how will the function work and what is the use of it?
Passing a variable (by value or reference) has practical implementations in Projects, but what is the use of passing a function? Can we access the variable of function if we pass them as argument?
Thanks in advance,
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers