Когда мы нуждаемся и когда передаем функцию? - PullRequest
2 голосов
/ 22 июня 2011

Я нашел следующие типы кодов работы:

hash_init.key       = &hash_key_lc;  

И

ls->handler = init_connection;

Здесь и hash_key_lc, и init_connection являются функциями, но один с &другие нет, почему?

ОБНОВЛЕНИЕ

так что это одно и то же, но что такое рациональное ??

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

Это идентично следующему вопросу: В C, в чем разница между `& function` и` function` при передаче в качестве аргументов?

Принятый ответ там:

Нет никакой разницы. Для доказательства см. C99 (раздел 6.7.5.3.8).

"Объявление параметра как ‘‘ Функция, возвращающая тип ’’ должна быть настроен на ‘‘ указатель на функцию тип возврата ’’, как в 6.3.2.1. "

1 голос
/ 22 июня 2011

См. Раздел C99 6.3.2.1, §4:

A обозначение функции - это выражение с типом функции.За исключением случаев, когда это операнд оператора sizeof или унарный оператор &, указатель функции с функцией типа '', возвращающей тип '', преобразуется в выражение с указателем типа '' нафункция, возвращающая тип ''.

Таким образом, если foo является функцией, выражения foo и &foo в основном взаимозаменяемы, в частности

foo == &foo

Это похоже на то, как выражения с типом массива неявно преобразуются в выражения с типом указателя.Кроме того, если fp является указателем на функцию, вы можете вызвать его с разыменованием или без него, то есть выражения

(*fp)(42)

и

fp(42)

эквивалентны.Вызовы функций фактически определяются в терминах указателей функций (раздел 6.5.2.2 §1), а не в качестве указателей функций, т. Е. В том, что касается языковой семантики, *fp в первом примере неявно преобразуется обратно в fp до того, как парены будутприложенное.

1 голос
/ 22 июня 2011

reference/deference на function рассматривается как особый случай языка в c, поскольку function заслуживает такого особого случая, его нельзя передать определенным value, вы можете только передайте это address/reference.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...