*i
указывает на простое целое число, тогда как *p
- указатель на функцию без аргументов , возвращающая целое число. Таким образом, эти два типа имеют совершенно разные типы, и поскольку вы сказали, что p
должен указывать на функцию, возвращающую int, вы не можете сказать ей, что она указывает на int.
Тем не менее, вы можете попытаться обернуть оба в союз следующим образом:
union u {
int *i;
int (*p)(void);
};
int f(void){
return 5;
}
int main(int argc, char *argv[]) {
union u myU;
int a=6;
myU.i=&a;
myU.p=&f;
return 0;
}
Обратите внимание, что после назначения &f
вы можете просто позвонить myU.p()
. Но если вы пропустите присвоение &f
и вызовете myU.p()
впоследствии, это приведет к неопределенному поведению (то есть сбоям программы).