http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48545
--- Comment #4 from Dmitry Gorbachev <d.g.gorbachev at gmail dot com>
2011-04-11 18:45:50 UTC ---
*output and output have different types, but numberically they are equal.
That's how C works.
More fun:
extern int printf(const char *, ...);
char str[4] = "abc";
int main(void)
{
int (*f)(const char *, ...) = &printf;
int (*g)(const char *, ...) = printf;
char (*p)[4] = &str;
char *q = str;
(*f)("%p %p %p %p %p %p\n", &printf, printf, f, *f, g, *g);
f("%p %p %p %p %p %c\n", &str, str, p, *p, q, *q);
return 0;
}
It prints:
0x80482d8 0x80482d8 0x80482d8 0x80482d8 0x80482d8 0x80482d8
0x8049624 0x8049624 0x8049624 0x8049624 0x8049624 a