В языке C передача функции как аргумента другой функции происходит через указатель на функцию. 3
Процесс передачи включает следующие шаги: 1
- При компиляции функции выделяются участки памяти для формальных параметров. 1 Формальные параметры становятся внутренними объектами функции. 1
- Вычисляются значения выражений, использованных в качестве фактических параметров при вызове функции. 1
- Значения выражений заносятся в участки памяти, выделенные для формальных параметров функции. 1
- В теле функции выполняется обработка с использованием значений внутренних объектов-параметров, и результат передаётся в точку вызова функции как возвращаемое ею значение. 1
При этом код, написанный внутри функции, не может изменять значения аргументов, которые использовались при вызове функции. 5
Исключение составляет передача массивов в качестве аргументов: в таком случае функции передаётся адрес массива, и её внутренний код может изменить содержимое массива. 5