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;
}
Infinite loop
Hi
Hello Hi
Error
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
33 comments Page 1 of 4.

Suraj said:   7 years ago
Thanks for the valuable information @Govind.
(1)

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.
(1)

Robert said:   1 decade 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.
(1)

Ram said:   8 years ago
Is this the correct way of passing any function into another function? Please explain.

Amruta said:   9 years ago
int (*p) () p is a function pointer which should point to a function taking no args and returning int.

Nagu said:   9 years ago
Why the infinite loop not exist when main was used?

The infinite loop does not exist because of the sub-function not recursive function so not infinite loop exists.

The sub-function print "hello" then come to the main function. Then print "hi" end the program.

So not confusing the pointer argument that only pass main program address that not used in sub-function.

Thanks.

Karthik said:   9 years ago
Why the infinite loop not exist when main was used?

Niharika said:   10 years ago
As main call go there will recursion and no output.

Giridhar said:   7 years ago
Pointer function "*p() " which is referring to main is not invoking in "fun(int (*p) ()) ". So, the main() function is not invoked in recursive.

Aritra said:   1 decade ago
@Govind.

Your explanations are really helpful. Thanks a lot.


Post your comments here:

Your comments will be displayed after verification.