Could someone explain the logic behind this? Why void
? For example
#include <iostream>
using namespace std;
int main()
{
char c;
cout << (void *)&c;
return 0;
}
cout << (void *)&c;
takes the address of c
, then casts it to void*
, then prints pointer.
The intent here is to print the address of variable c
. But when passing a char *
to std::cout <<
it will attempt to print a null-terminated string. To avoid this (and print the actual address) you have to cast to void*
first.
More explanation:
std::ostream::operator<<
has overload (2) that handles char *
and const char*
. It assumes that a const char*
will point to some string that is eventually terminated by a null-character '\0'
. That's simply a convention used in C and C++.
You want to avoid this and instead use overload (7) to print the address.
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