Неоднозначный звездный оператор для имени функции

0

Минимальный рабочий пример:

#include <stdio.h>

void foo(char* str)
{
    printf("%s\n", str);
}

main()
{
   foo("foo");
   (* foo)("* foo");
}

которые выходят

foo
* foo

Я думал, что имя функции должно быть адресом подпрограммы в сегменте кода, поэтому оператор-звезда должен вернуть исполняемую команду. Но как здесь работает этот оператор? Спасибо, что пролил свет.

  • 0
    Также можете бросить (&foo)("& foo") туда, пока вы на нем.
Теги:
pointers
function-pointers

1 ответ

0
Лучший ответ

В C функции не являются значениями, вы не можете "разыменовать указатель на функцию" и получить что-то (значение), что имеет смысл.

Поэтому попытка разыменования и вызова такого указателя не имеет никакого дополнительного эффекта, это то же самое, что и вызов через указатель.

  • 0
    @Angew Спасибо, я уточнил, что я в основном говорил о C.
  • 0
    C ++, с другой стороны, делает различие между указателем на функцию и ссылкой на функцию. Вы получаете последнее, разыменовывая первое. Просто оператор () определен для указателей на функции, и существует неявное преобразование из (ссылки на) функции в указатель на функцию.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню