Минимальный рабочий пример:
#include <stdio.h>
void foo(char* str)
{
printf("%s\n", str);
}
main()
{
foo("foo");
(* foo)("* foo");
}
которые выходят
foo
* foo
Я думал, что имя функции должно быть адресом подпрограммы в сегменте кода, поэтому оператор-звезда должен вернуть исполняемую команду. Но как здесь работает этот оператор? Спасибо, что пролил свет.
В C функции не являются значениями, вы не можете "разыменовать указатель на функцию" и получить что-то (значение), что имеет смысл.
Поэтому попытка разыменования и вызова такого указателя не имеет никакого дополнительного эффекта, это то же самое, что и вызов через указатель.
()
определен для указателей на функции, и существует неявное преобразование из (ссылки на) функции в указатель на функцию.
(&foo)("& foo")
туда, пока вы на нем.