From the below code snippet I am getting the address of the function is 1. why ?
#include<iostream>
using namespace std;
int add(int x, int y)
{
int z;
z = x+y;
cout<<"Ans:"<<z<<endl;
}
int main()
{
int a=10, b= 10;
int (*func_ptr) (int,int);
func_ptr = &add;
cout<<"The address of function add()is :"<<func_ptr<<endl;
(*func_ptr) (a,b);
}
Function pointers aren't convertible to data pointers. You'd get a compiler error if you were to try and assign one to a void*
variable. But they are implicitly convertible to bool
!
That is why the bool
overload for operator<<
is chosen over the const void*
one.
To force the overload you want, you'd need to use a very strong C++ cast, that will almost completely ignore the static type information.
#include<iostream>
using namespace std;
int add(int x, int y)
{
int z;
z = x+y;
cout<<"Ans:"<<z<<endl;
}
int main()
{
int a=10, b= 10;
int (*func_ptr) (int,int);
func_ptr = &add;
cout<<"The address of function add()is :"<< reinterpret_cast<void*>(func_ptr) <<endl;
(*func_ptr) (a,b);
}
Note that casting and treating function pointers as data pointers is only conditionally supported (from the C++ standard standpoint). Using it for anything other than casting back to the same function pointer will have an implementation specific outcome, that can very greatly among compilers.
The overload used is
ostream& ostream::operator<< (bool val);
Which prints 1
as your function pointer is not null.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With